Telefonat als Auslöser für Aktionen

Aus FHEMWiki
Version vom 17. Oktober 2018, 10:01 Uhr von Baumbuwe (Diskussion | Beiträge) (Templateverwendung für commandref-Link)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Im Forum wurden in einer ausführlichen Diskussion Möglichkeiten beschrieben, mit einem Telefonanruf bestimmte Aktionen auszulösen. Dabei geht es unter anderem auch um

  • Signalisierung eines Anrufs durch Licht
  • Aktionen abhängig von der Rufnummer des Anrufers
  • FHEM auf Fritz!Box und/oder Raspberry Pi

Beschreibung

  • Eine FritzBox dient als Zentrale für zwei Familien mit jeweils eigener Rufnummer
  • FHEM läuft auf einem Raspberry Pi
  • Bei einkommenden Anrufen auf eine der beiden Nummern (im Skript die 1234567) soll:
    • der Fernseher das laufende Programm pausieren (beim stumm-schalten verpasste man ja den Film ;) )
    • das Licht angehen (damit man im Dunkeln das Telefon leichter findet, vorausgesetzt es ist überhaupt dunkel)
  • Nach dem Telefonat soll:
    • ein 10-sekündiger Timer laufen (damit man Zeit hat sich wieder gemütlich vor den Fernseher zu setzen)
    • der Fernseher weiterlaufen
    • das Licht seinen Ursprungszustand wieder einnehmen (=sollte es vor dem Telefonat an gewesen sein, soll es nach dem Telefonat natürlich an bleiben)


Eingesetzte Geräte


So funktioniert es

Anruf beginnt

  • da lokale Variablen nur innerhalb eines Notifies Gültigkeit haben, werden für den Lichtstatus zwei Dummy-Devices eingerichtet
  • ein Notify wird vom Callmonitor getriggert
  • die Zielrufnummer wird geprüft (siehe oben, 2 Familien, 2 Telefonnummern, 1 FritzBox)
  • die Helligkeit wird ausgelesen
  • der Status vom Licht wird erfasst
  • Prüfung, ob Telefonat für die richtige Familie ist (läutet es auf der anderen Nummer, interessiert es nicht)
  • TV Pause Befehl
  • prüfen ob die Helligkeit einen Schwellenwert unterschreitet (100 hat sich in meinem Fall als guter Wert herausgestellt)
  • das Dummy Device wird mit dem aktuellen Lichtzustand gefüttert
  • das Licht wird eingeschaltet

Anruf beendet

  • Notify auf beenden des Anrufs
  • der Lichtzustand jetzt wird gesichert
  • der alte Lichtzustand wird vom Dummy Device abgefragt
  • Prüfung ob das Telefonat mit der richtigen Nummer gehalten wurde (=das gleiche wie oben auch)
  • mit 10 Sekunden Verzögerung geht der Fernseher wieder auf Play
  • Prüfung, ob der alte Lichtzustand nicht identisch mit dem Neuen ist
  • mit 10 Sekunden Verzögerung Licht aus


Code

In der fhem.cfg

#### Meine eigenen Dummys
define Licht_Alt dummy
define Licht_Neu dummy

## Jemand ruft mich an
define TelefonAN notify Fritz_Box:event:.ring { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
  my $Licht_An=Value("OG_wz_WS_LICHT");;\
  if ($number == "1234567") { \
    fhem "set STV4 PAUSE";;\
    if ($Helligkeit <= 100) { \
      fhem ("set Licht_Alt on") if (($Licht_An) eq "on");;\
      fhem ("set OG_wz_WS_LICHT on") if (($Licht_An) ne "on");;\
    } \
  } \
}

## Anruf beendet
define TelefonAUS notify Fritz_Box:event:.disconnect { \
  my $number=(ReadingsVal("Fritz_Box","internal_number",99));;\
  my $Licht_Neu=Value("OG_wz_WS_LICHT");;\
  my $Licht_Alt=Value("Licht_Alt");;\
  if ($number == "1234567") { \
    fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
    if ($Licht_Alt ne $Licht_Neu) { \
      fhem "define Latenz at +00:00:10 set OG_wz_WS_LICHT off";;\
    }\
  }\
}

Optimierungsmöglichkeiten

  • der Lichtzustand könnte über das Modul LightScene eleganter gelöst werden
    • nämlich den Zustand speichern, am Schluss wieder laden; könnte so auch Dimmer und mehrere Lichter elegant erfassen
  • Prüfung, ob der Fernseher überhaupt eingeschaltet ist PRESENCE auf die IP vom TV), um Fehlermeldungen im Log zu vermeiden(ist er nämlich aus, gibt es eine Fehlermeldung im Log, dass nicht auf Play/Pause geschaltet werden kann)
  • das .disconnect ist suboptimal, wenn man selber einen Anruf getätigt hat (da greift nur das zweite Notify, es lässt also auf den laufenden Fernseher einen Play Befehl los, was eine Timeshift-Einblendung im laufenden Bild erzeugt;
    • ist nur ein optisches Problem, aber dennoch ist es halt da

Dank

Besonderer Dank geht an Puschel, der doch reichlich Geduld bewiesen hat :)

Links