smarthome-tricks.de

ioBroker Node-RED – Teil 4.3 – Function-Node

In diesem Teil der ioBroker Node-RED Artikelreihe zeige ich Dir, wie Du Node-Red in ioBroker verwenden kannst.

Im Teil 4.3 der ioBroker Node-RED Artikelreihe werden wir uns den Function-Node ansehen. Im Function-Node kann eigener JavaScript Code hinterlegt werden, mit dem der empfangene Payload verarbeitet wird. Als Beispiel verwenden wir eine eher abstrakte Schaltung mit einem Schalter sowie der Invertierung eines Zustandes.

Im ersten Schritt erstellen wir uns daher einen neuen Flow und fügen im Bereich „Eingabe“ den Node „ioBroker in“ in unseren Flow ein.

Mit diesem Node werden wir den Status des Schalters überwachen. In meinem Fall handelt es sich um einen virtuellen Schalter in Form eines Datenpunktes. Mit einem Doppelklick auf die eingefügt Node beginnen wir nun mit der Konfiguration der Node. Als Topic wähle ich hier den Schalter-Datenpunkt aus. Die Einstellung „ack==true“ aktiviere ich hier nicht, da ich sie für dieses Beispiel nicht benötige.

Im nächsten Schritt fügen wir eine weitere Node aus dem Bereich Ausgabe hinzu. Als Node wählen wir hier den „ioBroker out“ Node. Mit dieser Node schalten wir den Zustand der Leuchtmittel. Auch diese Datenpunkte sind rein virtuell um die Vorgehensweise zu demonstrieren.

Mit einem Doppelklick konfigurieren wir nun diese Node und stellen als Topic den Datenpunkt des LichtA ein. Den Name habe ich hierbei nicht verändert, den Type setzen wir auf „Command“.

Im nächsten Schritt habe ich noch den Debug-Node eingefügt, mit dem wir den Status der Schalters in die Debugging-Konsole ausgeben können. Nun können wir alle Nodes miteinander verbinden. Dazu ziehen wir die Verbindungslinie vom SwitchA zum LightA sowie vom SwitchA zum Debug-Node.

Wenm wir den Flow nun deployen, wird der Status vom SwitchA an den Datenpunkt LightA gesendet, die Lampe würde also ein- und ausgeschaltet aufgrund des Schalter-Status. Wir haben somit die Licht-Steuerung von LightA vollständig implementiert. Im nächsten Schritt verwenden wir nun den Function-Node. Wie oben schon erwähnt können wir hier JavaScript-Code hinterlegen um somit die Verarbeitung zu steuern. Im ersten Schritt fügen wir nun den Function-Node in unseren Flow ein.

Neben dem Function-Node habe ich nun auch direkt alle weiteren Nodes eingefügt. Dazu habe ich einen „ioBroker out“ sowie einen Debug-Node eingefügt und konfiguriert. Zudem habe ich die Verbindungslinien wie folgt angegeben:

Jetzt können wir mit der Implementierung der Function-Node beginnen. Im folgenden JavaScript Code legen wir zunächst eine Variable „oldState“ für den alten Payload an. Der Payload wird über das Message-Object (msg) ermittelt. Da wir hier einen logischen Wert (boolean) (true/false) erhalten, können wir im zweiten Schritt die neue Variable „newState“ mit einer einfachen Invertierung der Variable „oldState“ befüllen. Im Anschluss erzeugen wir ein neues Message-Object und geben dem Property „payload“ die neue Variable mit. Die Function-Node muss ein Message-Object zurückgeben, da ansonsten der Flow beendet wird.

Zudem setzen wir die Anzahl Ausgänge auf 1, da unsere Function nur einen Wert zurückgeben soll. In einem späteren Artikel werden wir uns Function-Nodes mit mehreren Ausgängen ansehen.

Im nächsten Schritt können wir den Flow jetzt „deployen“. Ich habe davor noch schnell die Debug-Nodes so konfiguriert, dass der Status des Nodes unterhalb direkt eingeblendet wird. Somit sehen wir hier direkt im Flow wie die einzelnen Werte aussehen. Ich habe den Schalter SwitchA auf true gesetzt, LightA wird ebenfalls auf true gesetzt, LightB auf false. Der Function-Node invertiert somit den Zustand, wie gewünscht.

Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Die mobile Version verlassen