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.
Inhalt
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
Eingabewert | Ausgabewert | Anmerkung |
„On“ | true | „on“-Zweig |
„on“ | true | „on“-Zweig |
„true“ | true | „true“-Zweig |
1 | true | wird bspw. bei HmIP-Fenstergriffsensoren verwendet |
2 | true | wird bspw. bei HmIP-Fenstergriffsensoren verwendet |
off | false | „Sonst“-Zweig |
0 | false | „Sonst“-Zweig |
Node-RED-Code
Die nachfolgende Funktion ist auch im Beispiel auf github enthalten und soll hier als Veranschaulichung dienen.
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;
default: msg.payload = payload;
}
return {payload: msg.payload};
Updates
- 23.09.2021: Code aktualisiert
- 24.03.2021: Verschieben des NodeRED-Flows zu github
- 17.02.2021: Bugfix für Number-Werte