NEWS
NodeRed wie topic aus msg properties? gelöst
-
Danke, kannte ich noch nicht.
Ich glaube das Zerlegen ist nicht das Problem sondern wie man aus der gesplitteten Nachricht einen Datenpunkt erzeugt mit dem Namen der Bezeichnung und dem Inhalt des übermittelten Wertes.LG Gerhard
-
@maximinus Das ist kein Problem - da Du das topic frei definieren kannst. Wenn Du weißt, dass Deezimalzahlen immer vorhanden sind, kannst Du ggf. mit RegEx vorher das ganze aufdröseln. Den Bufferparser kannst Du nutzen, wenn die Daten eine fixe Länge haben. Diese Node musst Du einfach nachinstallieren.
-
Danke für das Beispiel, das hilft mir sehr. Ich versuche es für meinen Zweck anzupassen.
Ich habe mich missverständlich ausgedrückt. Die payload besteht jeweils nur aus einer Kombiation von Bezeichnung und Wert. Der jeweilige Wert ist immer xx,x die Bezeichnungen sind aber unterschiedlich lang. Die Ausgabe vom Server kann ich umstellen, so dass immer die 4 Stellen vorne sind und anschließend die (unterschiedlich langen) Bezeichnungen (28 verschiedene)
Trotz Suche finde ich nicht die Bedeutung der nachstehenden Zeichen mit denen das ganze bewerkstelligt wird.$match(payload,/(.*?),(\d+,\d)/).{"topic":groups[0],"value":$replace(groups[1],",",".")~>$number()}
Hast du da einen link auf eine Erkärung?
Wie müsste das aussehen wenn die Payload zB wie folgt aufgebaut ist: 26,3, Puffer oben
LG Gerhard
-
@maximinus Na dann musst Du das nur umdrehen - solange die Zahlen identisch sind - mit dem Text habe ich kein Problem. Ich dreh das ganze in dem Flow um und schick Dir nachher einen Link zum Test des regulären Ausdrucks. Das Einzige ist - ich muss im Moment noch ein Komma zum Schluss machen - ich steh mit dem lookbehind bissi auf Kriegsfuss.
Wie gesagt - man muss noch ein Komma anhängen - habe ich aber nun automatisch gemacht.
Hier der Flow:
Hier der reguläre Ausdruck zum Testen und spielen - Du musst schauen, dass jeder Match in die richtigen Gruppen kommt (die Beschreibung der regulären Ausdrücke und die Erklärung findest Du rechts oben bzw. unten):
Hier der Link zum Testen der regulären Ausdrücke: https://regex101.com/r/2LMTDt/1
Hier der entsprechende JSONATA Code:
und ebenfalls der Link zum Testen: https://try.jsonata.org/7M9gehmLH
-
Vorerst vielen Dank. Ich muss das jetzt alles studieren und melde mich später
-
Das hat jetzt etwas länger gedauert. Nachdem ich den Flow importiert und den inject durch UDP in ersetzt, sowie einen ioBroker out angefügt hatte sah ich im debug dass die Bearbeitung des payloads korrekt war - bis auf das führende blank und das dahinterliegende Komma - aber es kam auch die alte Fehlermeldung über das fehlende topic des ioBroker out. Ich habe dann versucht etwas zu ändern. Das ließ sich nicht mehr deployen. Da kommt immer die Meldung keine Antwort vom Server. In der Annahme dass die als Demo importierten Flows damit etwas zu tun haben, habe ich die alle gelöscht um von vorne zu beginnen. Jetzt sind alle weg. Wenn ich deinen Flow jetzt importiere ohne etwas daran zu ändern lässt er sich auch nicht mehr deployen. Ein kleiner selbst erstellter aus inject und debug aber schon. Den Adapter habe ich neu gestartet und den Import nochmals versucht, aber es geht nicht mehr.
Ich habe hier noch eine andere iobroker Installation. Auf der klappt das deplay. Soll ich den Adapter auf dem RasPi auf dem das laufen soll neu installieren? Könnte das helfen?Ein große Bitte hätte ich noch. Könntest du deinen Flow um den ioBroker Out ergänzen so dass die Objekte mit Bezeichnung und Wert angelegt werden. Ich schaffe das nicht.
LG Gerhard
-
Na man sollte keine Leerzeichen in Datenpunktnamen haben - ich hab sie mal durch Unterstriche ersetzt.
Es geht aber auch mit Leerzeichen - hast dann halt vielleicht später Probleme aber Du kannst die Regel mit dem Ersetzen der Leerzeichen auch rausschmeissen.
-
Ich bin begeistert, vielen Dank. In der Testinstallation schreibt er die mit inject definierten Werte in die Datenpunkte. Mit den aktuellen über UDP kommenden Daten geht es aber noch nicht, es kommt hier jeweils nur ein Wertepaar an zB "18,5,22 Heizung RL,↵" Sobald ich in inject das 2. Wertepaar entferne zeigt debug sofort undefined an, obwohl in regex101 auch das eine Wertepaar korrekt interpretiert wird.
Auf der anderen Installation die gestern das Problem mit dem deploy hatte gibt es noch ein weiteres Problem da steht unterhalb des ioB out "Cannot set state"
Ich kann da aber keinen Unterschied zwischen den beiden erkennen.LG Gerhard
edit:
Problem vorläufig gelöst. Ich sende mit jedem Datenpaar ein zweites Datenpaar "00,0,leer" als Dummy mitCannot set state war in der Instanzeinstellung nicht angehakt, jetzt geht es
Gerhard
-
@maximinus Hier die Lösung - um auch einzelne Datenpunkte zu schreiben.
Oben setzt Du den String in eine trim Funktion - damit Zeilenvorschübe und führende Leerzeichen zu entfernen.
Und ob auch einzelne Werte zu schreiben, einfach in der 2. Regel ein paar eckige Klammern hinten dran machen.
Ja das Fremdobjekte erstellt werden dürfen in der Instanzeinstellung habe ich vorausgesetzt.
Hier der Import:
-