Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. String in 2 Variable/Objekte

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    String in 2 Variable/Objekte

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

      Nabend,

      ich hole mir mit Node-Red über Mqtt Daten, die in Base64 encrypted sind.

      Decrypted werden die Daten im Skript:

      Input= "MyAAMDE5AAA="

      function:

      // msg1 - Unencrypted (vanilla data)
      var msg1 = { payload: msg.payload.length };
      msg1.payload = JSON.parse(msg.payload);
      msg1.payload = msg1.payload;
      
      // msg2 - Decrypt to Text
      var msg2 = { payload: msg.payload.length };
      msg2.payload = JSON.parse(msg.payload);
      msg2.payload = new Buffer(msg2.payload.payload, 'base64').toString('ascii');
      
      // msg3 - Decrypt as Binary value (MSB,LSB)
      var msg3 = { payload: msg.payload.length };
      msg3.payload = JSON.parse(msg.payload);
      msg3.payload = new Buffer(msg3.payload.payload, 'base64').toString('hex');
      msg3.payload = parseInt(msg3.payload, 16);
      
      return [ msg1, msg2, msg3 ];
      

      in ASCII und Hex

      Im Output werden die Daten in einem String ausgegeben:

      • <size size="200">3 019</size> 3 Helligkeitswert

      019 Temperatur.

      Diese beiden Werte würde ich gerne getrennt im IoBroker als Objekte anlegen.

      Mit der Funktion:

      var outputMsgs = [];
      var words = msg.payload.split(" ");
      for (var w in words) {
          outputMsgs.push({payload:words[w]});
      }
      return [ outputMsgs ];
      

      bekomme ich die beiden Daten einzeln angezeigt, schaffe es aber nicht auch beide Werte einzeln so auszugeben,

      dass diese dann mit dem IOBroker verknüpft werden können.

      Gibt es hier einen Javascript Experten, der mir an dieser Stelle weiterhelfen kann oder einen besseren Weg kennt? 😄

      Gruß

      Micha

      1 Reply Last reply Reply Quote 0
      • eric2905
        eric2905 last edited by

        Hi,

        Du machst das ganze doch in Node-Red, wenn ich Dich richtig verstanden habe.

        Du hast doch am Script-Block 3 Ausgänge (durch "Return [msg1, msg2, msg3]").

        An den jeweiligen Ausgangspunkt bindest Du dann den ioBroker-Output (also zwei Stück).

        Ich hoffe es kommt rüber was ich meine. Hab nur mein iPhone zur Hand und bin erst morgen Abend zu Hause.

        Gruß,

        Eric

        1 Reply Last reply Reply Quote 0
        • frankjoke
          frankjoke last edited by

          Nach Adam-Riese sollte:

          var words = msg.payload.split(" ");
          
          var helligkeit = words[1]; 
          var temperatur = words[2];
          
          

          Solltest dann die unterschiedlichen Werte einzeln verarbeiten können.

          1 Reply Last reply Reply Quote 0
          • M
            Michy last edited by

            Klasse das werde ich morgen früh gleich mal testen

            Gesendet von iPhone mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • M
              Michy last edited by

              Die Variante von Eric hat leider nicht geklappt.

              Fsjoke, wie bringe ich das in ein Script ? Also das splitten, welches mein Script macht und das mit deinem - in 2 strings ausgeben?

              Gruß

              Micha

              Gesendet von iPhone mit Tapatalk

              1 Reply Last reply Reply Quote 0
              • eric2905
                eric2905 last edited by

                Moin,

                @Michy:

                Die Variante von Eric hat leider nicht geklappt. `
                Was hat da nicht geklappt?

                Hast Du bei der Funktion unten die Anzahl Outputs auf 3 erhöht?

                Du musst rechts an dem Funktionsblock 3 kleine Kreise haben (siehe Screenshot)
                355_outputs.png
                355_function.png

                Und Du musst im ioBroker-Output noch angeben, das ein nicht existierender Datenpunkt erzeugt werden soll.
                355_create_datenpunkt.png

                Und hier mal mein kompletter Test als Node-Red-Export:
                355_flow.png

                ! ````
                [
                {
                "id": "4ccef53d.2e1dec",
                "type": "function",
                "z": "e863ae55.b767a8",
                "name": "Funktion",
                "func": "var wert1 = {};\nvar wert2 = {};\nvar wert3 = {};\n\nwert1.payload = "1";\nwert2.payload = "2";\nwert3.payload = "3";\n\nreturn [wert1, wert2, wert3];\n",
                "outputs": "3",
                "noerr": 0,
                "x": 332.5,
                "y": 771,
                "wires": [
                [
                "4a44b388.416b54",
                "7a97485e.94816"
                ],
                [
                "e75de716.e74258",
                "1c477691.5b99c9"
                ],
                [
                "b1e2db79.5596",
                "77c1711a.b379e8"
                ]
                ]
                },
                {
                "id": "9affbc33.e2f368",
                "type": "inject",
                "z": "e863ae55.b767a8",
                "name": "Start",
                "topic": "",
                "payload": "",
                "payloadType": "date",
                "repeat": "",
                "crontab": "",
                "once": false,
                "x": 100.5,
                "y": 775,
                "wires": [
                [
                "4ccef53d.2e1dec"
                ]
                ]
                },
                {
                "id": "4a44b388.416b54",
                "type": "debug",
                "z": "e863ae55.b767a8",
                "name": "",
                "active": true,
                "console": "false",
                "complete": "payload",
                "x": 707.5,
                "y": 615,
                "wires": []
                },
                {
                "id": "e75de716.e74258",
                "type": "debug",
                "z": "e863ae55.b767a8",
                "name": "",
                "active": true,
                "console": "false",
                "complete": "false",
                "x": 716.5,
                "y": 730,
                "wires": []
                },
                {
                "id": "b1e2db79.5596",
                "type": "debug",
                "z": "e863ae55.b767a8",
                "name": "",
                "active": true,
                "console": "false",
                "complete": "false",
                "x": 720.5,
                "y": 852,
                "wires": []
                },
                {
                "id": "7a97485e.94816",
                "type": "ioBroker out",
                "z": "e863ae55.b767a8",
                "name": "",
                "topic": "node-red.0.Test.wert1",
                "ack": "false",
                "autoCreate": "true",
                "x": 730.5,
                "y": 656,
                "wires": []
                },
                {
                "id": "1c477691.5b99c9",
                "type": "ioBroker out",
                "z": "e863ae55.b767a8",
                "name": "",
                "topic": "node-red.0.Test.wert2",
                "ack": "false",
                "autoCreate": "true",
                "x": 740.5,
                "y": 767,
                "wires": []
                },
                {
                "id": "77c1711a.b379e8",
                "type": "ioBroker out",
                "z": "e863ae55.b767a8",
                "name": "",
                "topic": "node-red.0.Test.wert3",
                "ack": "false",
                "autoCreate": "true",
                "x": 739.5,
                "y": 892,
                "wires": []
                }
                ]

                
                Gruß,
                
                Eric
                1 Reply Last reply Reply Quote 0
                • M
                  Michy last edited by

                  Danke für die ausführliche Antwort, hatte die Anzahl der Ausgänge nur auf 2 erhöht. Werde das heute Abend nochmal versuchen.

                  Gruß

                  Micha

                  Gesendet von iPhone mit Tapatalk

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  967
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  3787
                  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