Variablenzustand über ein Intervall überwachen
Moderator: Co-Administratoren
Variablenzustand über ein Intervall überwachen
Guten Abend,
ich möchte, dass in Redmatic bestimmte Aktivitäten ausgelöst werden, wenn die Abwesenheitsvariable seit einer bestimmten Zeit unverändert auf "abwesend" steht.
Folgenden (sehr holprigren) Workaround habe ich gebastelt:
Das Problem dabei ist, dass der Flow bereits dann durchläuft, wenn die Variable jetzt und genau vor 11 Minuten auf "abwesend" war. Was ist der Zwischenzeit passiert ist, findet bei dieser Lösung keine Beachtung. Ich suche eine Lösung, bei der die Aktionen nur dann ausgelöst werden, wenn die Variable durchgängig auf abwesend stand.
Wahrscheinlich ist die Lösung ganz einfach und mir fehlt einfach noch der Durchblick...
ich möchte, dass in Redmatic bestimmte Aktivitäten ausgelöst werden, wenn die Abwesenheitsvariable seit einer bestimmten Zeit unverändert auf "abwesend" steht.
Folgenden (sehr holprigren) Workaround habe ich gebastelt:
Das Problem dabei ist, dass der Flow bereits dann durchläuft, wenn die Variable jetzt und genau vor 11 Minuten auf "abwesend" war. Was ist der Zwischenzeit passiert ist, findet bei dieser Lösung keine Beachtung. Ich suche eine Lösung, bei der die Aktionen nur dann ausgelöst werden, wenn die Variable durchgängig auf abwesend stand.
Wahrscheinlich ist die Lösung ganz einfach und mir fehlt einfach noch der Durchblick...
-
- Beiträge: 522
- Registriert: 07.01.2017, 16:48
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 48 Mal
- Danksagung erhalten: 66 Mal
Re: Variablenzustand über ein Intervall überwachen
Hi Andii,
was du wahrscheinlich willst, ist genau eine Auslösung bei Abwesenheit (false) nach Zeit x (zum testen hier 11sec), außer es wird durch Anwesenheit (true) unterbrochen:
was du wahrscheinlich willst, ist genau eine Auslösung bei Abwesenheit (false) nach Zeit x (zum testen hier 11sec), außer es wird durch Anwesenheit (true) unterbrochen:
Code: Alles auswählen
[{"id":"72e8bcbb.cec9bc","type":"inject","z":"26c1324d.aa616e","name":"true","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1720,"wires":[["bcc0d722.e62ea"]]},{"id":"d96d37ee.dd3bc8","type":"inject","z":"26c1324d.aa616e","name":"false","topic":"","payload":"false","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1760,"wires":[["bcc0d722.e62ea"]]},{"id":"988a97ff.8a3b7","type":"debug","z":"26c1324d.aa616e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":650,"y":1740,"wires":[]},{"id":"e91c781a.fe3798","type":"trigger","z":"26c1324d.aa616e","op1":"","op2":"false","op1type":"nul","op2type":"bool","duration":"11","extend":false,"units":"s","reset":"true","bytopic":"all","name":"","x":490,"y":1740,"wires":[["988a97ff.8a3b7"]]},{"id":"bcc0d722.e62ea","type":"rbe","z":"26c1324d.aa616e","name":"","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":330,"y":1740,"wires":[["e91c781a.fe3798"]]}]
-
- Beiträge: 3978
- Registriert: 12.07.2009, 20:01
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 176 Mal
- Kontaktdaten:
Re: Variablenzustand über ein Intervall überwachen
Eine weitere Möglichkeit: jede Message enthält neben dem Zeitpunkt der letzten Aktualisierung ("ts") auch den Zeitpunkt der letzten Änderung ("lc"). Wenn man die einfach subtrahiert sieht man seit wann ein Zustand anliegt. In einem Function Node ungefährt so (ungetestet):
Und dahinter könntest dann mit einem Switch Node die Nachricht je nachdem ob msg.minuten > 11 ist oder nicht auf zwei verschiedene Ausgänge ausgeben.
Code: Alles auswählen
msg.minuten = (msg.ts - msg.lc) / (60 * 1000);
return msg;
Re: Variablenzustand über ein Intervall überwachen
Vielen Dank, das funktioniert gut. Ich muss nur vor dem RBE-Node true/false noch invertieren. Der Trigger soll ja aktiviert werden, wenn vorne ein "false" injected wird.ptweety hat geschrieben: ↑03.03.2019, 20:23Hi Andii,
was du wahrscheinlich willst, ist genau eine Auslösung bei Abwesenheit (false) nach Zeit x (zum testen hier 11sec), außer es wird durch Anwesenheit (true) unterbrochen:
Bildschirmfoto 2019-03-03 um 20.19.23.png
Code: Alles auswählen
[{"id":"72e8bcbb.cec9bc","type":"inject","z":"26c1324d.aa616e","name":"true","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1720,"wires":[["bcc0d722.e62ea"]]},{"id":"d96d37ee.dd3bc8","type":"inject","z":"26c1324d.aa616e","name":"false","topic":"","payload":"false","payloadType":"bool","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":1760,"wires":[["bcc0d722.e62ea"]]},{"id":"988a97ff.8a3b7","type":"debug","z":"26c1324d.aa616e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":650,"y":1740,"wires":[]},{"id":"e91c781a.fe3798","type":"trigger","z":"26c1324d.aa616e","op1":"","op2":"false","op1type":"nul","op2type":"bool","duration":"11","extend":false,"units":"s","reset":"true","bytopic":"all","name":"","x":490,"y":1740,"wires":[["988a97ff.8a3b7"]]},{"id":"bcc0d722.e62ea","type":"rbe","z":"26c1324d.aa616e","name":"","func":"rbe","gap":"","start":"","inout":"out","property":"payload","x":330,"y":1740,"wires":[["e91c781a.fe3798"]]}]
@hobbyquaker: Mit deinem Vorschlag bin ich nicht weitergekommen. ts und lc sind innerhalb jeder Message identisch, auch wenn der Payload sich gegenüber der vorangegangenen Message nicht verändert hat. Woran kann das liegen?
-
- Beiträge: 3978
- Registriert: 12.07.2009, 20:01
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 176 Mal
- Kontaktdaten:
Re: Variablenzustand über ein Intervall überwachen
Oh, das ist dann ein Bug den ich fixen muss. lc "sollte" sich nur dann ändern wenn sich auch der payload geändert hat.
-
- Beiträge: 3978
- Registriert: 12.07.2009, 20:01
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 176 Mal
- Kontaktdaten:
Re: Variablenzustand über ein Intervall überwachen
In node-red-contrib-ccu@1.16.4 sollte das `lc` Attribut nun funktionieren. Allerdings gibt es noch eine Sache die man beachten muss. Wird der Node neugestartet (nach Node-RED Neustart oder Deploy) und hat man kein persistenten Storage im CCU-Connection Node konfiguriert existiert das Attribut noch nicht da der letzte Change dann unbekannt ist, das muss man also noch abfangen in dem function Node, z.B. so:
Bis es ein neues RedMatic Release gibt kannst Du node-red-contrib-ccu auch vorab über den Palette Manager updaten (Node-RED Neustart danach nötig).
Code: Alles auswählen
msg.minuten = (msg.ts - (msg.lc || 0)) / (60 * 1000);
return msg;
Re: Variablenzustand über ein Intervall überwachen
Danke! Ich habe jetzt allerdings erstmal die Lösung von ptweety implementiert. Da habe ich als Node-Red-N00b gleich noch was über den RBE- und den Trigger-Node gelernt
-
- Beiträge: 56
- Registriert: 21.10.2017, 18:10
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 1 Mal
Re: Variablenzustand über ein Intervall überwachen
Hallo,
ich komme irgendwie mit den Erklärungen nicht klar.
Ich füge das "rbe" und "trigger" Node ein und es funktioniert nicht (hier nicht verbunden nur um anzuzeigen was ich will - sie waren bei den Versuchen genau da eingebunden wo der Pfeil es anzeigt). Allerdings ist mir aktuell auch
noch nicht klar was ich bei dem rbe-node bzw. trigger-node ggfs. noch eintragen muss.
Mein Wunsch ist es das, sobald die Abwesenheitsvariable für mindestens 5 Minuten auf "false" steht, das dann der weitere Flow "abgearbeitet" wird.
Sollte innerhalb von 5 Minuten die Abwesenheitsvariable wieder auf "true" stehen dann passiert nichts.
Wenn die Abwesenheitsvariable sich wieder auf "true" ändert sollen keine 5 Minuten abgewartet werden.
Sage schon einmal Danke für jede Unterstützung.
Shawn26
ich komme irgendwie mit den Erklärungen nicht klar.
Ich füge das "rbe" und "trigger" Node ein und es funktioniert nicht (hier nicht verbunden nur um anzuzeigen was ich will - sie waren bei den Versuchen genau da eingebunden wo der Pfeil es anzeigt). Allerdings ist mir aktuell auch
noch nicht klar was ich bei dem rbe-node bzw. trigger-node ggfs. noch eintragen muss.
Mein Wunsch ist es das, sobald die Abwesenheitsvariable für mindestens 5 Minuten auf "false" steht, das dann der weitere Flow "abgearbeitet" wird.
Sollte innerhalb von 5 Minuten die Abwesenheitsvariable wieder auf "true" stehen dann passiert nichts.
Wenn die Abwesenheitsvariable sich wieder auf "true" ändert sollen keine 5 Minuten abgewartet werden.
Sage schon einmal Danke für jede Unterstützung.
Shawn26
- Henke
- Beiträge: 1524
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 141 Mal
- Danksagung erhalten: 306 Mal
Re: Variablenzustand über ein Intervall überwachen
KISS, keep it simple
Zum Testen habe ich die Dauer auf 10 sec gesetzt. Die Anpassung kriegst du hin.
Zum Testen habe ich die Dauer auf 10 sec gesetzt. Die Anpassung kriegst du hin.
Code: Alles auswählen
[
{
"id": "344f11e5506b2f49",
"type": "trigger",
"z": "dfdb2036.ae7008",
"name": "",
"op1": "",
"op2": "",
"op1type": "nul",
"op2type": "payl",
"duration": "10",
"extend": false,
"overrideDelay": false,
"units": "s",
"reset": "true",
"bytopic": "all",
"topic": "channel",
"outputs": 1,
"x": 1530,
"y": 4200,
"wires": [
[
"ef1c78518583094e"
]
]
},
{
"id": "10cd093ecfa8200b",
"type": "inject",
"z": "dfdb2036.ae7008",
"name": "true",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 1290,
"y": 4180,
"wires": [
[
"344f11e5506b2f49"
]
]
},
{
"id": "e1f50cfa6fda79f5",
"type": "inject",
"z": "dfdb2036.ae7008",
"name": "false",
"props": [
{
"p": "payload"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "false",
"payloadType": "bool",
"x": 1290,
"y": 4240,
"wires": [
[
"344f11e5506b2f49"
]
]
},
{
"id": "ef1c78518583094e",
"type": "debug",
"z": "dfdb2036.ae7008",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "counter",
"x": 1685,
"y": 4200,
"wires": [],
"l": false
}
]
-
- Beiträge: 56
- Registriert: 21.10.2017, 18:10
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 1 Mal
Re: Variablenzustand über ein Intervall überwachen
Aber das ist genau die Frage.
Den Code hatte ich in den anderen Beiträgen auch gesehen, aber wo füge ich ihn ein? In der rbe-node oder in einen function.code oder in den trigger-node?
Da blicke ich noch nicht durch?!
Weiterhin vielen Dank.
Shawn26
Den Code hatte ich in den anderen Beiträgen auch gesehen, aber wo füge ich ihn ein? In der rbe-node oder in einen function.code oder in den trigger-node?
Da blicke ich noch nicht durch?!
Weiterhin vielen Dank.
Shawn26