Hallo,
bin noch neu in Sachen IF- und verschachtelten Abfragen und tue mir noch recht schwer, deswegen bräuchte ich mal etwas Hilfe.
Ich möchte gerne eine Pushover-Nachricht aufs Handy, wenn ein Fenster nach 21.00 Uhr noch geöffnet ist. Die Prüfung soll alle 30 Minuten wiederholt werden und um 08.00 Uhr stoppen.
Mit einer Abwesenheitserkennung habe ich das hinbekommen, aber bei der Uhrzeitprüfung stehe ich völlig auf dem Schlauch.
Mit meinem unten stehenden Beispiel gehe ich über mehrere Dummys - sicherlich ginge das auch einfacher, aber so hab ich es halt hinbekommen.
Abwesenheit:
#
#Alarm Dachfenster.Strasse - wenn abwesend
#
define Alarm.Dachfenster.Strasse dummy
attr Alarm.Dachfenster.Strasse room Hausstatus
define Alarm.Dachfenster.Strasse.An notify Abwesenheit:off { fhem ("set Alarm.Dachfenster.Strasse on") if (Value("Abwesenheit") eq "off" && (Value("Status.Dachfenster.Strasse") eq "on"))}
define Alarm.Dachfenster.Strasse.Aus notify Abwesenheit:on { fhem ("set Alarm.Dachfenster.Strasse off") if (Value("Abwesenheit") eq "on")}
Danach kommt eben noch der Pushover-Teil.
jetzt gilt es, das ganze so umzubauen, dass nicht mehr auf Abwesenheit und Status des Fensters geprüft wird, sondern auf Uhrzeit (21.00 - 08.00) und Status des Fensters.
Kann mich jemand in die richtige Richtung schubsen?
Schau dir die Perl-Specials in der commandref an.
Schau Dir mal das Modul DOIF an in der deutschen Commandref. Das Modul ist sehr mächtig und macht Perlcode zum großen Teil überflüssig.
define mydoif DOIF ([21:00-08:00] and [+00:30] and [?Fenster] eq "open") (Pushover)
attr mydoif do always
So müsste es etwa aussehen, nicht getestet, bitte die Syntax prüfen.
Gegenvorschlag:
- fasse die Fenster in einer structure zusammen
- mache 1 notify für die pushover-Meldung beim Öffnen eines Fensters
- definiere mit "disabledForIntervals" den Zeitraum, in dem die Prüfung/Meldung nicht stattfinden soll
Ein weiterer Vorschlag ist das Alarmmodul:
http://www.fhemwiki.de/wiki/Modul_Alarmanlage, konkret: http://www.fhemwiki.de/wiki/Modul_Alarmanlage#Zustandspr.C3.BCfung
Vorteil eine eine komfortable Oberfläche, insbesondere wenn Du weitere Alarmierungen und Benachrichtigungen bauen willst.
VG
Sven
So, erstmal Danke für die Antworten und die Hilfe.
Mit DOIF habe ich es hinbekommen. Mit den PERL-Specials bin ich bei der fortlaufenden Prüfung innerhalb eines Zeitraums gescheitert. Aber mit DOIF geht es ja wunderbar.
Folgendes habe ich gemacht:
#
#Alarm.Dachfenster.Zeit - nach 21.00 Uhr
#
define Alarm.Dachfenster.Zeit DOIF ([21:30-08:00] and [+00:15] and [HM_3CD481:state] eq "open") (set Alarm.Dachfenster on) DOELSEIF ([21:30-08:00] and [+00:15] and [HM_3CC1A6:state] eq "open") (set Alarm.Dachfenster on)
attr Alarm.Dachfenster.Zeit do always
Zwischen 21.30 und 08.00 wird der dummy "Alarm.Dachfenster" auf "on" gesetzt, wenn eines der Fenster offen ist. Dies wird alle 15 Minuten wiederholt.
Ein weiteres Notify reagiert auf den Alarm-Dummy und sendet dann eine Pushover-Nachricht.
So bequemt man sich dann doch irgendwann von der Couch und macht noch das Dachfenster zu, bevor die Schlafenszeit beginnt ;)
Sind beide Fenster geschlossen, wird auch der Alarm-dummy wieder auf "off" gesetzt.
Structure habe ich mir noch nicht angesehen, werde ich aber noch, vielleicht geht es damit noch einfacher.
Das Alarmmodul sieht auch sehr intressant aus, danke für den Tip. Werde ich mir auch noch anschauen.
Bin momentan dabei alle Fenster mit Sensoren auszustatten. Leider ist der optische Sensor echt teuer, 30€ pro Fenster..das tut schon weh.
Aber mit dem Argument "Sicherheit" steigt auch der WAF ;)