NEWS
Mehrere Datenpunkte mit einer variablen vergleichen
-
So das Problem ist wieder mal die Typ Konvertierung. Was hast Du in Deiner NodeRed Adapter Konfig. Hast Du diese ecklige OPtion raus gemacht, dass alles in Strings gewandelt wird?
-
@mickym
jetzt ja. -
@renegade-0 sagte in Mehrere Datenpunkte mit einer variablen vergleichen:
@mickym
jetzt ja.Sollte man als erstes machen!!!!
Wenn es Zahlen sind gehts nämlich jetzt, sonst musst halt konvertieren:
Hier der Flow - auch mit Namen, wenn Du nicht nur true haben willst.
Ansonsten wenn Du die Zahlen als Strings miteinander vergleichen willst, musst halt in der switch Node konvertieren, also von
in
-
habs jetzt mit etwas tüfteln wie folgt gelöst. Nicht schön, aber funktioniert.
[ { "id": "1ae851a8.7c63de", "type": "tab", "label": "RFID-Check", "disabled": false, "info": "" }, { "id": "51113dd8.972204", "type": "ioBroker list", "z": "1ae851a8.7c63de", "name": "authorised", "topic": "0_userdata.0.door-server.door-RFID.*", "objType": "state", "regex": "", "asArray": "false", "onlyIDs": "false", "withValues": "true", "x": 550, "y": 200, "wires": [ [ "f064dd3d.75fe8" ] ] }, { "id": "a2577882.2efd08", "type": "ioBroker in", "z": "1ae851a8.7c63de", "name": "client/RFID", "topic": "mqtt.0.client.RFID", "payloadType": "object", "onlyack": "", "func": "all", "gap": "", "fireOnStart": "false", "x": 90, "y": 200, "wires": [ [ "9d981111.4543b" ] ] }, { "id": "9d981111.4543b", "type": "change", "z": "1ae851a8.7c63de", "name": "", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "search", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 300, "y": 200, "wires": [ [ "51113dd8.972204" ] ] }, { "id": "7d60e459.bed5bc", "type": "debug", "z": "1ae851a8.7c63de", "name": "Finish", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1190, "y": 140, "wires": [] }, { "id": "f064dd3d.75fe8", "type": "switch", "z": "1ae851a8.7c63de", "name": "Treffer?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "search.val = payload.val", "vt": "jsonata" } ], "checkall": "false", "repair": false, "outputs": 1, "x": 740, "y": 200, "wires": [ [ "8d0e7800.870138", "ccff8fad.33733" ] ] }, { "id": "8d0e7800.870138", "type": "change", "z": "1ae851a8.7c63de", "name": "setze payload auf true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 980, "y": 140, "wires": [ [ "7d60e459.bed5bc" ] ] }, { "id": "7e533710.fd4f68", "type": "debug", "z": "1ae851a8.7c63de", "name": "result", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1190, "y": 240, "wires": [] }, { "id": "ccff8fad.33733", "type": "change", "z": "1ae851a8.7c63de", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.common.name", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 970, "y": 240, "wires": [ [ "7e533710.fd4f68" ] ] } ]
-
Was ist unschön - warum Du die RFID als objekt holst und nicht wie ich als Value - verstehe ich allerdings nicht.
-
Da die als value im String kommt und ich die val aus der Liste als number bekomme. Also habe ich gleich die RFID als Objekt geholt, da ist es dann als number "konvertiert".
-
@renegade-0 Ok - ansonsten habe ich Dir ja unten gezeigt, wie Du in der switch Node konvertierst - damit das alles matched. Wahrscheinlich sind sogar Strings besser - nicht dass es RFID mit führenden Nullen gibt.
Aber was ist daran unschön.
???
-
@mickym
schöner wäre natürlich ein echtes konvertieren, aber so fit bin ich noch nicht. Bin ja ein Frischling auf dem Gebiet node-Red.Kämpfe zb. gerade damit eine saubere Lösung zu finden, wenn eine Variable den Status von true auf false oder anders rum ändert, der switch dann sagt bei ture mache das und bei false das, aber leider kommen die werte aus der Var als bool und die switch kann kein bool.
-
@renegade-0 Der Switch kann bool .)
-
@mickym
ahh, warum kann ich da ned einfach auswählen, wie bei den anderen?^^Letzte Frage für heute, weil ich grad Dich als Genie dran hab.
Wie löst du es, wenn du quasi eine AND funktion brauchst. also wenn Var 1 +2 true, dann mach true?
-
Mit JSONATA hast Du über $string() in String gewandelt. Das habe ich Dir unten gezeigt.
AND machst auch über JSONATA oder sammelst alles in einem Objekt, das mache ich bei vielen Verknüpfungen - da kann ich ggf. auch einen anderen Thread verweisen, wo ich das alles erklärt habe.
Die Nachrichten warten nicht aufeinander. Entweder vergleichst Du innerhalb eines Nachrichtenobjektes oder sammelst in Flow-Variablen.
Hier der Flow zu spielen:
Für die Überwachung mehrere Zustände verweise ich auch einen anderen Beitrag von mir: https://forum.iobroker.net/topic/44765/gelöst-überwachung-eingeschaltete-verbraucher/3?_=1623542233576
Manche installieren sich auch eine UND Node. Ich denke man kommt ohne aus. Aber wer will kann ja zusätzliche NOdes installieren: https://flows.nodered.org/node/node-red-contrib-boolean-logic
-
@mickym
perfekt danke dir. Damit werde ich mich morgen mal soielen. Also falls du mal an die österreichische Grenze kommst. Steht ein Bier, Kaffe, Tee oder was immer du willst gern für Dich bereit.Und nochmals vielen Lieben Dank für die Rettung und deine Zeit.
-
@renegade-0 Soweit weg wohne ich nicht davon weg.
-
@mickym
Na dann, die Prüfung ist bald rum.^^ -
@renegade-0 sagte in Mehrere Datenpunkte mit einer variablen vergleichen:
@mickym
ahh, warum kann ich da ned einfach auswählen, wie bei den anderen?^^Letzte Frage für heute, weil ich grad Dich als Genie dran hab.
Wie löst du es, wenn du quasi eine AND funktion brauchst. also wenn Var 1 +2 true, dann mach true?
Bei var1=true und var2= true (also beide Variablen enthalten einen Bool) - kannst in das JSONATA Feld natürlich einfach schreiben:
var1 and var2
Der Switch leitet dann an diesen Ausgang wenn der gesamte Ausdruck im JSONATA Feld true ergibt.