FHEM Forum

FHEM => Automatisierung => Thema gestartet von: swinni am 29 Januar 2015, 12:10:30

Titel: notify mit mehreren if wenn Anwesend/Abwesend und zu bestimmten Zeiten
Beitrag von: swinni am 29 Januar 2015, 12:10:30
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
Titel: Antw:notify mit mehreren if wenn Anwesend/Abwesend und zu bestimmten Zeiten
Beitrag von: Brockmann am 29 Januar 2015, 12:43:58
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.
Titel: Antw:notify mit mehreren if wenn Anwesend/Abwesend und zu bestimmten Zeiten
Beitrag von: swinni am 29 Januar 2015, 13:14:44
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 !
Titel: Antw:notify mit mehreren if wenn Anwesend/Abwesend und zu bestimmten Zeiten
Beitrag von: swinni am 30 Januar 2015, 09:50:28
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