NEWS
Mehrere Datenpunkte mit einer variablen vergleichen
-
Mahlzeit miteinander,
ich habe folgenden Sachverhalt:
einen Ordner userdata/Personen. In diesem sind Datenpunkte mit "Name der Person" als Namen und ein Wert.Diese Werte sollen alle mit einer anderen Variablen verglichen werden und wenn ein wert übereinstimmt, einen Datenpunkt auf true setzen.
Wie kann ich das in Node red realisieren?
lieben Dank im Voraus
-
@renegade-0 Du nimmst eine iobroker list Node und vergleichst die Werte mit dem Inhalt einem Suchdatenpunkt. Hier mal ein kleiner Flow - wobei ich jetzt ein Datenpunkt als Suche verwendet habe - aber ich denke das kannst Du selbst anpassen:
Hier mal die Struktur unter userdata
Hier der Flow:
Getriggert wird über das Suchfeld - herauskommen tut nur was bei einem Match.
Hier der Flow:
Wenn Du mit dem Node-Red Dashboard arbeitest kannst natürlich auch ein text_input Node für die Suche verwenden oder mit einer Flow-Variablen vergleichen.
Wie Du siehst, steht in dem Topic auch welcher Datenpunkt gematched hat, um ggf. noch weitere Eigenschaften auszulesen.
-
@mickym
super perfekt danke. Schau ich mir gleich an. -
hätte mir die Struktur eher so vorgestellt
-
@renegade-0 Das ist ja egal - mit was willst Du denn vergleichen mit dem Namen des Datenpunktes oder der Nummer. Wenn Du mit dem Namen des Datenpunktes vergleichen willst, dann brauchst Du eigentlich nur "*" zum Schluss eingeben in der list Node und den Namen im Topic suchen.
-
Ich möchte über die erkannte RFID den passenden Nutzer suchen und begrüßen lassen.
-
@renegade-0 Na dann kannst doch meinen Flow nehmen. Statt Hugo kommt halt der Zahlenstring rein.
Ob Du dann true aus gibst oder über das Objekt kommst auch direkt an den Namen zur Begrüßung
-
@mickym
Kapier deinen Flow noch ned ganz. Hab grad umgebastelt, aber will ned so ganz.[ { "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": "true", "withValues": "true", "x": 550, "y": 200, "wires": [ [ "f064dd3d.75fe8", "689dcd8a.51a634" ] ] }, { "id": "a2577882.2efd08", "type": "ioBroker in", "z": "1ae851a8.7c63de", "name": "client/RFID", "topic": "mqtt.0.client.RFID", "payloadType": "value", "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": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1150, "y": 200, "wires": [] }, { "id": "f064dd3d.75fe8", "type": "switch", "z": "1ae851a8.7c63de", "name": "Treffer?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "search = payload.val", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 740, "y": 200, "wires": [ [ "8d0e7800.870138", "7e533710.fd4f68" ] ] }, { "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": 940, "y": 200, "wires": [ [ "7d60e459.bed5bc" ] ] }, { "id": "689dcd8a.51a634", "type": "debug", "z": "1ae851a8.7c63de", "name": "Test 1:", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 740, "y": 340, "wires": [] }, { "id": "7e533710.fd4f68", "type": "debug", "z": "1ae851a8.7c63de", "name": "search", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "search", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1030, "y": 340, "wires": [] } ]
-
@renegade-0 sagte in Mehrere Datenpunkte mit einer variablen vergleichen:
[ { "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": "true", "withValues": "true", "x": 550, "y": 200, "wires": [ [ "f064dd3d.75fe8", "689dcd8a.51a634" ] ] }, { "id": "a2577882.2efd08", "type": "ioBroker in", "z": "1ae851a8.7c63de", "name": "client/RFID", "topic": "mqtt.0.client.RFID", "payloadType": "value", "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": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1150, "y": 200, "wires": [] }, { "id": "f064dd3d.75fe8", "type": "switch", "z": "1ae851a8.7c63de", "name": "Treffer?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "search = payload.val", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 740, "y": 200, "wires": [ [ "8d0e7800.870138", "7e533710.fd4f68" ] ] }, { "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": 940, "y": 200, "wires": [ [ "7d60e459.bed5bc" ] ] }, { "id": "689dcd8a.51a634", "type": "debug", "z": "1ae851a8.7c63de", "name": "Test 1:", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 740, "y": 340, "wires": [] }, { "id": "7e533710.fd4f68", "type": "debug", "z": "1ae851a8.7c63de", "name": "search", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "search", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1030, "y": 340, "wires": [] } ]
- Fehler:
Dann setze mal den letzten Node - weg - der Dir true setzt - Du kannst dann den Namen direkt aus dem Objekt lesen.
Exportiere mal die Datenpunkte unter der RFID - damit ichs selbst im Flow machen kann.
-
@mickym
Das mit dem ERgebnis klappt noch ned.[ { "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", "7e533710.fd4f68" ] ] }, { "id": "a2577882.2efd08", "type": "ioBroker in", "z": "1ae851a8.7c63de", "name": "client/RFID", "topic": "mqtt.0.client.RFID", "payloadType": "value", "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": "", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1150, "y": 200, "wires": [] }, { "id": "f064dd3d.75fe8", "type": "switch", "z": "1ae851a8.7c63de", "name": "Treffer?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "jsonata_exp", "v": "search = payload.val", "vt": "jsonata" } ], "checkall": "true", "repair": false, "outputs": 1, "x": 740, "y": 200, "wires": [ [ "7d60e459.bed5bc" ] ] }, { "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": 700, "y": 500, "wires": [ [] ] }, { "id": "7e533710.fd4f68", "type": "debug", "z": "1ae851a8.7c63de", "name": "search", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload.val", "targetType": "jsonata", "statusVal": "", "statusType": "auto", "x": 1030, "y": 340, "wires": [] } ]
Datenpunkte
{ "0_userdata.0.door-server.door-RFID": { "_id": "0_userdata.0.door-server.door-RFID", "type": "channel", "common": { "name": "door-RFID", "role": "", "desc": "Zutrittsberechtigungen", "icon": "" }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1623537286142, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }, "0_userdata.0.door-server.door-RFID.Hans_Dampf": { "_id": "0_userdata.0.door-server.door-RFID.Hans_Dampf", "type": "state", "common": { "name": "Hans Dampf", "role": "", "type": "number", "desc": "Manuell erzeugt", "read": true, "write": true, "def": false }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1623537330521, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }, "0_userdata.0.door-server.door-RFID.Sabine_Schussel": { "_id": "0_userdata.0.door-server.door-RFID.Sabine_Schussel", "type": "state", "common": { "name": "Sabine Schussel", "role": "", "type": "string", "desc": "Manuell erzeugt", "read": true, "write": true, "def": false }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1623537366599, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } } }
-
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?