NEWS
[Erledigt] change-node mit variablen Datenpunkten
-
Hallo zusammen,
gleich vorweg - ich habe keine Ahnung, ob das was ich vorhabe überhaupt in Node-Red geht.
Ist es möglich, Variablen-Namen in einem Array zu speichern und diese dann in einer change-Node zu verwenden.
Beispiel:
Variablen:
msg.test1
msg.test2
msg.test3Das Array würde dann wie folgt aussehen:
msg.VarNamen = ["test1","test2","test3"]
in der change-Node dann wie folgt z.B.:
setze msg. msg.VarNamen[1]
statt
setze msg. msg.test2Dann könnte man, wenn man bei vielen Variablen die gleichen Operationen anwenden will, dieses in einer Schleife über das Array msg.VarNamen machen und müßte nicht für jede einzelne Variable den Flow kopieren, was bei vielen Variablen Zeit- und Wartungsaufwendig ist.
Vielen Dank schonmal im voraus für eure Gedanken und Hilfe dazu.
Christoph
-
@christophh sagte in change-node mit variablen Datenpunkten:
msg.VarNamen = ["test1","test2","test3"]
Also ich habe keine Ahnung was Du machen willst - mit einer ChangeNode alleine wird das nicht gehen - allerdings wenn Du das ganze in einem Objekt machst - dann ggf. schon. Ansonsten kann man ja über das topic viele Variablen auslesen oder schreiben - dazu brauche ich keine Variablen. Wenn Du also ein Array mit 3 Elementen in einem Objekt haben willst mit den definierten Eigenschaften eines anderen Arrays - dann ist das ebenfalls möglich. Wie gesagt - es ist wichtig vorher alle Werte in einem oder Array zu sammeln.
Du musst das ja nicht auf Root Ebene machen - sondern die variablen Eigenschaften (variablennamen) als Eigenschaft der payload:
Das kannst ja nun mit einer split Node in payloads mit unterschiedlichem topic nutzen und so unterschiedliche Werte in mqtt oder in den iobroker schreiben.
Sammeln kannst Du Nachrichten entweder im Flow Kontext oder in einer Join oder functionNode
Wie gesagt Du kannst alles innerhalb der payload machen - aber Du wirst über eine ChangeNode nicht das Wurzelobjekt der Nachricht erreichen, das kannst ggf. mit einer function dann machen.
Wie gesagt man kann die payload auch ins Root des Nachrichtenobjektes verschieben - bringt in meinen Augen allerdings keine Vorteile - dafür musst Du eine funktion Node nutzen und ein neues Nachrichtenobjekte erstellen, ist aber in super einfach.
Die function Node macht nichts weiter als die payload alleine zum Nachrichtenobjekt zu erklären:
var newMsg = msg.payload; return newMsg;
Das Problem ist also nicht das variable Erstellen, sondern das sammeln. Aber wie gesagt solange man nicht die wirkliche Anwendung kennt, erschließt sich mir der Sinn nicht.
-
Eine andere Möglichkeit einer durch Komma getrennte Werteliste verschiedenen Eigenschaften zuzuordnen ist ggf. eine CSV Node.
So was geht auch easy mit einer ChangeNode.
Wie gesagt der Sinn erschließt sich mir nicht. Eine konkrete Anwendung wäre sicher einfacher.
-
Um es mal konkret zu machen - schau Dir dieses Modbusbeispiel mal an: https://forum.iobroker.net/post/1007750
Wenn man die Flows intelligent macht - braucht man keine variablen Variablennamen. Schau Dir mal aus dem Post aus dem Modbus Thread wie Du aus dem gelben Kasten mit etwas Überlegung den grünen Kasten machen kannst:
Die grüne Gruppe macht exakt das Gleiche wie der gelbe Kasten.
-
Zuerst einmal sorry, dass ich mich nicht mehr gemeldet hatte.
Ich musste beruflich für ein paar Tage weg und war Abends so erledigt, dass ich nur noch ins Bett gefallen bin.
Zurück gekommen bin ich erst gestern AbendVielen Dank für eure ganzen Antworten.
Ich habe das Ganze jetzt so gelöst, dass ich, anstatt einzelne Variablen zu nutzen, alles in eine Objekt-Struktur gepackt habe.
Mal sehen, obs damit einfacher geht.
Hier kann jetzt erstmal geschlossen werden.