Hallo zusammen,
ich habe seit einigen Wochen ein Problem mit meiner DOIF-Anweisung zur Haustürverriegelung. Das merkwürdige ist, dass sie davor über ein Jahr lang einwandfrei funktioniert hat. :-\
Es handelt sich um folgende Anweisung:
define di_EG.FL_Tuerschloss_Autoverriegelung DOIF
([HM.EG.FL_Tuerschloss:lock] eq "unlocked" and [20:55-07:00]) (set HM.EG.FL_Tuerschloss lock)
DOELSEIF ([Balken] eq "absent" and [HM.EG.FL_Tuerschloss:lock] eq "unlocked") (set HM.EG.FL_Tuerschloss lock) \
DOELSEIF ([Balken] eq "gone" and [HM.EG.FL_Tuerschloss:lock] eq "unlocked") (set HM.EG.FL_Tuerschloss lock)\
DOELSE
attr di_EG.FL_Tuerschloss_Autoverriegelung do always
attr di_EG.FL_Tuerschloss_Autoverriegelung group Türen und Fenster
attr di_EG.FL_Tuerschloss_Autoverriegelung icon security
attr di_EG.FL_Tuerschloss_Autoverriegelung room 0.02_Erdgeschoss,9.02_Steuerung
attr di_EG.FL_Tuerschloss_Autoverriegelung wait 300:300:300
Die Anweisung soll dafür sorgen, dass die Keymatic zwischen 21:00 und 07:00 verriegelt und beim Abwesenheitszustand über das RESIDENTS-Modul (Balken) soll ebenfalls verriegelt werden.
Wie gesagt, dass hat so über ein Jahr wunderbar funktioniert... Seit ein paar Wochen wird zwar um 21:00 verriegelt, wenn jedoch danach zwischen 21:00 und 07:00 Uhr die Tür geöffnet oder entriegelt wurde, wird sie nicht mehr verriegelt.
Das DOIF setzt zwar nach der Zustandsänderung der keymatic auf den wait_timer:cmd_1, dieser wird aber nach kurzer Zeit durch cmd_4 überschrieben.
Wenn ich das DOELSE rausnehme und das Attribut do always setze funktioniert es zwar, aber das Log wird mir dann alle 5 Minuten zugemüllt....
Hat sich in den letzten Wochen dahingehend etwas in dem DOIF-Modul geändert?
Viele Grüße
Neo
Zitat von: neo_28 am 05 Mai 2017, 12:53:04
Hallo zusammen,
ich habe seit einigen Wochen ein Problem mit meiner DOIF-Anweisung zur Haustürverriegelung. Das merkwürdige ist, dass sie davor über ein Jahr lang einwandfrei funktioniert hat. :-\
Es handelt sich um folgende Anweisung:
define di_EG.FL_Tuerschloss_Autoverriegelung DOIF
([HM.EG.FL_Tuerschloss:lock] eq "unlocked" and [20:55-07:00]) (set HM.EG.FL_Tuerschloss lock)
DOELSEIF ([Balken] eq "absent" and [HM.EG.FL_Tuerschloss:lock] eq "unlocked") (set HM.EG.FL_Tuerschloss lock) \
DOELSEIF ([Balken] eq "gone" and [HM.EG.FL_Tuerschloss:lock] eq "unlocked") (set HM.EG.FL_Tuerschloss lock)\
DOELSE
attr di_EG.FL_Tuerschloss_Autoverriegelung do always
attr di_EG.FL_Tuerschloss_Autoverriegelung group Türen und Fenster
attr di_EG.FL_Tuerschloss_Autoverriegelung icon security
attr di_EG.FL_Tuerschloss_Autoverriegelung room 0.02_Erdgeschoss,9.02_Steuerung
attr di_EG.FL_Tuerschloss_Autoverriegelung wait 300:300:300
Die Anweisung soll dafür sorgen, dass die Keymatic zwischen 21:00 und 07:00 verriegelt und beim Abwesenheitszustand über das RESIDENTS-Modul (Balken) soll ebenfalls verriegelt werden.
Wie gesagt, dass hat so über ein Jahr wunderbar funktioniert... Seit ein paar Wochen wird zwar um 21:00 verriegelt, wenn jedoch danach zwischen 21:00 und 07:00 Uhr die Tür geöffnet oder entriegelt wurde, wird sie nicht mehr verriegelt.
Das DOIF setzt zwar nach der Zustandsänderung der keymatic auf den wait_timer:cmd_1, dieser wird aber nach kurzer Zeit durch cmd_4 überschrieben.
Wenn ich das DOELSE rausnehme und das Attribut do always setze funktioniert es zwar, aber das Log wird mir dann alle 5 Minuten zugemüllt....
Hat sich in den letzten Wochen dahingehend etwas in dem DOIF-Modul geändert?
Viele Grüße
Neo
Möglicherweise hat sich bei den angegebenen Devices etwas geändert. Offenbar gibt es jetzt einen Trigger, der dazu führt, dass die DOIF-Fälle nicht greifen und der DOELSE-Fall zuschlägt.
Das musst du genau durch Event-Auswertung analysieren.
Wenn die Tür nach 21:00 manuell geöffnet wird, dann vermute ich mal, dass der Status auf "unlocked (uncertain)" steht. Damit würde der cmd_1 nicht greifen.
Zitat von: alru am 05 Mai 2017, 21:26:57
Wenn die Tür nach 21:00 manuell geöffnet wird, dann vermute ich mal, dass der Status auf "unlocked (uncertain)" steht. Damit würde der cmd_1 nicht greifen.
dann musst du einfach statt auf
eq "unlocked" auf
=~ "unlocked" abfragen
Siehe auch diese Antwort https://forum.fhem.de/index.php/topic,71513.msg630898.html#msg630898
Statt auf
[HM.EG.FL_Tuerschloss:lock] eq "unlocked"
auf
["HM.EG.FL_Tuerschloss":lock:"unlocked"]
testen.
Wobei ich mir mit der Position und Anzahl der Anführungszeichen nicht sicher bin.
Zitat von: Per am 07 Mai 2017, 07:38:36
Statt auf
[HM.EG.FL_Tuerschloss:lock] eq "unlocked"
auf
["HM.EG.FL_Tuerschloss":lock:"unlocked"]
testen.
Wobei ich mir mit der Position und Anzahl der Anführungszeichen nicht sicher bin.
["HM.EG.FL_Tuerschloss:lock: unlocked"]
Der erste Doppelpunkt ist ein Trennzeichen für DOIF (Trennzeichen für Device und Event), das zweite gehört zum Event.
Ich muss mich mit der Aussage
Zitat von: alru am 05 Mai 2017, 21:26:57
Wenn die Tür nach 21:00 manuell geöffnet wird, dann vermute ich mal, dass der Status auf "unlocked (uncertain)" steht. Damit würde der cmd_1 nicht greifen.
korrigieren. Da in dem DOIF das Reading "lock" abgefragt wird, kommt dort "unlocked (uncertain)" gar nicht vor. Hier steht - so habe ich es zumindest eben noch mal nachgesehen - nur ein "unlocked".
Im Reading "state" dagegen steht das "unlocked (uncertain)".