Hallo zusammen,
da dies mein erster Beitrag hier im Forum ist, ich aber bereits jetzt schon einiges gelesen habe und mir das Forum und das Wiki bisher immer hilfreich waren, erst mal ein kurzes Hallo und Danke :D
Aktuell läuft FHEM auf meinem Raspberry und kommuniziert vorerst nur mit einem HM LAN-Adapter.
An diesem sind zwei HM-SEC-SCO und ein HM-SEC-SC2 gepairt.
Über Tasker habe ich eine An-/Abwesenheitsmeldung per HTTP Post,
ob meine Frau oder ich zu Hause bzw. nicht zu Hause sind (WLAN verbunden/nicht verbunden).
Als Anwensenheitspürfung habe ich uns dafür als Roommate in Residents aufgeteilt.
Eltern = rgr_Eltern
Jetzt hätte ich gerne, dass bei folgenden Szenarien per notify eine Meldung (per Pushover) erfolgen soll:
1. Wenn wir beide nicht zu Hause sind (rgr_Eltern = absent), soll immer eine Nachricht raus gehen.
2. Wenn wir zu Hause sind, und es ist zwischen 21 Uhr und 5:30 Uhr oder zwischen 6:01 und 7:30, soll ebenfalls eine Nachricht raus gehen.
2a. Im Umkehrschluss soll also keine Nachricht raus gehen wenn es zwischen 5:31 und 6:00 Uhr bzw. nach 7:30 ist, wenn mindestens einer Anwesend sind.
Da ich bisher an einer Zusammenführung der if's scheitere, habe ich aus, lauter Not, für meine Szenarien drei notifiys definiert, aber das ist ja nicht der elegante Weg...
Meine bisherigen Versuche das alles zu verschachteln sind nämlich kläglich gescheitert.
Deshalb die Frage in die Runde ob ich die am Besten wie in meinem Codebeispiel zusammen bekomme.
define Haus.PushoverEingangstuerAlarm notify Haus.TuerVorne:open {
my $now = sprintf("%%02d:%%02d",$hour,$min);
my $eltern = Value("rgr_Eltern");
if ($eltern eq "home") {
if (($now gt "21:00:00") || ($now lt "05:30:00")) || (($now gt "06:00:00") || ($now lt "07:31:00")) {
system ("curl -s -F 'token=xxx' -F 'user=xxx' -F 'priority=1' -F 'sound=siren' -F 'message=Alarm Haustür\nTüröffnung Vorne !' https://api.pushover.net/1/messages.json") ;
}
}
if ($eltern eq "absent") {
system ("curl -s -F 'token=xxx' -F 'user=xxx' -F 'priority=1' -F 'sound=siren' -F 'message=Alarm Haustür\nTüröffnung Vorne !' https://api.pushover.net/1/messages.json") ;
}
}
Als weitere Herausforderung möchte ich dann auch noch das Wochenende mit einbinden, und hier andere Zeiten definieren...
Danke schon mal im Voraus für Eure Unterstützung und viele Grüße,
Sven
Hast Du Dir schon mal DOIF angeschaut?
Da könnte man das (in etwa) so machen:
define Haus.PushoverEingangstuerAlarm DOIF ([Haus.TuerVorne] eq "open" and ([rgr_Eltern] eq "absent" or ([rgr_Eltern] eq "home" and ([21:00-05:30] or [06:00-07:30])))) (pushover...)
Ein, zwei der Klammern sind vermutlich überflüssig, aber ich setze lieber eine zuviel als eine zuwenig. ;)
Übrigens gibt es für Pushover ein eigenes Modul, so dass Du nicht jedes Mal so einen länglichen Systemaufruf absetzen musst.
Hallo Brockmann,
oh, mit DOIF habe ich es noch nicht probiert, werde ich gleich mal testen.
Und der Hinweis auf das Pushover Modul ist genial !!
Habe das Modul jetzt mal gemäß Wiki und COMMANDREF definjiert und werde es nun damit aufrufen, ist das nun auch etwas vereinfacht 8)
Danke Dir !
So, noch eione kurze Erfolgs-Rückmeldung falls jemand vor der gleichen Herausforderung stand.
Mit dem DOIF Beispiel von Brockmann hat es einwandfrei funktioniert,
auch die "Verkleinerung" der Befehle mit dem Pushover Modul klappte ohne Probleme.
Vielen Dank für die schnelle Hilfe !
Grüße,
Sven