Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Red Node string aufteilen in Array und splitten

    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

    Red Node string aufteilen in Array und splitten

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

      Hallo zusammen,

      Seit 2 Tagen versuche ich eine Meldung (ein zusammengesetzter "String") mit Hilfe von Red Node zu Splitten und anschließend aufzuteilen.

      Bis jetzt ist es mit gelungen den String in Array´s aufzuteilen. Ein Array darf max. 32 String länge haben! Dann soll jeder Array weiter übergeben werden. Dieses wollte ich mit Splitten machen. Leider weiß ich nicht wie ich beim Splitten an die einzelnen Array´s komme???

      Ein Bild zum Stand was ich bis jetzt gemacht habe:

      1.jpg

      Ich selber bin totaler Anfänger was Red Node angeht! Hat jemand eine Idee wie ich die Arry´s mit Hausmitteln aufsplitten kann? Bzw. wie ich an die Information der einzelnen Arry´s als index kommen kann?

      haselchen mickym 2 Replies Last reply Reply Quote 0
      • haselchen
        haselchen Most Active @J.BORGER last edited by

        @mickym will help 🙂

        1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @J.BORGER last edited by mickym

          @j-borger Hallo - einfach die JOIN Node weglassen - dann wird Dein Array doch einfach in Einzelnachrichten aufgeteilt? Und es gibt keine Längenbegrenzungen - da können soviele Elemente in dem Array sein, wie JS erlaubt - also erstmal keine Begrenzung.

          Einen String brauchst, wenn Du ihn aufteilst doch erst mal nicht wieder in ein Array verfrachten, solange Du was analysieren willst - ausser Du willst irgendwas damit als Ganzes anfangen? Ich würde es nicht machen,

          Falls Du aber unbedingt wieder ein Array haben willst
          Wie gesagt ich müsste erst mal verstehen wofür Du das Array brauchst. Auf die Elemente des Array greifst Du wie üblich einfach via msg.payload[0], msg.payload[1],etc zu.

          Wie gesagt die JOIN Node kannst Dir sparen, um das wieder in einem Array zusammenzufassen. Wenn Du bestimmte Teile rausfiltern willst, kannst Du Dir die msg.parts.index Eigenschaft rauspicken um gezielt auf bestimmte Teile zuzugreifen.

          Nehmen wir mal an Du splittest einen String:

          Dies ist Parameter 1:Dies ist Parameter 2:Dies ist Parameter 3:Dies ist Parameter 4
          

          mit dem : als Trennzeichen:

          dann bekommst Du das:

          5fffcd26-1ec2-43b2-8673-67fff8919192-image.png

          Um dann mittels msg.parts Informationen auf ein gezieltes Element zuzugrifen an einer bestimmten Stelle zuzugreifen, nimmst Du

          bb3e0ae6-5da3-41d1-a1e5-bc56e50044f4-image.png

          Die switch Node sieht dann sehr einfach - aus - also wie gesagt dass zusammenfassen mit einer JOIN Node ist total überflüssig aber natürlich möglich.

          4dddaea7-30fe-41a4-b324-ca8c0791aece-image.png

          Falls Du aus welchen mir unbekannten Gründen auf ein Array bestehst, dann musst halt dann auch direkt darauf zugreifen. Aber um auf einzelne Elemente zuzugreifen, musst Du es immer aufgesplittet in Einzelteilen lassen. Du kannst natürlich das Array mit einer split Node wieder auseinander nehmen, so würde ich es machen, wenn der Input kein String sondern direkt ein Array wäre, um dann über die msg.parts.index Eigenschaft auf einzelne Elemente zuzugreifen.

          8fc3b285-4a1f-439b-a549-13d97e5b6337-image.png

          Hier der ganze Flow zum Ausprobieren:

          [{"id":"4875e6a71a1bf2ac","type":"inject","z":"97b73c5be4e86908","name":"String","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"Dies ist Parameter 1:Dies ist Parameter 2:Dies ist Parameter 3:Dies ist Parameter 4","payloadType":"str","x":410,"y":2160,"wires":[["550dec84b2d79ea3","24208d73be6177fe"]]},{"id":"550dec84b2d79ea3","type":"split","z":"97b73c5be4e86908","name":"","splt":":","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":650,"y":2160,"wires":[["d43a26fc0978e30d","847deb3983fde709","1b22726c41ea9847"]]},{"id":"d43a26fc0978e30d","type":"debug","z":"97b73c5be4e86908","name":"Aufgeteilter Input ","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":830,"y":2100,"wires":[]},{"id":"847deb3983fde709","type":"switch","z":"97b73c5be4e86908","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"},{"t":"eq","v":"1","vt":"num"},{"t":"eq","v":"2","vt":"num"},{"t":"eq","v":"3","vt":"num"}],"checkall":"true","repair":false,"outputs":4,"x":850,"y":2160,"wires":[["06b4478af03f3fda"],["9b8ee0de0c66edd6"],["494691c7226c3522"],["6e0577e5d8dca172"]]},{"id":"06b4478af03f3fda","type":"debug","z":"97b73c5be4e86908","name":"0","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1050,"y":2100,"wires":[]},{"id":"9b8ee0de0c66edd6","type":"debug","z":"97b73c5be4e86908","name":"1","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1050,"y":2140,"wires":[]},{"id":"494691c7226c3522","type":"debug","z":"97b73c5be4e86908","name":"2","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1050,"y":2180,"wires":[]},{"id":"6e0577e5d8dca172","type":"debug","z":"97b73c5be4e86908","name":"3","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1050,"y":2220,"wires":[]},{"id":"24208d73be6177fe","type":"debug","z":"97b73c5be4e86908","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":610,"y":2100,"wires":[]},{"id":"1b22726c41ea9847","type":"join","z":"97b73c5be4e86908","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"1","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":840,"y":2280,"wires":[["d2ec9e3d1993689d","a062c9d4ab27f865","608fbff6e89e1664"]]},{"id":"d2ec9e3d1993689d","type":"debug","z":"97b73c5be4e86908","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1010,"y":2280,"wires":[]},{"id":"a062c9d4ab27f865","type":"change","z":"97b73c5be4e86908","name":"3. Parameter","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[2]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":2340,"wires":[["5abb34cbdb717919"]]},{"id":"5abb34cbdb717919","type":"debug","z":"97b73c5be4e86908","name":"3. Parameter","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1190,"y":2340,"wires":[]},{"id":"608fbff6e89e1664","type":"change","z":"97b73c5be4e86908","name":"1. Parameter","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.0","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1010,"y":2400,"wires":[["c3921bf402679bb0"]]},{"id":"c3921bf402679bb0","type":"debug","z":"97b73c5be4e86908","name":"1. Parameter","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1190,"y":2400,"wires":[]}]
          

          Und noch was zur Ergänzung - um ein Array aus einem String mit einem Trennzeichen zu machen - nimmst Du nur ein ChangeNode mit JSONATA - das ist dann genauso einfach, wie JS oder Blockly ohne split und join. 😉 Violetter Kasten.

          15a71a87-4691-47ae-98e1-1d8952a547ac-image.png

          [
             {
                 "id": "40d1f081.f95a5",
                 "type": "group",
                 "z": "193aabb435e1f946",
                 "name": "",
                 "style": {
                     "fill": "#dbcbe7",
                     "label": true
                 },
                 "nodes": [
                     "e36107cc.1523e8",
                     "129122c2.7688ad",
                     "b2e90a86.7fc5d8",
                     "a135755.cc4aa88",
                     "8e88786d.566b08",
                     "74db2116.d66b4"
                 ],
                 "x": 314,
                 "y": 1059,
                 "w": 832,
                 "h": 202
             },
             {
                 "id": "e36107cc.1523e8",
                 "type": "change",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "Array erstellen aus String mit : als Trennzeichen",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "$split(payload, ':')\t",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 520,
                 "y": 1120,
                 "wires": [
                     [
                         "129122c2.7688ad",
                         "a135755.cc4aa88",
                         "74db2116.d66b4"
                     ]
                 ]
             },
             {
                 "id": "129122c2.7688ad",
                 "type": "change",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "3. Parameter",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "payload[2]",
                         "tot": "msg"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 850,
                 "y": 1100,
                 "wires": [
                     [
                         "b2e90a86.7fc5d8"
                     ]
                 ]
             },
             {
                 "id": "b2e90a86.7fc5d8",
                 "type": "debug",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "3. Parameter",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 1030,
                 "y": 1100,
                 "wires": []
             },
             {
                 "id": "a135755.cc4aa88",
                 "type": "change",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "1. Parameter",
                 "rules": [
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "payload.0",
                         "tot": "msg"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 850,
                 "y": 1160,
                 "wires": [
                     [
                         "8e88786d.566b08"
                     ]
                 ]
             },
             {
                 "id": "8e88786d.566b08",
                 "type": "debug",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "1. Parameter",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 1030,
                 "y": 1160,
                 "wires": []
             },
             {
                 "id": "74db2116.d66b4",
                 "type": "debug",
                 "z": "193aabb435e1f946",
                 "g": "40d1f081.f95a5",
                 "name": "Aufgeteilter Input ",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "payload",
                 "targetType": "msg",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 830,
                 "y": 1220,
                 "wires": []
             }
          ]
          

          Und: das nächste Mal meldest Du Dich früher. 😉

          @haselchen 😁

          J 1 Reply Last reply Reply Quote 0
          • J
            J.BORGER @mickym last edited by

            @mickym Danke für die Erklärung.
            Hat alles so geklappt... hatte es schon mal so probiert aber es hatte nicht funktioniert. Hatte irgendwas dann falsch gemacht und mich total verrant.

            Was wollte ich...

            Ich habe in meiner CCU eine Fehlermeldungsspeicher der an den NEO übergeben wird. Dieses ist eine Verkettung einzelner Strings und Funktioniert super (Für Fehlermeldungen am Handy angezeigt zu bekommen).

            Seit neustem Experimentiere ich mit dem S7 (Siemens) Adapter und will den gebastelten Meldespeicher an die S7 300 weiterleiten (SPS). Leider kann ich nur max. 32 Strings auf einmal in den Datenbaustein der SPS übertragen. Die Strings sind oft viel länger und daher Splitte ich diese auf um sie anschließend in der SPS wieder zusammenzusetzen. Von dort aus geht es dann auf die HMI (Automatisierungspanel).

            Kurze Übersicht über den übertragungsweg:
            Daten --> CCU --> Iobroker --> S7 Adapter 4 x 32 byte --> Red Node (Splitten in 4 Byte) --> SPS (zusammenbasteln) --> an HMI (Anzeige)

            Gruß

            mickym 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @J.BORGER last edited by mickym

              gelöscht

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

              Support us

              ioBroker
              Community Adapters
              Donate
              FAQ Cloud / IOT
              HowTo: Node.js-Update
              HowTo: Backup/Restore
              Downloads
              BLOG

              871
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              red node array splitten
              3
              5
              5361
              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