NEWS
Red Node string aufteilen in Array und splitten
-
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:
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?
-
@mickym will help
-
@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:
Um dann mittels msg.parts Informationen auf ein gezieltes Element zuzugrifen an einer bestimmten Stelle zuzugreifen, nimmst Du
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.
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.
Hier der ganze Flow zum Ausprobieren:
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.
Und: das nächste Mal meldest Du Dich früher.
-
@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ß
-
gelöscht