Hauptmenü

Frage zu DOIF, Wait Attribut

Begonnen von eppi, 20 Januar 2019, 07:49:47

Vorheriges Thema - Nächstes Thema

eppi

Guten Tag zusammen
Ich benötige einen Stupser in die richtige Richtung  ;)

Ich habe folgenden DOIF definiert der Sinn und Zweck erfüllt:
defmod do_Presence_Schluesselbretter DOIF ([PresenceStatus_Home:state] eq "absent" and [?04:00-16:00] and [?Alarm:state] eq "off") (set Alarm on,set Musik off)(set Licht_.* off) DOELSEIF\
([PresenceStatus_Home:state] eq "absent" and [?Alarm:state] eq "off") (set Alarm on,set Musik off) DOELSEIF\
([PresenceStatus_Home:state] eq "undefined") (set Alarm off)
attr do_Presence_Schluesselbretter do always
attr do_Presence_Schluesselbretter room Presence
attr do_Presence_Schluesselbretter wait 3,120:3:3


PresenceStatus_Home ist ein Struktur-Device welches meine iButton auf Presence zusammenfasst:
defmod PresenceStatus_Home structure homestatus Presence_Urs Presence_Nici Presence_Simone Presence_Reserve Presence_Reserve2  Presence_Fabi
attr PresenceStatus_Home clientstate_behavior absolute
attr PresenceStatus_Home devStateIcon absent:status_away_1@red undefined:status_available@green
attr PresenceStatus_Home event-on-change-reading state
attr PresenceStatus_Home room Presence


Nun passiertes ab und zu, dass sie die iButtons kurz für eine Sekunde verabschieden am Bus und sich wieder am Bus melden, deshalb habe ich dem DOIF ein WAIT Attribut angelegt, dass genau diese seltene "Flackern" der iButton am Bus ignorieren soll.

Doch leider stimmt trotzdem etwas nicht mit dem DOIF. Als ich heute morgen augestanden bin, war die Alarmanlage ausgeschaltet. Ich habe für jeden iButton ein Log3 angelegt, damit ich das nachvollziehen kann. Nach meinem Verständnis hätte da DOIF nicht reagieren dürfen, da die Bedingung keine 3sec erfüllt war.
2019.01.20 01:36:50 3: FS20 set Alarm off
2019.01.20 01:36:47 3: Presence_Nici present!
2019.01.20 01:36:47 3: Presence_Urs present!
2019.01.20 01:36:46 3: Presence_Nici absent!
2019.01.20 01:36:46 3: Presence_Urs absent!


Besten Dank für die Hilfe und viele Grüsse eppi

Ellert

wait funktioniert so: Die Bedingung wird wahr, dann wird die Befehlsausführung eingeleitet und der Timer beginnt zu laufen.
Nur wenn innerhalb des laufenden Timers eine andere Bedingung wahr wird, wird der Timer abgebrochen. Wahrscheinlich wird keine andere Bedingung wahr.
do reserwait setzt den Timer zurück, wenn die Bedingung wiedeholt wahr wird. Das würde auch nicht helfen.

Ich würde das im PRESENCE Modul abfangen, für Deinen Fall gibt's Attribute, falls Du PRESENCE verwendest.

Damian

Wenn dein DOIF Alarm mit off ausgeschaltet hat und das die einzige Möglichkeit in deinem System ist, Alarm off zu schalten, dann muss deine Bedingung ([PresenceStatus_Home:state] eq "undefined") länger als 3 Sekunden wahr gewesen sein.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

eppi

Danke für eure Antworten und Hilfe.
Zitat von: Damian am 20 Januar 2019, 09:51:36
Wenn dein DOIF Alarm mit off ausgeschaltet hat und das die einzige Möglichkeit in deinem System ist, Alarm off zu schalten, dann muss deine Bedingung ([PresenceStatus_Home:state] eq "undefined") länger als 3 Sekunden wahr gewesen sein.
Das sehe ich auch so, werde hier nochmals ansetzen um zu schauen, woran das gelegen hat, dass Alarm trotzdem auf "off" gewechselt hat.

Zitat von: Ellert am 20 Januar 2019, 08:05:07
Ich würde das im PRESENCE Modul abfangen, für Deinen Fall gibt's Attribute, falls Du PRESENCE verwendest.
Danke für den Tip! Ich habe das PRESENCE Modul mal zum Testen installiert/definiert und mein DOIF darauf angepasst.

Ich werde euch wieder berichten.
Nochmals Danke für die wertvolle Unterstützung.
Viele Grüsse eppi