NodeRED: Ausgaben mit einem Subflow nach Bool wandeln

In einigen Nodes kann man als Payload nicht den Ausgabetypen einstellen. Meist unterstützen diese dann nur Zeichenketten (Strings). Benötigst Du den Wert als booleschen Wert (wahr/unwahr), so muss man diesen umwandeln. Dazu eignen sich mindestens die zwei Node-Typen: Function-Node und Change-Node.

Beim Change-Node musst Du immer konkret angeben, welcher Wert in welchen Zielwert gewandelt werden soll – einen “sonst/else”-Zweig gibt es nicht. Das ist nachteilig, wenn beim Neustart noch kein Eingangswert gesetzt ist. Dieser ist dann meist undefiniert oder NULL.

Benutzt Du den Function-Node, so kopierst Du womöglich immer das selbe Code-Fragment und passt es so an, wie Du es gerade benötigst.

Verwendung von Subflows

Was ist ein Subflow?

Abhilfe kannst Du mit SubFlows schaffen. Dabei wird mindestens ein Node als separater Flow angelegt, der dann wie andere Nodes verwendet werden kann.

Damit hast Du nur noch eine Stelle für Änderungen/Verbesserungen und musst nicht alle Instanzen Deiner Function-Nodes anpassen.

Bool-Wandlung mittels Function-Node

Der Subflow besteht im Wesentlichen nur aus einem Function-Node. Dieser wandelt verschiedene Eingaben in das Wertepaar true und false um. Die Groß-/Kleinschreibung des Eingabewerts spielt dabei keine Rolle. Entspricht die Eingabe keinem bekannten Wert, so ist der Ausgabewert false.

Beispiele

EingabewertAusgabewert Anmerkung
“On”true“on”-Zweig
“on”true“on”-Zweig
“true”true“true”-Zweig
1truewird bspw. bei HmIP-Fenstergriffsensoren verwendet
2truewird bspw. bei HmIP-Fenstergriffsensoren verwendet
offfalse“Sonst”-Zweig
0false“Sonst”-Zweig

Node-RED-Code

Der nachfolgende Code ist im darunter stehenden Subflow enthalten und dient der Veranschaulichung des enthaltenen Function-Nodes.

var payload = msg.payload || 0;
msg.payload = false;

switch (typeof payload) {
    case 'number':
        switch (payload) {
            case 1:
            case 2:
                msg.payload = true;
                break;
        }
        break;
    case 'string':
        switch (payload.toLowerCase()) {
            case "on":
            case "true":
                msg.payload = true;
                break;
        }
        break;
}

return msg;

Node-RED-Subflow

Den NodeRED-Flow findest du auf meiner github-Seite.

Updates

  • 24.03.2021: Verschieben des NodeRED-Flows zu github
  • 17.02.2021: Bugfix für Number-Werte

André

War dieser Artikel nützlich für Dich? Dann hinterlasse gern eine Bewertung. So erkenne ich, welche Informationen hilfreich sind und investiere weiter in diese Richtung. Vielleicht habe ich auch bereits eine neuere Version und muss sie nur in den Artikel einarbeiten. Hast Du Meinungen, Hinweise oder Fragen? Dann hinterlasse einen Kommentar, kontaktiere mich per E-Mail an oder schreibe in die Telegram-Diskussionsgruppe https://t.me/joinchat/4v43ZhqxG2sxOTMy.

Alle Beiträge ansehen von André →