Verständnisproblem: DOIF mit wait bei Event, wenn Event zwischenzeitlich endet

Begonnen von oibboddl, 18 November 2021, 10:25:10

Vorheriges Thema - Nächstes Thema

oibboddl

Hallo Gemeinde,

ich mache seit ein paar Wochen meine ersten Gehversuche mit FHEM und bin meiner Meinung nach auch schon recht weit gekommen. Jetzt wollte ich mir noch einen akkustischen Alarm via SONOS-Speaker gönnen, wenn im Bad das Fenster länger als 30 Minuten offensteht.

Nun habe ich jedoch das Problem, dass die Meldung hierüber 30 Minuten nach Öffnen des Fensters auch kommt, wenn das Fenster zwischenzeitlich schon wieder geschlossen ist; was nicht Sinn und der Zweck meiner Sache ist.

Das sieht bei mir aktuell wie folgt aus:

Bad.Fenster.Offen.Alarm30_SONOS DOIF

([BadC.Fenster:"open"] and [SONOS_Speak] eq "on")

(set Sonos_Wohnzimmer Speak 30 de Achtung! Das Fenster im Bad steht seit 30 Minuten offen!)


SONOS_Speak ist ein Schalter, den ich definiert habe, um die Durchsage ggf. händisch abstellen zu können, wenn jemand im Wohnzimmer schläft oder dort aus anderen Gründe Stille herrschen soll.

Dann habe ich noch ein "attr do always" gesetzt, damit die Meldung auch kommt, wenn das Fenster innerhalb der 30 Minuten zwischenzeitlich geschlossen und wieder geöffnet worden ist und natürlich
"attr wait 1800", damit die Durchsage nach 30 Minuten und nicht sofort bei Fensteröffnung kommt.

Wo ist mein Denkfehler? Was mache ich falsch?

Nobbynews

Warum hier ein DOIF verwenden?

Mit watchdog geht das mMn viel einfacher.
Angepasstes Beispiel einer meiner Heizkörper:
defmod wd_Test watchdog FensterXYZ:on 00:30 FensterXYZ:off {\
fhem ("set HK_XYZ tmoff");;\
.....
}

rabehd

Ein DOIF mit nur einem Zweig dürfte das Problem sein. Du kannst zwar neu auslösen, aber nicht wechseln.
Füge doch mal ein DOELSE() hinzu.

Unabhängig vom anderen Lösungsvorschlag.
Auch funktionierende Lösungen kann man hinterfragen.