Verstehe ich im Watchdog was nicht

Begonnen von pjakobs, 31 Juli 2020, 09:01:41

Vorheriges Thema - Nächstes Thema

pjakobs

Watchdog macht ja heute, wenn ich mich nicht täusche, folgendes:
starte wenn <re1> eintritt. Wenn <re2> eintritt, beende den Watchdog (und schalte ihn ggf. wieder scharf, so dass er bei <re1> erneut gestartet wird).
Wenn <re2> nicht eintritt, führe den angegebenen Befehl aus.

Das ist sinnvoll, um die klassische Funktion eines Watchdog zu implementieren, nämlich: darüber zu wachen, dass ein Zustand nicht "hängen bleibt".

Im Zusammenhang mit Licht und Bewegungsmeldern (und vielleicht nicht nur dort) wäre aber auch ein alternatives Verhalten bzw. eine alternative Watchdog Methode toll:

Wenn <re1> eintritt tue etwas (z.B. Licht ein) für eine Zeit
Wenn <re2> innerhalb dieser Zeit eintritt, dann setzte die Zeit wieder auf den Ausgangswert
Wenn die Zeit abläuft, tue etwas (also etwa Licht aus).

wenn <re1>==<re2> (also z.B. beides der gleiche Bewegungsmelder) dann sollte es wohl ein einfaches notify mit "on-for-timer" tun. Aber ich habe hier z.B. eine Situation, in der ein Licht von einer bestimmten Aktion eingeschaltet wird (namentlich: ich öffne eine Videokonferenz-Applikation) und ausgeschaltet wird, wenn ich nicht mehr vor dem Bildschirm bin.

Ich könnte mir vorstellen, dass es ein paar andere Anwendungen ähnlicher Art geben dürfte - wäre das nicht eine sinnvolle Erweiterung für watchdog? Oder verstehe ich einfach nicht, wie ich es schon jetzt damit realisieren könnte.

(ein (re1|re2) watchdog re2 funktioniert übrigens nicht, weil ich ja nicht möchte, dass re2 das Licht einschaltet)

pj

rudolfkoenig

Ich habe ein neues Attribut eingebaut:
Zitatregexp2WillReactivate
In der Voreinstellung wartet der Watchdog nach Empfang eines Events, der auf regexp2 matcht, wieder auf einem Event, was auf regexp1 matcht, um den Rückwärtszähler zu starten. Wenn dieses Attribut gesetzt ist (auf 1), dann wird nach dem Empfang des "regexp2" Events der Zähler ohne auf einem "regexp1" Event zu warten, von vorne gestartet. Falls regexp1 und regexp2 gleich sind, oder regexp2 ist ., dann ist dieses Verhalten die Voreinstellung.

Jamo

Hallo Rudi,
interessant... aber deine Erweiterung implementiert noch nicht, das wenn <re1> eintritt, auch ein (anderer) Befehl ausgeführt wird, wie pj geschrieben hat. Also muss der WD 2 Befehle ausführen: Befehl 1 wenn <re1> eintritt, und Befehl 2 wenn <re2> nicht eintritt. Oder habe ich das falsch verstanden?
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

pjakobs

Zitat von: Jamo am 31 Juli 2020, 17:15:23
Hallo Rudi,
interessant... aber deine Erweiterung implementiert noch nicht, das wenn <re1> eintritt, auch ein (anderer) Befehl ausgeführt wird, wie pj geschrieben hat. Also muss der WD 2 Befehle ausführen: Befehl 1 wenn <re1> eintritt, und Befehl 2 wenn <re2> nicht eintritt. Oder habe ich das falsch verstanden?

ohne es versucht zu haben - doch, ich glaube, in meinem Fall sollte das funktionieren, denn ich kann ja z.B. auf die Statusänderung der Leuchte triggern, sprich:

wenn <lampe an> dann warte 10 minuten und schalte sie wieder aus, wenn <bewegung> dann setzte counter auf 10 Minuten zurück

oder?

Jamo

Ich hatte das anders verstanden, weil Du oben geschrieben hast:

Wenn <re1> eintritt tue etwas (z.B. Licht ein) für eine Zeit
Wenn <re2> innerhalb dieser Zeit eintritt, dann setzte die Zeit wieder auf den Ausgangswert
Wenn die Zeit abläuft, tue etwas (also etwa Licht aus).

Damit hast Du 2 Befehle die ausgeführt werden, einen wenn <re1> eintritt ("Lampe on"), und einen 2-ten wenn <re2> nicht eintritt und die Zeit abläuft ("Lampe off").

Das ist eigentlich das, was man für eine Beleuchtugssteuerung bräuchte. Ansonsten muss man immer für <re1> ein zusätzliches notify haben um die Lampe anzumachen, und einen Watchdog, um die Lampe auszumachen falls nicht nochmal <re1> kommt (solange man nicht on-for-timer hat).



Rudi hat jetzt implementiert, das der timer des Watchdog von vorne Anfängt wenn ein <re2> kommt, ohne auf ein neues <re1> zu warten.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

pjakobs

Zitat von: Jamo am 03 August 2020, 13:18:35
Ich hatte das anders verstanden, weil Du oben geschrieben hast:

Wenn <re1> eintritt tue etwas (z.B. Licht ein) für eine Zeit
Wenn <re2> innerhalb dieser Zeit eintritt, dann setzte die Zeit wieder auf den Ausgangswert
Wenn die Zeit abläuft, tue etwas (also etwa Licht aus).

Damit hast Du 2 Befehle die ausgeführt werden, einen wenn <re1> eintritt ("Lampe on"), und einen 2-ten wenn <re2> nicht eintritt und die Zeit abläuft ("Lampe off").

Das ist eigentlich das, was man für eine Beleuchtugssteuerung bräuchte. Ansonsten muss man immer für <re1> ein zusätzliches notify haben um die Lampe anzumachen, und einen Watchdog, um die Lampe auszumachen falls nicht nochmal <re1> kommt (solange man nicht on-for-timer hat).



Rudi hat jetzt implementiert, das der timer des Watchdog von vorne Anfängt wenn ein <re2> kommt, ohne auf ein neues <re1> zu warten.
stimmt, aber beim nochmal darüber nachdenken genügt es halt, wenn <re1> schon der Effekt ist (hier: Licht an) - so, wie ich es oben geschrieben habe wäre es wohl allgemeiner nutzbar, das stimmt.

pj