NEWS
3 Werte vergleichen und über Switch Ausgabe gleich/ungleich
-
Hallo,
ich habe folgenden Flow:
Hierbei möchte ich an der Switch Node vergleichen, ob der Payload von Wert 1 - 3 gleich ist (Ausgang 1). Falls einer davon abweicht = Ausgang 2 am Switch.
Wie vergleiche ich das ganze? Geht das über einen JSONata-Ausdruck?
Anbei der aktuell Flow:
[ { "id": "197a11c1f440578d", "type": "tab", "label": "Flow 6", "disabled": false, "info": "", "env": [] }, { "id": "f0e9aad3a7235f24", "type": "inject", "z": "197a11c1f440578d", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "Wert1", "payload": "30", "payloadType": "num", "x": 440, "y": 280, "wires": [ [ "5edc115ae5058566" ] ] }, { "id": "b8e4c456e4c046f0", "type": "inject", "z": "197a11c1f440578d", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "Wert2", "payload": "30", "payloadType": "num", "x": 440, "y": 320, "wires": [ [ "5edc115ae5058566" ] ] }, { "id": "8fe50b86dfbc96e9", "type": "inject", "z": "197a11c1f440578d", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "Wert3", "payload": "30", "payloadType": "num", "x": 440, "y": 360, "wires": [ [ "5edc115ae5058566" ] ] }, { "id": "5edc115ae5058566", "type": "join", "z": "197a11c1f440578d", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "", "count": "3", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 650, "y": 320, "wires": [ [] ] } ]
Vielen Dank
-
Man muss alle Werte miteinander vergleichen muss aber eine AND Verknüpfung nehmen.
Wert1 = Wert2 = Wert3 funktioniert nicht, da JSONATA immer von links nach rechts arbeitet und deshalb wird hier immer falsch rauskommen, da ein Boolean true mit 30 verglichen wird.
Deswegen solltest Du die Switch Node nicht die payload überprüfen lassen, sondern den JSONATA Ausdruck.
Hier der Rest Deines Flows:
-
@mickym Mega. Genau so habe ich mir die Lösung vorgestellt. Ich wusste nur nicht, wie ich das ganze im Switch Node abfragen muss. Aber vielen vielen Dank für die Antwort.
-
@_r_a_l_f_ sagte in 3 Werte vergleichen und über Switch Ausgabe gleich/ungleich:
@mickym Mega. Genau so habe ich mir die Lösung vorgestellt. Ich wusste nur nicht, wie ich das ganze im Switch Node abfragen muss. Aber vielen vielen Dank für die Antwort.
Hier noch eine Version, die unabhängig von der Anzahl der zu vergleichenden Werte ist.
payload.*#$i.($$.payload.*[0] = $$.payload.*[$i]) ~> $reduce(function($i, $j){$i and $j})
Hier der Code:
Hier wird der ERSTE Wert mit allen anderen verglichen.
Dadurch wird ein boolesches Array mit den Ergebnissen erzeugt,deren Elemente mit UND verknüpft werden und zum Gesamtergebnis führen.
-
@mickym Absoluter Hammer. Wie man darauf nur kommt
Das ist natürlich die Königslösung