Wie programmiert man den Watchdog richtig?

Begonnen von ujaudio, 31 März 2016, 17:51:18

Vorheriges Thema - Nächstes Thema

ujaudio

Ich hab's wohl mal wieder nicht kapiert.

Ich habe einen Variable x (also einen dummy). Wenn ichdies auf einen Wert <>0 setze, dann soll nach 3 Minuten der Wert auf 0 zurückgesetzt werden, wenn ich in diesen 3 Minuten einen anderen Wert oder auch nochmals den gleichen Wert  setze, sollen die 3 Minuten wieder von vorne zählen.

Was habe ich programmiert:
define wdx watchdog x 00:03 SAME set x 0

Wenn ich die Commandref lese:
Startet einen beliebigen FHEM Befehl wenn nach dem Empfang des Ereignisses <regexp1> nicht innerhalb von <timespec> ein <regexp2> Ereignis empfangen wird.
Startet "set x 0"                                           wenn nach dem Empfang des Ereignisses x                  nicht innerhalb von 00:03            ein SAME         Ereignis empfangen wird.

Wobei ich davon ausgehe, dass jede Änderung von x erkannt wird.

DIe Aussage "Wenn <regexp2> SAME ist , dann ist es das gleiche wie das erste regexp, und wird reaktiviert wenn es empfangen wird." ist mir nicht 100% klar.
Könnte ich mal einen kleinen Klapps auf den Hinterkopf bekommen, das soll angeblich das Denkvermögen verbessern?  :)

Ich will ja eigentlich immer nur nachtriggern und erst wenn das ausbleibt, dann soll der Wert auf Null zurückfallen.
Einen lieben Gruß
Jürgen

ujaudio

Ich habe den Code wie folgt abgewandelt:

define wdx watchdog x 00:03 wdx set x 0; setstate wdx defined

Nun funktioniert es wie es soll - auch wenn ich nicht begriffen habe, warum. Aber so ist es halt:

  • Der Theoretiker weiß wie es gehen soll, aber es tut nicht
  • Der Paktiker weiß zwar nicht warum, aber es tut
Einen lieben Gruß
Jürgen

CoolTux

Zitat von: ujaudio am 31 März 2016, 20:09:37
Ich habe den Code wie folgt abgewandelt:

define wdx watchdog x 00:03 wdx set x 0; setstate wdx defined

Nun funktioniert es wie es soll - auch wenn ich nicht begriffen habe, warum. Aber so ist es halt:

  • Der Theoretiker weiß wie es gehen soll, aber es tut nicht
  • Der Paktiker weiß zwar nicht warum, aber es tut

Mach mal besser

define wdx watchdog x 00:03 wdx set x 0; trigger wdx .
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Benni

Keine Ahnung wo die Leute immer das mit dem setstate her haben?  :-\
Das ist mir in letzter Zeit ein paar mal hier im Forum über den Weg gelaufen.
In der offiziellen Doku zum Watchdog ist das mit dem Punkt doch beschrieben und da steht nix von setstate.
Ebenso im Wiki. Dort wird sogar explizit von setstate abgeraten.

CoolTux

Ich weiß auch nicht wer auf sowas kommt. Musste aber feststellen das selbst Developer in ihren mitgebrachten watchdogs mit setstate arbeiten, sogar mit setstate und danach noch mal trigger.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hollo

Das mit dem setstate stand/steht in einigen Codeschnipseln.
Irgendwo ging es dabei auch mal um die Frage/Problematik, wie man einen gestarteten Watchdog zurücksetzen kann, ohne dass die Aktion ausgeführt wird.
Mit dem trigger wird ein noch nicht gestarteter watchdog ja auch gestartet.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

ujaudio

Zitat von: Benni am 31 März 2016, 20:49:59
Keine Ahnung wo die Leute immer das mit dem setstate her haben?  :-\
Das ist mir in letzter Zeit ein paar mal hier im Forum über den Weg gelaufen.
In der offiziellen Doku zum Watchdog ist das mit dem Punkt doch beschrieben und da steht nix von setstate.
Ebenso im Wiki. Dort wird sogar explizit von setstate abgeraten.

