Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node Red Array in ioBroker nutzen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Node Red Array in ioBroker nutzen

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      andre1000 last edited by

      Hallo zusammen,

      ich habe in node red ein Array mit 17 Variablen erstellt. Ich möchte dieses Array geasmt in ioBroker nutzen. Gibt es eine Möglichkeit, das gesamte Arry zu übertragen?

      Danke für die Unterstützung

      André

      1 Reply Last reply Reply Quote 0
      • R
        rewenode last edited by

        hi,

        ich bin nicht sicher, ob ich dein Problem richtig verstanden habe, aber wenn du in NR ein Array an einen state übergibst, tut es das auch, auch wenn man es optisch im state nur als string sieht.

        Ich hab man einen Minimal-Flow gebastelt.

        ! ````
        [
        {
        "id": "b4b05430.922da8",
        "type": "ioBroker out",
        "z": "a9a2a713.60106",
        "name": "set node-red_array to iob-State",
        "topic": "node-red.0.myArrayState",
        "ack": "false",
        "autoCreate": "true",
        "x": 250,
        "y": 160,
        "wires": []
        },
        {
        "id": "c33ff31b.e30ac8",
        "type": "inject",
        "z": "a9a2a713.60106",
        "name": "injectetd array",
        "topic": "",
        "payload": "[1,2,3,4,5]",
        "payloadType": "json",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 190,
        "y": 80,
        "wires": [
        [
        "b4b05430.922da8"
        ]
        ]
        }
        ]

        
         ![3999_flow.png](/assets/uploads/files/3999_flow.png) 
        
        Und hier der state.
        
         ![3999_state.png](/assets/uploads/files/3999_state.png) 
        1 Reply Last reply Reply Quote 0
        • A
          andre1000 last edited by

          Hallo rewenode,

          danke für die Antwort. Ich glaube, dass ich mein Problem nicht komplett beschrieben habe.

          Hier einmal komplett beschrieben.

          Ich empfange über red node ein CAN Telegramm. Dies setzt sich wie folgt zusammen:

          msg.canid (z.B. 0x100)

          msg.payload (z.B. 80 04 01) - dies sind die Zustände von Schaltern, die in ioBroker verwendet werden sollen

          da ich bis jetzt alles über node red gemacht hatte, habe ich die Telegramme in die einzelnen Bits aufgeteilt, mit der folgenden Struktur:

          msg.CANID

          msg.IN1

          msg.IN2

          ..

          msg.IN32

          Jetzt suche ich eine einfache Möglichkeit, die Signale in ioBroker weiter zuverwenden. Hier ist die Variante mit dem Array eine mögliche. Jedoch habe ich es bisher nicht geschafft, ein Array aus der Struktur zu erstellen.

          Vielleicht hat jemand eine gute Idee.

          Danke

          André

          1 Reply Last reply Reply Quote 0
          • R
            rewenode last edited by

            Was ich da sehe, sind einzelne Properties im msg-Objekt IN1..IN32. Was konkret In1.. sind sehe ich nicht.

            Sowas läßt sich ganz simpel mit dem change-node machen.

            Damit wir aber nicht wieder aneinander vorbei reden, poste doch einfach mal einen Export deiner originalen Struktur aus dem debug-node.

            3999_objekt-struktur-copy.png

            1 Reply Last reply Reply Quote 0
            • A
              andre1000 last edited by

              Hallo,

              anbei meine Struktur aus Node Red
              2159_1.jpg

              Ich hoffe, dass es jetzt klarer ist.

              André

              1 Reply Last reply Reply Quote 0
              • R
                rewenode last edited by

                Das ist mal wieder nur ein Bild. Du solltest die Struktur als Text posten, so wie ich es im Bild gezeigt habe, kann man sich die Struktur als ASCII-String in die Zwischenablage kopieren und dann als Text posten.

                Jemand der die helfen will, kann diese dann direkt verwenden und außerdem vermeidet man so Fehler. Aber sei's drum…

                Nach deinem Bild hast du deine Daten als Properties von msg angelegt. Das sollte in node-red vermieden werden! Dafür ist msg.payload vorgesehen.

                Also wo du in deinem functions-node msg.IN0 stehen hast sollte msg.payload.IN0 stehen usw. besser noch als eigenes Object.

                msg.payload.myout = {};
                let myout =  msg.payload.myout;
                
                myout.IN0 = was_es_halt_sein_soll; 
                //usw.
                

                Jetzt hast du alle zusammengehörigen Daten in eine Object. Das läßt sich dann ganz simpel mit einem Change-node in ein Array überführen. z.B. so:

                ! ````
                [
                {
                "id": "4f62b5b4.c33e7c",
                "type": "inject",
                "z": "98aa089a.d49718",
                "name": "",
                "topic": "",
                "payload": "{"ID":4711,"IN1":0,"IN2":1,"IN3":2}",
                "payloadType": "json",
                "repeat": "",
                "crontab": "",
                "once": false,
                "onceDelay": 0.1,
                "x": 130,
                "y": 280,
                "wires": [
                [
                "79129325.03cf64",
                "7258677a.1ce2b"
                ]
                ]
                },
                {
                "id": "79129325.03cf64",
                "type": "debug",
                "z": "98aa089a.d49718",
                "name": "",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "true",
                "x": 530,
                "y": 280,
                "wires": []
                },
                {
                "id": "fd2caf0c.32a608",
                "type": "debug",
                "z": "98aa089a.d49718",
                "name": "",
                "active": true,
                "tosidebar": true,
                "console": false,
                "tostatus": false,
                "complete": "false",
                "x": 550,
                "y": 360,
                "wires": []
                },
                {
                "id": "7258677a.1ce2b",
                "type": "change",
                "z": "98aa089a.d49718",
                "name": "obj.property -> array",
                "rules": [
                {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.*[]",
                "tot": "jsonata"
                }
                ],
                "action": "",
                "property": "",
                "from": "",
                "to": "",
                "reg": false,
                "x": 360,
                "y": 360,
                "wires": [
                [
                "fd2caf0c.32a608"
                ]
                ]
                }
                ]

                
                So wie du es gemacht hast, ist es vergleichsweise aufwendig. Aber du könntest es immer noch in reinem Javascript im function-node machen. Etwa so:
                
                

                //definiere dein array
                let myarray = [];
                //eigenschaften fommen aus dem payload,
                //ist hier aber egal woher sie kommen
                //{"ID":4711,"IN1":0,"IN2":1,"IN3":2}

                //für alle Elemente an, die du willst
                myarray.push(msg.payload.ID);
                myarray.push(msg.payload.IN1);
                myarray.push(msg.payload.IN2);
                myarray.push(msg.payload.IN3);

                //hänge das array an das msg-objekt
                msg.payload.myarry=myarray;

                return msg;

                
                Also wenn du damit auch noch nicht klar kommst, poste nächstes mal unbedingt deinen flow als Export! Und sie dir an, wie du einen low dann importieren kannst, damit du eine evtl. Hilfe auch verwenden kannst.
                1 Reply Last reply Reply Quote 0
                • A
                  andre1000 last edited by

                  Hallo,

                  vielen Dank für den Tip. Habe es jetzt mit dem Array hinbekommen.

                  André

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  470
                  Online

                  31.7k
                  Users

                  79.9k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  11817
                  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