NEWS
[error] [function:generateChart] TypeError: ....
-
@mickym sagte in [error] [function:generateChart] TypeError: ....:
@woupi willst du eigentlich NodeRed verstehen oder nur den Flow zum Laufen bringen. Wenn nur Letztes dann exportiere den Flow und stelle den hier in Code Tags ein und gib vielleicht noch die Quelle an, woher Du den Flow hast.
Im Moment nur den Flow zum laufen bringen. Wobei ich nicht mal weiß ob das, für das Programm SAE, zwingend Notwendig oder nur ein zusätzliches feature ist.
Der Flow umfast 8000 Zeilen. Da das hier nicht einzufügen ist, hier die ersten 192 Zeilen
Quelle: https://github.com/camueller/SmartApplianceEnabler/blob/master/doc/NodeRED_DE.md[ { "id": "c43962b6ea552bbc", "type": "mqtt-broker", "name": "MQTT Broker (SAE)", "broker": "127.0.0.1", "port": 1883, "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "sessionExpiry": "" }, { "id": "c708b02aa4ea7d17", "type": "ui_base", "theme": { "name": "theme-light", "lightTheme": { "default": "#0094CE", "baseColor": "#0094CE", "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif", "edited": true, "reset": false }, "darkTheme": { "default": "#097479", "baseColor": "#097479", "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif", "edited": false }, "customTheme": { "name": "Untitled Theme 1", "default": "#4B7930", "baseColor": "#4B7930", "baseFont": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif" }, "themeState": { "base-color": { "default": "#0094CE", "value": "#0094CE", "edited": false }, "page-titlebar-backgroundColor": { "value": "#0094CE", "edited": false }, "page-backgroundColor": { "value": "#fafafa", "edited": false }, "page-sidebar-backgroundColor": { "value": "#ffffff", "edited": false }, "group-textColor": { "value": "#1bbfff", "edited": false }, "group-borderColor": { "value": "#ffffff", "edited": false }, "group-backgroundColor": { "value": "#ffffff", "edited": false }, "widget-textColor": { "value": "#111111", "edited": false }, "widget-backgroundColor": { "value": "#0094ce", "edited": false }, "widget-borderColor": { "value": "#ffffff", "edited": false }, "base-font": { "value": "-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif" } }, "angularTheme": { "primary": "indigo", "accents": "blue", "warn": "red", "background": "grey", "palette": "light" } }, "site": { "name": "Node-RED Dashboard", "hideToolbar": "false", "allowSwipe": "false", "lockMenu": "false", "allowTempTheme": "true", "dateFormat": "DD/MM/YYYY", "sizes": { "sx": 48, "sy": 48, "gx": 6, "gy": 6, "cx": 6, "cy": 6, "px": 0, "py": 0 } } }, { "id": "71cf749113c40c7c", "type": "ui_tab", "name": "Smart Appliance Enabler", "icon": "dashboard", "disabled": false, "hidden": false }, { "id": "b3d9d250e1d51bc2", "type": "tab", "label": "Allgemein", "disabled": false, "info": "" }, { "id": "dda3b4861f6afb0a", "type": "ui_group", "name": "Allgemein", "tab": "71cf749113c40c7c", "order": 4, "disp": true, "width": "27", "collapse": true, "className": "" }, { "id": "e2b502e287ad182d", "type": "ui_template", "z": "b3d9d250e1d51bc2", "group": "dda3b4861f6afb0a", "name": "Styles", "order": 5, "width": 0, "height": 0, "format": "<style>\n.nr-dashboard-ui_table {\n padding-top: 15px !important;\n}\n</style>", "storeOutMessages": true, "fwdInMessages": true, "resendOnRefresh": true, "templateScope": "global", "className": "", "x": 170, "y": 40, "wires": [ [] ] }, { "id": "fcc5c3fdf1c8a138", "type": "mqtt in", "z": "b3d9d250e1d51bc2", "name": "", "topic": "sae/Event/#", "qos": "2", "datatype": "json", "broker": "c43962b6ea552bbc", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 170, "y": 100, "wires": [ [ "bb20ef6633dc9346" ] ] },
-
@woupi Teilflows nützen hier nichts. Entweder kopierst Du den ganzen Flow hier rein oder hängst ihn als Datei an Dein Posting-
vielleicht schreibst Du auch mal import as datefns - das F klein. oder Du kopierst mal so eine FunctionNode. in der diese Bibliothek genutzt wird hier in CodeTags-
-
@mickym sagte in [error] [function:generateChart] TypeError: ....:
@woupi Teilflows nützen hier nichts. Entweder kopierst Du den ganzen Flow hier rein oder hängst ihn als Datei an Dein Posting-
vielleicht schreibst Du auch mal import as datefns - das F klein. oder Du kopierst mal so eine FunctionNode. in der diese Bibliothek genutzt wird hier in CodeTags-
Das ein Teil nichts nütz war mir fast klar, ich wollte nur nicht, nichts reinpacken. Das mit dem anhängen habe ich hier auch noch nie gemacht, habe etwas gesucht und auch gefunden, darum hier der ganze Code.
Das andere versuche ich aber natürlich auch.
Aus deinem Text entnehme ich, dass das was ich da gemacht habe, so aber schon der richtige Weg war und es nur einfach (warum auch immer) nicht funktioniert, oder?Danke
VG -
var datefns = global.get('datefns'); const dateFormat = 'yyyy-MM-dd HH:mm:ss'; const startDateTime = new Date().setUTCHours(0, 0, 0, 0); const endDateTime = datefns.addDays(new Date(startDateTime), 2); const optionalEntries = msg.payload.entries.filter(entry => entry.min !== null && !!entry.max && entry.min !== entry.max) const optionalEnabledEntries = optionalEntries.filter(entry => entry.enabled) const optionalDisabledEntries = optionalEntries.filter(entry => !entry.enabled) const requiredEntries = msg.payload.entries.filter(entry => (entry.type === 'RuntimeRequest' && entry.min === null && entry.max > 0) || entry.type === 'SocRequest'); const requiredEnabledEntries = requiredEntries.filter(entry => entry.enabled) const requiredDisabledEntries = requiredEntries.filter(entry => !entry.enabled) const buildOptionalDataItem = (entry) => { return { timeRange: [ entry.start, entry.end ], val: entry.max - entry.min } }; const buildRequiredDataItem = (entry) => { return { timeRange: [ entry.start, entry.end ], val: entry.max } }; return { topic: msg.topic, payload: { dataItems: [ { group: "optional", data: [ { label: "disabled", data: optionalDisabledEntries.map(entry => buildOptionalDataItem(entry)) }, { label: "enabled", data: optionalEnabledEntries.map(entry => buildOptionalDataItem(entry)) } ] }, { group: "required", data: [ { label: "disabled", data: requiredDisabledEntries.map(entry => buildRequiredDataItem(entry)) }, { label: "enabled", data: requiredEnabledEntries.map(entry => buildRequiredDataItem(entry)) } ] } ], settings: { xAxis: { startDateTime: datefns.format(startDateTime, dateFormat), endDateTime: datefns.format(endDateTime, dateFormat), }, chart: { height: 20, topMargin: 0 } } } }
-
@woupi so ich habs denke - ich - das ist wieder mal ein Problem. das man uralte Flows importiert.
Also das Problem ist die function Node "generateChart"
Nur in diesen trägst Du diese ein:
Achte bitte darauf dass datefns - das f klein geschrieben ist.
Die erste Zeile in dieser function Node kommentierst du aus - bzw. löschst die:
Zumindest scheint es dann zu funktionieren und zum aktuellen Datum werden 2 Tage dazu gezählt:
Für mich sieht das so aus, also ob das ein Nachfolger der moments Library ist.
-
@mickym
Vielen Dank für deine Mühe und Hilfe.
Ich habe alle geändert.
Nun kommen leider neue Fehler:function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:16:17node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:16:47node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:17:17node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:17:48node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:18:17node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)" 5.3.2023, 19:18:47node: generateChart function : (error) "ReferenceError: datefns is not defined (line 4, col 21)"
-
@woupi Nochmal Du musst vorne im setup das richtig einstellen - hab doch den Screenshot gepostet:
Nicht nur die Zeile löschen sondern im setup das RICHTIG eintragen:
Der Fehler kommt nur, wenn das nicht richtig eingetragen ist. - Und zwar in jede function Node, die diese Funktion nutzt - also in alle GenerateChart Nodes. Deaktivere alle Flows - dass Du nur einen Flow aktiv hast - und dann siehst Du ja ob es tut.
Alternativ muss man wahrscheinlich die settings.js bearbeiten - das halte ich aber nicht für gut.
-
@mickym
sorry, hattest recht, ich habe bei einem der 17 habe ich es übersehen. -
@woupi Ja das Problem ist - man kann es auch anders beheben - dass die Anleitung mit einer alten NodeRed Version gearbeitet hat.
Auch die NodeJS Version ist nicht mehr aktuell.
Das was die gemacht haben ist die settings.js zu ändern.
Du musst sowas halt genau lesen.
Im iobroker Umfeld hättest Du das zwar machen können, indem Du die settings.js unter /opt/iobroker/node-modules/iobroker.node-red bearbeitest. Aber das musst Du dann nach jedem Adapterupdate machen.
Wenn Du das so gemacht hättest, dann hätte auch der code unverändert funktioniert - aber so ist es sauberer.
-
@mickym
vielen Dank und schönen Abend.
VG
Sascha