Ich habe das aus einem watchdog her, der aufgrund meiner RESIDENT und ROOMMATE automatisch bei mir eingerichtet wurden. Das sollte der Entwickler also mal korrigieren - ich habe erst einen einzigen wd selbst erstellt, alle anderen sind automatisch hinzugekommen - und die haben alle setstate (gleicher Entwickler?).

Ich gebe zu  das Wiki nicht gelesen zu haben und den Punkt trigger in der Commandref sehr wohl genau gelesen zu haben, aber eben nicht verstanden. Ich sehe es jetzt so:

  • nach dem Erstellen / Modifizieren ist ein Watchdog "defined" und er wird genau einmal das machen was er soll und dann nie wieder
  • aus "defined" heraus kann man ihn starten, man bekommt dann die Anzeige "Next: hh:mm:ss"
  • man kann einen Watcdog während er "Next: hh:mm:ss" anzeigt, nochmals anschubsen, entsprechend wird die Zeit aktualisiert
  • läuft der watchdog ab, dann geht er in den Zustand "triggered" und das war's
  • will man den watchdog nachdem er abgelaufen ist ("triggered") nochmals vewenden, muss man ihn mit dem Befehl "trigger <watchdog> ." reaktivieren

Im WIki steht das ganz gut beschrieben, in der Commandref konnte ich das nicht erkennen. Lessons learned: immer beides lesen.

Hier nochmals ein Auszug aus einem Watchdog, der bei mir automatisch eingerichtet wurde:
rr_Juergen:gotosleep 00:00:04 rr_Juergen:(home|absent|gone|none|asleep|awoken) trigger Macro_rr_Juergen_gotosleep; setstate wd_rr_Juergen_gotosleep defined
Im Wiki dagegen steht interessanterweise:
define wd_Ralf_gotosleep_asleep watchdog rr_Ralf:gotosleep.* 00:10:00 rr_Ralf:(home|absent|gone|none|asleep|awoken) set rr_Ralf asleep;; trigger wd_Ralf_gotosleep_asleep .
Einen lieben Gruß
Jürgen

marvin78

Zitat von: ujaudio am 01 April 2016, 15:16:42
Im WIki steht das ganz gut beschrieben, in der Commandref konnte ich das nicht erkennen. Lessons learned: immer beides lesen.

Zitattrigger <watchdogname> . will activate the trigger if its state is defined, and set it into state defined if its state is active (Next:...) or triggered. You always have to reactivate the watchdog with this command once it has triggered (unless you restart fhem)

Aus der commandref. Es steht alles da.

Das mit RESIDENTS und ROOMMATE sieht nicht richtig aus. Warum sollten die automatisch Watchdogs anlegen? Bei mir wurde nicht von einem einzigen Modul ein watchdog "automatisch" angelegt. Bist du sicher, dass du nicht irgendwann mal wieder Copy & Paste ohne lesen gemacht hast?

ujaudio

Ja im commandref steht's, aber ich habe es nicht verstanden!

Und die vielen Macros (notify) und Watchdogs, die ich durch die Installation von RESIDENTS und ROOMMATE habe, kann ich gar nicht selbst geschrieben haben. Ich wüsste auch nicht von wo ich die mit Copy/Paste her haben sollte. Ist auch egal, ich werde die "setstate" alle durch "trigger" ersetzen.
Einen lieben Gruß
Jürgen

Benni

Zitat von: ujaudio am 01 April 2016, 17:19:35
Und die vielen Macros (notify) und Watchdogs, die ich durch die Installation von RESIDENTS und ROOMMATE habe...

Die werden auch erst dann angelegt, wenn man die Weckfunktion mittels create wakeuptimer bei den ROOMMATES aktiviert, also sich dort einen oder mehrere Wecker einrichtet (vgl. Wiki)

marvin78

Also wird nichts automatisch und ohne Userinteraktion etwas angelegt, das nicht dokumentiert ist. Sage ich ja ;)

Trotzdem ist das natürlich auf eine Art grauenhaft....

Benni

Ab morgen kann man am Watchdog per Attribut einstellen, dass er automatisch neu starten soll, wenn er mal ausgelöst hat. Quasi ein auto-trigger mit Punkt nach der Kommandoausführung.

(s.a. https://forum.fhem.de/index.php/topic,51672.msg433822.html)