Guten Tag zusammen.
Ich hab ein Problem mit dem Watchdog. Soweit tut er was er soll. Aber wenn ich ihn auf "inactive" setze nach dem regexp1 erfüllt wurde, zählt er trotzdem noch die Zeit runter und führt wenn regexp2 nicht erfüllt wurden ist den Befehl (command) aus. Und setzt sich durch "autorestart 1" auf defined zurück.
Gibt es eine Attribut welches dies verhindert?
Ich hatte ihn jetzt eine Weile nicht mehr benutzt und bin der Meinung, dass dieses Verhalten erst mit dem neuen Update kam.
Danke schon einmal im Voraus.
Machst Du set watchdog_name inactive
oder attr watchdog_name disable 1
?
Ich kenne jetzt leider dein Geamtkonstrukt nicht genau...
Du könntest aber dort, wo du den Watchdog auf inaktiv setzt, ihn vorher noch per
trigger watchdog_name .
manuell auf Ausgangsstellung bringen, ggf. auch Zustandsabhängig.
Wobei ich eigentlich schon auch erwarten würde, dass der Watchdog komplett deaktiviert wird, egal in welchem Zustand er sich gerade befindet. (Ich hab's jetzt nicht selbst überprüft)
Ob set inactive oder attr disable sollte m.E. funktionell keinen Unterschied machen. Lediglich die Auswirkungen auf den Speichermechanismus sind unterschiedlich (Stw.: Rotes Fragezeichen / statefile)
(s.u. -> Noch 'n update)
Update: Ich habe das eben mal schnell durchgespielt und das Verhalten ist tatsächlich so wie beschrieben. Mein Workaround mit zusätzlichem trigger . funktioniert auch wie erwartet.
Wie schon gesagt, ich halte es tendenziell für einen Bug.
Rudi sollte hier normalerweise mitlesen ... schau mer mal ;D
Noch 'n update: Bei attr disable scheint das Problem tatsächlich nicht zu bestehen, dort verhält sich der watchdog wie erwartet und bricht die Ausführung zustandsunabhängig komplett ab.
Guten Tag zusammen und Danke für die schnelle Hilfe.
Mein Watchdog:
Wohnzimmer_Bewegungsmelder_Zeit watchdog Wohnzimmer_Bewegungsmelder:on.* 00:00:15 Lampe_Dachschraege:off.* {Licht_Bewegungsmelder("Wohnzimmer_Bewegungsmelder","Lampe_Dachschraege")}
Im Prinzip benutze ich ihn als on-for-timer, den man auch eigentlich vor Ablauf der Zeit deaktivieren können sollte..
Ich setze ihn über ein Befehl in 99_myUtils auf {fhem("set Wohnzimmer_Bewegungsmelder_Zeit inactive")} und dies kann zu jedem Zeitpunkt stattfinden.
Ich werde mal die Lösung mit dem "trigger Wohnzimmer_Bewegungsmelder_Zeit" versuchen.
Update:
Mit "trigger Wohnzimmer_Bewegungsmelder_Zeit . ; set Wohnzimmer_Bewegungsmelder_Zeit inactive"
macht er genau das was ich will.
Danke sehr.
Schönen Sonntag noch :)
Inactive hat bisher verhindert, dass der Watchdog neue Events bekommt, zusammen mit disable und dsabledForIntervals. Falls der Timer zugeschlagen hat, wurde bisher nur disable geprueft.
Ich finde das ist ein Bug. Ab sofort wird beim Ausfuehren des Codes auch auf disabledForIntervals und inactive geprueft. Achtung: in manchen Situationen kann der Watchdog deswegen sich anders verhalten.
Oki danke für die Hilfe.
Also wird dies später noch behoben und es funktioniert dann auch mit "set device inactive"?
Die Aenderung ist ab sofort im SVN, und morgen etwa ab 8 per update in FHEM verfuegbar.
Wow geht das schnell :o
Großes Lob mal an der Stelle an alle, die da so engagiert dran arbeiten.
Hallo zusammen,
kann es sein, dass der Fehler wieder auftritt ?
Jedenfalls bewirkt ein "inactive" nicht, dass der watchdog abgebrochen wird. Die Befehle im watchdog werden trotzdem ausgeführt, lediglich ein neues triggern wird verhindert.
Während des sleep 15 wird der watchdog inactiviert, die Befehle dahinter werden trotzdem ausgeführt.
GA.torkontakt:open 00:01 GA.torkontakt:closed {if
(ReadingsVal('GA.tor','autoclose',0) eq "1" &&
ReadingsVal('FL.EG.gong.mp3.muteswitch','state','') eq "off")
{fhem("set Alarm_sir_ext on-for-timer 0.1 ; sleep 15 ; set set GA.taster on-for-timer 1 ;
define Check_if_really_closed at +00:00:45 {if(Value('GA.torkontakt') ne 'closed') {fhem('set FL.EG.gong.mp3 playTone 42')}
else {fhem('set FL.EG.gong.mp3 playTone 15')}}")}
Zitat von: Rampler am 11 Juni 2023, 12:17:23Während des sleep 15 wird der watchdog inactiviert, die Befehle dahinter werden trotzdem ausgeführt.
Das ist kein Fehler, denn alles was hier drinsteht
{fhem("set Alarm_sir_ext on-for-timer 0.1 ; sleep 15 ; set set GA.taster on-for-timer 1 ;
define Check_if_really_closed at +00:00:45 {if(Value('GA.torkontakt') ne 'closed') {fhem('set FL.EG.gong.mp3 playTone 42')}
ist für den watchdog ein einziger "Befehl", der zum Zeitpunkt des sleep 15 bereits vollständig ausgeführt wurde. Von dem sleep in Deinem perl Code bekommt der watchdog nichts mehr mit.
Und FHEM kann nicht unterscheiden, woher ein Ausführungsteil stammt, der nach den 15 Sekunden zur Abarbeitung eingeplant ist.