Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. Anfängerfrage: String zerlegen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Anfängerfrage: String zerlegen

Geplant Angeheftet Gesperrt Verschoben Node-Red
14 Beiträge 5 Kommentatoren 970 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Offline
    C Offline
    ColdIce
    schrieb am zuletzt editiert von
    #1

    Ich möchte einen eingehenden String : "temp(86,2700)" in die zwei Werte 86 und 2700 zerlegen.
    In einer Funktion habe ich folgendes geschrieben:

    var output = msg.payload.split (",");

    var Wert1 = parsInt(output[1]);
    var Wert2 = parsInt(output[2]);

    var msg1 = {payload:Wert1};
    var msg2 = {payload:Wert2};

    return [msg1, msg2];

    Nodered gibt mir die folgende Fehlermeldung aus:

    ReferenceError: parsInt is not defined (line 3, col 11)

    Kann jemand einem Anfänger mal auf die Sprünge helfen ?

    Gruss ColdIce

    F 1 Antwort Letzte Antwort
    0
    • C ColdIce

      Ich möchte einen eingehenden String : "temp(86,2700)" in die zwei Werte 86 und 2700 zerlegen.
      In einer Funktion habe ich folgendes geschrieben:

      var output = msg.payload.split (",");

      var Wert1 = parsInt(output[1]);
      var Wert2 = parsInt(output[2]);

      var msg1 = {payload:Wert1};
      var msg2 = {payload:Wert2};

      return [msg1, msg2];

      Nodered gibt mir die folgende Fehlermeldung aus:

      ReferenceError: parsInt is not defined (line 3, col 11)

      Kann jemand einem Anfänger mal auf die Sprünge helfen ?

      Gruss ColdIce

      F Offline
      F Offline
      frankyboy73
      schrieb am zuletzt editiert von frankyboy73
      #2

      @coldice Hi, das muss eigentlich
      parseInt
      heißen, du hast das "e" vergessen und du musst glaube ich bei Output 0 und 1 nehmen, nicht 1 und 2

      Außerdem wird wohl auch das "temp(" in der Nachricht stören das könntest du vorher mit ner Change Node vor der Funktion Node entfernen.
      Change2.jpg

      Schöne Grüße Frank

      C 1 Antwort Letzte Antwort
      0
      • F frankyboy73

        @coldice Hi, das muss eigentlich
        parseInt
        heißen, du hast das "e" vergessen und du musst glaube ich bei Output 0 und 1 nehmen, nicht 1 und 2

        Außerdem wird wohl auch das "temp(" in der Nachricht stören das könntest du vorher mit ner Change Node vor der Funktion Node entfernen.
        Change2.jpg

        C Offline
        C Offline
        ColdIce
        schrieb am zuletzt editiert von
        #3

        @frankyboy73
        Hallo Frank,
        danke für die Hinweise ich bin jetzt auch schon ein stück weiter ....

        als Ausgabe bekomme ich jetzt NaN , 2700

        also der zweite Wert kommt nur beim ersten hat er Probleme. Ich vermute es liegt an: " temp( ".

        wie kannn ich das noch rausfiltern ?

        F HomoranH 2 Antworten Letzte Antwort
        0
        • C ColdIce

          @frankyboy73
          Hallo Frank,
          danke für die Hinweise ich bin jetzt auch schon ein stück weiter ....

          als Ausgabe bekomme ich jetzt NaN , 2700

          also der zweite Wert kommt nur beim ersten hat er Probleme. Ich vermute es liegt an: " temp( ".

          wie kannn ich das noch rausfiltern ?

          F Offline
          F Offline
          frankyboy73
          schrieb am zuletzt editiert von
          #4

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

          Schöne Grüße Frank

          C 1 Antwort Letzte Antwort
          0
          • C ColdIce

            @frankyboy73
            Hallo Frank,
            danke für die Hinweise ich bin jetzt auch schon ein stück weiter ....

            als Ausgabe bekomme ich jetzt NaN , 2700

            also der zweite Wert kommt nur beim ersten hat er Probleme. Ich vermute es liegt an: " temp( ".

            wie kannn ich das noch rausfiltern ?

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #5

            @coldice sagte in Anfängerfrage: String zerlegen:

            als Ausgabe bekomme ich jetzt NaN , 2700

            klar doch, wenn du die gesamte payload beim Komma splittest

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • F frankyboy73

              @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 Offline
              C Offline
              ColdIce
              schrieb am zuletzt editiert von
              #6

              @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 Antworten Letzte Antwort
              0
              • C ColdIce

                @frankyboy73
                ja wir haben uns überschnitten :-)

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

                Danke für die schnelle Hilfe !

                F Offline
                F Offline
                frankyboy73
                schrieb am zuletzt editiert von
                #7

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

                Schöne Grüße Frank

                AsgothianA 1 Antwort Letzte Antwort
                0
                • F frankyboy73

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

                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @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])};
                  }
                  

                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                  F 1 Antwort Letzte Antwort
                  0
                  • AsgothianA Asgothian

                    @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 Offline
                    F Offline
                    frankyboy73
                    schrieb am zuletzt editiert von
                    #9

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

                    Schöne Grüße Frank

                    AsgothianA 1 Antwort Letzte Antwort
                    0
                    • F frankyboy73

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

                      AsgothianA Offline
                      AsgothianA Offline
                      Asgothian
                      Developer
                      schrieb am zuletzt editiert von
                      #10

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

                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                      F mickymM 2 Antworten Letzte Antwort
                      0
                      • AsgothianA Asgothian

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

                        F Offline
                        F Offline
                        frankyboy73
                        schrieb am zuletzt editiert von
                        #11

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

                        Schöne Grüße Frank

                        mickymM 1 Antwort Letzte Antwort
                        0
                        • C ColdIce

                          @frankyboy73
                          ja wir haben uns überschnitten :-)

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

                          Danke für die schnelle Hilfe !

                          F Offline
                          F Offline
                          frankyboy73
                          schrieb am zuletzt editiert von
                          #12

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

                          Schöne Grüße Frank

                          1 Antwort Letzte Antwort
                          0
                          • AsgothianA Asgothian

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

                            mickymM Online
                            mickymM Online
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von mickym
                            #13

                            @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

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            1 Antwort Letzte Antwort
                            1
                            • F frankyboy73

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

                              mickymM Online
                              mickymM Online
                              mickym
                              Most Active
                              schrieb am zuletzt editiert von mickym
                              #14

                              @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

                              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              825

                              Online

                              32.4k

                              Benutzer

                              81.5k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe