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. Anfängerfrage: String zerlegen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Anfängerfrage: String zerlegen

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      frankyboy73 @ColdIce last edited by

      @coldice Siehe meinen vorigen Post, den habe ich noch mal überarbeitet, hatte mir das schon gedacht. Vielleicht kann man das auch in der Funktion lösen, aber dafür bin ich nicht gut genug in Java.
      Wahrscheinlich könnte man das ganze auch mit ner Split Node machen, aber dafür kenne ich mich mit dem Ding nicht gut genug aus.

      C 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @ColdIce last edited by

        @coldice sagte in Anfängerfrage: String zerlegen:

        als Ausgabe bekomme ich jetzt NaN , 2700

        klar doch, wenn du die gesamte payload beim Komma splittest

        1 Reply Last reply Reply Quote 0
        • C
          ColdIce @frankyboy73 last edited by

          @frankyboy73
          ja wir haben uns überschnitten 🙂

          ich habe deinen Post schon beachtet und eingearbeitet und es funktioniert !!!!

          Danke für die schnelle Hilfe !

          F 2 Replies Last reply Reply Quote 0
          • F
            frankyboy73 @ColdIce last edited by

            @coldice Gerne, aber da gibts bestimmt noch ne sauberere Lösung. Vielleicht schaut ja noch ein Experte hier rein.

            Asgothian 1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @frankyboy73 last edited by

              @frankyboy73

              mit regexp interessiert dich nicht vas vor oder hinter den Zahlen steht. So solltest du genau die Zahlen bekommen die Du haben willst.

              let arr = output.match(/(\d+),(\d+)/g);
              if (arr && arr.length > 2) {
                msg1 = {payload:parseInt(arr[1])};
                msg2 = {payload:parseInt(arr[2])};
              }
              
              F 1 Reply Last reply Reply Quote 0
              • F
                frankyboy73 @Asgothian last edited by

                @asgothian
                Hi, mal getestet, da kommt dann diese Ausgabe:
                TypeError: output.match is not a function

                Asgothian 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @frankyboy73 last edited by

                  @frankyboy73 mm. dann hat node red kein regex an den Strings.. schade

                  F mickym 2 Replies Last reply Reply Quote 0
                  • F
                    frankyboy73 @Asgothian last edited by

                    @asgothian Hi, habe mal noch ein bisschen rumgetestet.
                    so sieht der Code jetzt in der Funktion Node aus.

                    let arr = msg.payload.match(/(\d+),(\d+)/g);
                    
                    var msg1 = {payload:parseInt(arr[0])};
                    
                    var msg2 = {payload:parseInt(arr[1])};
                    
                    return [msg1, msg2];
                    

                    Also als Ausgabe bekomme ich dann bei msg1 die 86, aber bei msg2 NaN, also keinen Wert.

                    mickym 1 Reply Last reply Reply Quote 0
                    • F
                      frankyboy73 @ColdIce last edited by

                      @coldice Hi, also wenn du dir die Change Node sparen willst kannst du das auch so in der Funktion Node machen.

                      msg.payload = msg.payload.replace('temp(', '');
                      var output = msg.payload.split (",");
                      var msg1 = {payload:parseInt(output[0])};
                      var msg2 = {payload:parseInt(output[1])};
                      return [msg1, msg2];
                      

                      Das relace oben nimmt das "temp(" weg.

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

                        @asgothian Das stimmt nicht. Node Red kann RegEx in function nodes - in Change nodes usw.

                        @ColdIce Hier mal ein Lösungsvorschlag mit 2 Ausgabemöglichkeiten:

                        Hier mal meine beiden Vorschläge ohne function Node - einmal die Nachrichten nacheinander und einmal nach Parametern getrennt. Genutzt habe ich den RegEx von @asgothian und das match kommando allerdings in der Change Node. 😉

                        Hier der Flow zum Importieren:

                        [
                            {
                                "id": "59d0183a.3a4388",
                                "type": "change",
                                "z": "dce8fa20.2e93c8",
                                "name": "",
                                "rules": [
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "$match(payload,/(\\d+),(\\d+)/)\t",
                                        "tot": "jsonata"
                                    },
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "payload.groups",
                                        "tot": "msg"
                                    }
                                ],
                                "action": "",
                                "property": "",
                                "from": "",
                                "to": "",
                                "reg": false,
                                "x": 430,
                                "y": 2360,
                                "wires": [
                                    [
                                        "c0019637.221b18",
                                        "260425a7.1458da"
                                    ]
                                ]
                            },
                            {
                                "id": "473ec056.cf67d",
                                "type": "inject",
                                "z": "dce8fa20.2e93c8",
                                "name": "",
                                "props": [
                                    {
                                        "p": "payload"
                                    }
                                ],
                                "repeat": "",
                                "crontab": "",
                                "once": false,
                                "onceDelay": 0.1,
                                "topic": "",
                                "payload": "temp(86,2700)",
                                "payloadType": "str",
                                "x": 220,
                                "y": 2360,
                                "wires": [
                                    [
                                        "59d0183a.3a4388"
                                    ]
                                ]
                            },
                            {
                                "id": "c0019637.221b18",
                                "type": "split",
                                "z": "dce8fa20.2e93c8",
                                "name": "",
                                "splt": "\\n",
                                "spltType": "str",
                                "arraySplt": 1,
                                "arraySpltType": "len",
                                "stream": false,
                                "addname": "",
                                "x": 620,
                                "y": 2300,
                                "wires": [
                                    [
                                        "84ea96de.e1b728"
                                    ]
                                ]
                            },
                            {
                                "id": "84ea96de.e1b728",
                                "type": "change",
                                "z": "dce8fa20.2e93c8",
                                "name": "in Zahl",
                                "rules": [
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "$number(payload)\t",
                                        "tot": "jsonata"
                                    }
                                ],
                                "action": "",
                                "property": "",
                                "from": "",
                                "to": "",
                                "reg": false,
                                "x": 770,
                                "y": 2300,
                                "wires": [
                                    [
                                        "8f08d741.c591d8"
                                    ]
                                ]
                            },
                            {
                                "id": "8f08d741.c591d8",
                                "type": "debug",
                                "z": "dce8fa20.2e93c8",
                                "name": "Nachrichten nacheinander",
                                "active": true,
                                "tosidebar": true,
                                "console": false,
                                "tostatus": false,
                                "complete": "payload",
                                "targetType": "msg",
                                "statusVal": "",
                                "statusType": "auto",
                                "x": 990,
                                "y": 2300,
                                "wires": []
                            },
                            {
                                "id": "260425a7.1458da",
                                "type": "change",
                                "z": "dce8fa20.2e93c8",
                                "name": "",
                                "rules": [
                                    {
                                        "t": "set",
                                        "p": "parm1",
                                        "pt": "msg",
                                        "to": "payload[0]",
                                        "tot": "msg"
                                    },
                                    {
                                        "t": "set",
                                        "p": "parm2",
                                        "pt": "msg",
                                        "to": "payload[1]",
                                        "tot": "msg"
                                    }
                                ],
                                "action": "",
                                "property": "",
                                "from": "",
                                "to": "",
                                "reg": false,
                                "x": 640,
                                "y": 2400,
                                "wires": [
                                    [
                                        "be6dcad9.7dfc48",
                                        "fa44b0a1.5fcfe"
                                    ]
                                ]
                            },
                            {
                                "id": "be6dcad9.7dfc48",
                                "type": "change",
                                "z": "dce8fa20.2e93c8",
                                "name": "parameter 1",
                                "rules": [
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "parm1",
                                        "tot": "msg"
                                    },
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "$number(payload)\t",
                                        "tot": "jsonata"
                                    }
                                ],
                                "action": "",
                                "property": "",
                                "from": "",
                                "to": "",
                                "reg": false,
                                "x": 850,
                                "y": 2380,
                                "wires": [
                                    [
                                        "4d5401c.022f7"
                                    ]
                                ]
                            },
                            {
                                "id": "fa44b0a1.5fcfe",
                                "type": "change",
                                "z": "dce8fa20.2e93c8",
                                "name": "parameter 2",
                                "rules": [
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "parm2",
                                        "tot": "msg"
                                    },
                                    {
                                        "t": "set",
                                        "p": "payload",
                                        "pt": "msg",
                                        "to": "$number(payload)\t",
                                        "tot": "jsonata"
                                    }
                                ],
                                "action": "",
                                "property": "",
                                "from": "",
                                "to": "",
                                "reg": false,
                                "x": 850,
                                "y": 2420,
                                "wires": [
                                    [
                                        "7085c3d5.0dcd8c"
                                    ]
                                ]
                            },
                            {
                                "id": "4d5401c.022f7",
                                "type": "debug",
                                "z": "dce8fa20.2e93c8",
                                "name": "Parameter 1",
                                "active": true,
                                "tosidebar": true,
                                "console": false,
                                "tostatus": false,
                                "complete": "payload",
                                "targetType": "msg",
                                "statusVal": "",
                                "statusType": "auto",
                                "x": 1030,
                                "y": 2380,
                                "wires": []
                            },
                            {
                                "id": "7085c3d5.0dcd8c",
                                "type": "debug",
                                "z": "dce8fa20.2e93c8",
                                "name": "Parameter 2",
                                "active": true,
                                "tosidebar": true,
                                "console": false,
                                "tostatus": false,
                                "complete": "payload",
                                "targetType": "msg",
                                "statusVal": "",
                                "statusType": "auto",
                                "x": 1030,
                                "y": 2420,
                                "wires": []
                            }
                        ]
                        

                        108b10d7-788a-4e79-b14e-7f2934ff63c1-image.png

                        Hier die Ausgaben:

                        b8d7f4ac-7463-478e-9e9d-66c514cf3ffa-image.png

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

                          @frankyboy73 sagte in Anfängerfrage: String zerlegen:

                          @asgothian Hi, habe mal noch ein bisschen rumgetestet.
                          so sieht der Code jetzt in der Funktion Node aus.

                          let arr = msg.payload.match(/(\d+),(\d+)/g);
                          
                          var msg1 = {payload:parseInt(arr[0])};
                          
                          var msg2 = {payload:parseInt(arr[1])};
                          
                          return [msg1, msg2];
                          

                          Also als Ausgabe bekomme ich dann bei msg1 die 86, aber bei msg2 NaN, also keinen Wert.

                          Man kann das natürlich auch mit einer function Node machen und das ist kürzer. Der Ansatz war prinzipiell richtig - nur wenn man den RegEx mit das gesamte Parameterpaar matchen lässt, dann matched es auch nur einmal und deshalb steht im arr[1] nichts drin.

                          So gehts:

                          [
                             {
                                 "id": "48080aa4.4dcb84",
                                 "type": "function",
                                 "z": "dce8fa20.2e93c8",
                                 "name": "",
                                 "func": "let arr = msg.payload.match(/\\d+/g);\nvar msg1 = {payload:parseInt(arr[0])};\nvar msg2 = {payload:parseInt(arr[1])};\n \nreturn [msg1, msg2]; \n",
                                 "outputs": 2,
                                 "noerr": 0,
                                 "initialize": "",
                                 "finalize": "",
                                 "x": 440,
                                 "y": 2500,
                                 "wires": [
                                     [],
                                     []
                                 ]
                             }
                          ]
                          

                          oder hier der Code:

                          let arr = msg.payload.match(/\d+/g);
                          var msg1 = {payload:parseInt(arr[0])};
                          var msg2 = {payload:parseInt(arr[1])};
                           
                          return [msg1, msg2]; 
                          
                          

                          c5b621b1-870f-4d8b-9e75-823b1485064b-image.png

                          Grundsätzlich kannst Du hier natürlich auch gleich ein Topic mitgeben.

                          let arr = msg.payload.match(/\d+/g);
                          var msg1 = {topic:'Parameter 1',payload:parseInt(arr[0])};
                          var msg2 = {topic:'Parameter 2',payload:parseInt(arr[1])};
                           
                          return [msg1, msg2]; 
                          
                          

                          c9a6bb38-f1e7-4e8b-be9b-a140ddb18572-image.png

                          Du kannst die Nachrichten auch seriell ausgeben. Dann kann man auch mit dem Switch verzweigen und muss es nicht in der function Node machen. Dann einfach noch eine eckige Klammer um die return msg.

                          return [[msg1, msg2]]; 
                          

                          Das Ergebnis ist dann das hier:

                          a44fa5e4-05f4-47ba-816d-d162be0b3a2d-image.png

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          583
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          5
                          14
                          858
                          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