Watchdog geht auf einmal nicht mehr

Begonnen von schenkl, 02 März 2023, 11:48:58

Vorheriges Thema - Nächstes Thema

schenkl

Hallo Liebe Foren-Mitglieder,

ich habe einen sehr alten Code für einen Watchdog, der einen Homeatic Tür- bzw. Fensterkontakt überwacht. Ziel war es mir einen Hinweis zu geben, falls die Badtür länger als drei Minuten offen steht (via Sprachausgabe). Leider funktioniert der Watchdog nicht mehr.

DEF des Watchdogs:
fl_Duschtuer:open 00:03 fl_Duschtuer:closed {speak("Die Badtür steht offen.",100)}

fl_Duschtuer hat entweder den state=open oder state=closed

Startzustand ist state=defined.
Sobald der über ein TYPE=CULHM angebundene homeatic sein State auf open wechselt. Wechselt auch der Watchdog den State auf z.B. "Next: 11:32:28".
Ich lasse die Badtür offen und Prüfe um 11:32:48 den Watchdog. Dieser Steht wieder auf State="defined", obwohl der zugrundeliegende Türkontakt immer noch auf "open" steht. Ich finde auch um 11:32:28 keinen Logeintrag für die Sprachausgabe.

Das Speak-kommando alleine (d.h. in der Kommandozeile) ausgeführt funktioniert:
{speak("Die Badtür steht offen.",100)}

Wo ist der Fehler?
Image-2.png Türkontakt wurde geöffnet
Image-3-png Prüfung nach 3 Minuten watchdog steht wieder auf state=defined


rudolfkoenig

Gibt es ein "Watchdog XXX triggered" Eintrag auf verbose 3-Ebene im Log?

Wenn nicht: kannst Du bitte alle fl_Duschtuer Events im fraglichen Zeitraum zeigen?
Z.Bsp in FHEMWEB Event-Monitor starten, und nach fl_Duschtuer filtern.

schenkl

Hi,

beim Schließen der Duschtür kommt folgendes Event im Event-Monitor (steht so auch im Logfile):
2023-03-02 15:44:10 CUL_HM fl_Duschtuer battery: ok
2023-03-02 15:44:10 CUL_HM fl_Duschtuer commState: CMDs_done
2023-03-02 15:44:10 CUL_HM fl_Duschtuer contact: closed (to VCCU)
2023-03-02 15:44:10 CUL_HM fl_Duschtuer closed
2023-03-02 15:44:10 CUL_HM fl_Duschtuer trigger_cnt: 241

bzw. im Logfile:

2023-03-02_15:44:10 fl_Duschtuer battery: ok
2023-03-02_15:44:10 fl_Duschtuer commState: CMDs_done
2023-03-02_15:44:10 fl_Duschtuer contact: closed (to VCCU)
2023-03-02_15:44:10 fl_Duschtuer closed
2023-03-02_15:44:10 fl_Duschtuer trigger_cnt: 241


Beim öffnen der Tür Stehft folgendes im Monitor:
2023-03-02 15:47:17 CUL_HM fl_Duschtuer battery: ok
2023-03-02 15:47:17 CUL_HM fl_Duschtuer commState: CMDs_done
2023-03-02 15:47:17 CUL_HM fl_Duschtuer contact: open (to VCCU)
2023-03-02 15:47:17 CUL_HM fl_Duschtuer open
2023-03-02 15:47:17 CUL_HM fl_Duschtuer trigger_cnt: 242

bzw. im Logfile:
2023-03-02_15:47:17 fl_Duschtuer battery: ok
2023-03-02_15:47:17 fl_Duschtuer commState: CMDs_done
2023-03-02_15:47:17 fl_Duschtuer contact: open (to VCCU)
2023-03-02_15:47:17 fl_Duschtuer open
2023-03-02_15:47:17 fl_Duschtuer trigger_cnt: 242


Der Watchdog ändert seinen State auf:
Next: 15:50:17

Mehr passiert dann aber bis 15:50:17 nicht.

Ausser das der Watchdog seinen State wieder auf
defined
ändert.

Jetzt habe ich aber um 15:50:17 einen Fehler im Logfile gesehen. Scheinbar wollte fhem doch den speak Befehl ausführen:
2023.03.02 15:50:17 3: Watchdog watchdogDusche triggered
2023.03.02 15:50:17 3: Unknown command {speak("Die, try help.

Ist da doch was in der DEF des Watchdog falsch:
fl_Duschtuer:open.* 00:03 fl_Duschtuer:closed.* {speak("Die Badtür steht offen.",100)}

Hier noch die Readings des Watchdog.
Activated activated 2023-03-02 15:47:17
Reset reset 2023-03-02 15:50:17
Triggered triggered 2023-03-02 15:50:17
state defined 2023-03-02 11:22:27
triggeredByDev fl_Duschtuer 2023-03-02 15:47:17
triggeredByEvent open 2023-03-02 15:47:17

jhohmann

Bei geht funktioniert ein ähnlicher Watchdog wunderbar:
ArbeitszimmerFenster:open 00:04:00 ArbeitszimmerFenster:closed {
telegramSendAndDeleteLater("teleBot", "sleep ArbeitszimmerFenster:closed", telegramEmpfaenger(2), "Das Fenster im Arbeitszimmer ist schon länger offen!");
}

Hat dein Watchdog auch das Attribut autoRestart mit dem Wert 1?
Ansonsten löst er nur einmal aus und dann nie wieder (soweit ich das noch im Kopf habe).
Früher gab es noch das trigger-Kommando, was am Ende immer manuell ausgelöst werden musste.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

rudolfkoenig

Der Watchdog reagiert, aber das, was ausgefuehrt wird, wird nicht als perl erkannt.

Bei der Ausfuehrung wird der Befehl erst bei Strichpunkt (;) zerstueckelt (haben wir hier nicht), dann stueckweise Leerzeichen und Tab am Anfang und am Ende entfernt, und zum Schluss geprueft, ob der Rest in {} eingeschlossen ist.

Da diese Pruefung schiefgeht, sehe ich nur zwei Moeglichkeiten:
- am Anfang oder am Ende des Befehls ist ein nicht druckbares Zeichen.
- die { } sind keine ASCII-Klammern, sondern irgendein UTF8-Zeichen, was nur so ausschaut. Fals das oben Gezeigte per Copy & Paste entstanden ist, dann kann man diese Moeglichkeit ausschliessen, da die Definition bei mir (nach Copy&Paste) ohne Probleme funktioniert.

betateilchen

Man könnte ja einfach mal einen zweiten watchdog mit gleicher Definition neu anlegen und testen, ob der Fehler dort auch auftritt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!