Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. [error] [function:generateChart] TypeError: ....

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [error] [function:generateChart] TypeError: ....

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      woupi @mickym last edited by woupi

      @mickym
      Ok, Danke.
      Dann habe ich sicher irgendwo bei SAE einen Fehler gemacht.

      Folgende Module müssen über Manage Palette -> Install installiert werden:
      
      node-red-node-ui-table
      node-red-dashboard
      Für die nachfolgende Installation von camueller/node-red-contrib-ui-timelines-chart muss git installiert sein, was sich durch den Befehl sudo apt install git erreichen lässt.
      
      Einige weitere Bibliotheken müssen manuell in der Shell installiert werden, während man sich im Verzeichnis ~/.node-red (Docker: /data) befindet:
      
      camueller/node-red-contrib-ui-timelines-chart
      date-fns
      Dazu muss der nachfolgende Befehl für jeden Namen aus der vorangegangen Liste einmal ausgeführt werden, wobei <name> jeweils durch den Listeneintrag ersetz werden muss:
      
      $ npm i <name>
      Die Bibliothek date-fns muss noch in der Datei ~/.node-red/settings.js (Docker: /data/settings.js) eingetragen werden. Dazu in der Datei suchen nach functionGlobalContext) und ändern wie folgt:
      
      functionGlobalContext: {                                                         
        datefns:require('date-fns')                                                  
      },
      

      Die Anleitung habe ich so nicht verstanden und ich denke, da muss ich nochmal nachforschen.
      So weiß ich aber wenigstens, das es damit zu tun haben muss und nicht mit Node-Red oder dem Adapter.
      VG

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @woupi last edited by mickym

        @woupi Du musst halt die Node installieren - aber nichts mit npm.
        Mach in der Adapterkonfig an, dass Du den Pallettenmanager nutzen willst und installiere die Node über den Pallettenmanager oder alternativ trag das Modul in der Adapterkonfiguration ein. Blos nichts mit npm rumkonfigurieren.

        Das dashboard hast ja auch nicht installiert.

        node-red-node-ui-table
        node-red-dashboard

        W 1 Reply Last reply Reply Quote 0
        • W
          woupi @mickym last edited by

          @mickym

          Vielen Dank.
          Den Pallettenmanager hatte ich aktiviert, ich habe nur aus der Not raus, da ich nicht weiter gekommen bin, den Adapter und auch die Instanz gelöscht und neu installiert und dieses mal den Pallettenmanager noch nicht aktiviert.

          Auch ist und war auch schon node-red-node-ui-table und node-red-dashboard über den Pallettenmanager installiert.

          Also hatte ich den Teil ja schonmal richtig gemacht.

          Auf den gleichen Weg habe ich node-red-contrib-ui-timelines-chart istalliert.
          Nur date-fns, lässt sich so nicht installieren, bzw der Pallettenmanager findet dazu nichts.
          Also gehe ich davon aus, dass da mein Problem liegt.
          VG

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @woupi last edited by mickym

            @woupi sagte in [error] [function:generateChart] TypeError: ....:

            date-fns

            Gut wenn Du unbedingt nodejs Module in einer function Node brauchst, dann installiert man die überhaupt nicht, sondern trägt das ganze in die function Node selbst ein - und das installiert sich völlig automatisch.

            Diese Funktion ist im Adapter automatisch freigeschaltet. Also hier eintragen: https://nodered.org/docs/user-guide/writing-functions

            siehe: Using the functionExternalModules option

            a7054cb4-698d-40b0-b6c9-3304f2ff4b2e-image.png

            Im Übrigen habe ich zur Nutzung externer Module auch einen ausführlichen Beitrag hier an Board geschrieben: https://forum.iobroker.net/topic/53446/ext-nodejs-module-in-node-red-on-the-fly-nutzen-ab-v-3-0.
            Dort findest Du auch Hintergründe und die entsprechenden Pfade, wo beispielsweise diese Module unter dem iobroker dann installiert werden.

            Ich frag mich NUR, warum man so einen Mist braucht, wenn man anstelle von function Nodes - Change Nodes nimmt. Da ist die moments Bibliothek enthalten und da kann man die meisten Dinge mit Hausmitteln machen und schreibt auch nicht viel Code.

            Eine Zusammenstellung zur Datums- und Zeitverarbeitung mit Hausmitteln von NodeRed - habe ich vor gut einem Jahr ja mal hier verfasst: https://forum.iobroker.net/topic/50086/datum-und-zeitverarbeitung-mit-nodered

            Um zum Beispiel Tage zu einem bestimmten Datum zu addieren ist hier mit Hausmitteln sehr einfach beschrieben: https://forum.iobroker.net/post/717238

            W 1 Reply Last reply Reply Quote 0
            • W
              woupi @mickym last edited by

              @mickym sagte in [error] [function:generateChart] TypeError: ....:

              Nochmal vielen Dank.
              Ich muss nur leider gestehen, das ich keine Ahnung habe was ich wo machen sollte.
              Wie gesagt, ich kenne Node-Red und auch den Adapter nicht.
              Ich habe den von dir verlinkten Beitrag gelesen, komme aber auch da nicht weiter und zwar weil ich schlicht nicht weiß wie ich an die Stelle in dem Screenshot, den Du immer wieder zeigst, komme.

              a7054cb4-698d-40b0-b6c9-3304f2ff4b2e-image.png

              VG

              W 1 Reply Last reply Reply Quote 0
              • W
                woupi @woupi last edited by

                @woupi
                Ah, ich glaube ich habe es gefunden.
                Doppelklick auf das function Node.
                Dann mach ich mal weiter.

                1 Reply Last reply Reply Quote 0
                • W
                  woupi last edited by

                  Ich habe es offensichtlich falsch verstanden.

                  So habe ich das bei jeder function Node eingetragen, Fehler bleiben aber, also gehe ich davon aus, dass das was ich da gemacht habe, falsch ist und damit, dass ich die Texte nicht verstanden habe. Sorry.
                  nodered.jpg

                  mickym 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @woupi last edited by

                    @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.

                    W 1 Reply Last reply Reply Quote 0
                    • W
                      woupi @mickym last edited by

                      @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"
                            ]
                          ]
                        },
                      
                      1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active last edited by

                        @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-

                        W 2 Replies Last reply Reply Quote 0
                        • W
                          woupi @mickym last edited by woupi

                          @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.

                          sae.txt

                          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

                          1 Reply Last reply Reply Quote 0
                          • W
                            woupi @mickym last edited by

                            @mickym

                            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
                                        }
                                    }
                                }
                            }
                            
                            
                            mickym 1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @woupi last edited by mickym

                              @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:

                              c3a27589-2e8d-435a-bf4d-2def2edb19cc-image.png

                              Achte bitte darauf dass datefns - das f klein geschrieben ist.

                              Die erste Zeile in dieser function Node kommentierst du aus - bzw. löschst die:

                              2ab63c23-7d76-43d8-a43e-7de14763ef99-image.png
                              067d2eb4-8f48-4161-97f3-f336e05981fe-image.png

                              Zumindest scheint es dann zu funktionieren und zum aktuellen Datum werden 2 Tage dazu gezählt:

                              faa807b1-a009-4140-90a3-73ea5ab5c2a4-image.png

                              Für mich sieht das so aus, also ob das ein Nachfolger der moments Library ist.

                              W 1 Reply Last reply Reply Quote 0
                              • W
                                woupi @mickym last edited by

                                @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)"
                                
                                
                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @woupi last edited by mickym

                                  @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:

                                  84c80e4c-d060-48bf-b4ea-91d04de452cf-image.png

                                  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.

                                  W 1 Reply Last reply Reply Quote 0
                                  • W
                                    woupi @mickym last edited by

                                    @mickym
                                    sorry, hattest recht, ich habe bei einem der 17 habe ich es übersehen.

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @woupi last edited by mickym

                                      @woupi Ja das Problem ist - man kann es auch anders beheben - dass die Anleitung mit einer alten NodeRed Version gearbeitet hat.
                                      66c7d66c-91ad-4abc-9df7-966bbab7a30e-image.png

                                      Auch die NodeJS Version ist nicht mehr aktuell.

                                      Das was die gemacht haben ist die settings.js zu ändern.

                                      b0073f1a-5b52-4c9d-8628-cc1455b65e0c-image.png

                                      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.

                                      W 1 Reply Last reply Reply Quote 0
                                      • W
                                        woupi @mickym last edited by

                                        @mickym
                                        vielen Dank und schönen Abend.
                                        VG
                                        Sascha

                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        953
                                        Online

                                        31.7k
                                        Users

                                        79.7k
                                        Topics

                                        1.3m
                                        Posts

                                        2
                                        20
                                        417
                                        Loading More Posts
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        The ioBroker Community 2014-2023
                                        logo