Telefonat als Auslöser für Aktionen: Unterschied zwischen den Versionen

Aus FHEMWiki
(erster Versuch)
K (Templateverwendung für commandref-Link)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
Im {{Link2Forum|Topic=13066|LinkText=Forum}} wurden in einer ausführlichen Diskussion Möglichkeiten beschrieben, mit einem Telefonanruf bestimmte Aktionen auszulösen. Dabei geht es unter anderem auch um
=In Bearbeitung=
Zur Zeit nur ein Verweis auf einen Thread im Forum: [http://forum.fhem.de/index.php?t=msg&goto=79817&rid=932] - eine ausführliche Diskussion über die Möglichkeiten, mit einem Telefonanruf bestimmte Aktionen auszulösen. Dabei geht es unter anderem auch um
* Signalisierung eines Anrufs durch Licht
* Signalisierung eines Anrufs durch Licht
* Aktionen abhängig von der Rufnummer des Anrufers
* Aktionen abhängig von der Rufnummer des Anrufers
* FHEM auf Fritz!Box und/oder Raspberry Pi
* FHEM auf Fritz!Box und/oder Raspberry Pi


Diese Informationen und Codeschnippsel sollen Wiki-gerecht aufbereitet hier zur Verfügung gestellt werden.
== Beschreibung ==
 
* Eine [[AVM_Fritz!Box|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:
==Beschreibung==
** der Fernseher das laufende Programm pausieren (beim stumm-schalten verpasste man ja den Film ;) )
*Eine [[AVM_Fritz!Box]] dient als Zentrale für zwei Familien mit jeweils eigener Rufnummer
** das Licht angehen (damit man im Dunkeln das Telefon leichter findet, vorausgesetzt es ist überhaupt dunkel)
*FHEM läuft auf einem Raspberry Pi
* Nach dem Telefonat soll:
*Bei einkommenden Anrufen auf eine der beiden Nummern (im Skript die 1234567) soll:
** ein 10-sekündiger Timer laufen (damit man Zeit hat sich wieder gemütlich vor den Fernseher zu setzen)
**der Fernseher das laufende Programm pausieren (beim stumm-schalten verpasste man ja den Film ;) )
** der Fernseher weiterlaufen
**das Licht angehen (damit man im Dunkeln das Telefon leichter findet, vorausgesetzt es ist überhaupt dunkel)
** das Licht seinen Ursprungszustand wieder einnehmen (=sollte es vor dem Telefonat an gewesen sein, soll es nach dem Telefonat natürlich an bleiben)
*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==
== Eingesetzte Geräte ==
*[http://fhem.de/commandref.html#FB_CALLMONITOR FritzBox mit dem Callmonitor Helpermodul]
* [http://fhem.de/commandref.html#FB_CALLMONITOR FritzBox mit dem Callmonitor Helpermodul]
**Fritz_Box (<=Bezeichnung im Skript)
** Fritz_Box (<=Bezeichnung im Skript)
*[http://www.fhemwiki.de/wiki/HM-Sen-MDIR-O_Funk-IR-Bewegungsmelder_au%C3%9Fen HM Bewegungsmelder außen] (der einen unabhängigen Helligkeitswert liefert)
* [[HM-Sen-MDIR-O Funk-IR-Bewegungsmelder außen|HM Bewegungsmelder außen]] (der einen unabhängigen Helligkeitswert liefert)
**CUL_HM_HM_Sen_MDIR_O_1A8306 (<=Bezeichnung im Skript)
** CUL_HM_HM_Sen_MDIR_O_1A8306 (<=Bezeichnung im Skript)
*SamsungTV (zur Zeit noch mit dem [http://forum.fhem.de/index.php?t=msg&th=12988&start=0&rid=0 Codeschnipsel] aus dem Forum)
* SamsungTV (zur Zeit noch mit dem [http://forum.fhem.de/index.php/topic,12988.0 Codeschnipsel] aus dem Forum)
**STV4 (<=Bezeichnung im Skript)
** STV4 (<=Bezeichnung im Skript)




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


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




==Code==
== Code ==
In der fhem.cfg
In der fhem.cfg
  <nowiki>
  <nowiki>
Zeile 60: Zeile 54:
define Licht_Alt dummy
define Licht_Alt dummy
define Licht_Neu dummy
define Licht_Neu dummy


## Jemand ruft mich an
## Jemand ruft mich an
Zeile 67: Zeile 60:
   my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
   my $Helligkeit=(ReadingsVal("CUL_HM_HM_Sen_MDIR_O_1A8306","brightness",99));;\
   my $Licht_An=Value("OG_wz_WS_LICHT");;\
   my $Licht_An=Value("OG_wz_WS_LICHT");;\
   if ($number == 1234567) { \
   if ($number == "1234567") { \
     fhem "set STV4 PAUSE";;\
     fhem "set STV4 PAUSE";;\
     if ($Helligkeit <= 100) { \
     if ($Helligkeit <= 100) { \
Zeile 75: Zeile 68:
   } \
   } \
}
}


## Anruf beendet
## Anruf beendet
Zeile 83: Zeile 74:
   my $Licht_Neu=Value("OG_wz_WS_LICHT");;\
   my $Licht_Neu=Value("OG_wz_WS_LICHT");;\
   my $Licht_Alt=Value("Licht_Alt");;\
   my $Licht_Alt=Value("Licht_Alt");;\
   if ($number == 1234567) { \
   if ($number == "1234567") { \
     fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
     fhem "define Latenz2 at +00:00:10 set STV4 PLAY";;\
     if ($Licht_Alt ne $Licht_Neu) { \
     if ($Licht_Alt ne $Licht_Neu) { \
Zeile 92: Zeile 83:
</nowiki>
</nowiki>


== Optimierungsmöglichkeiten ==
* der Lichtzustand könnte über das Modul {{Link2CmdRef|Anker=LightScene|Label=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 {{Link2CmdRef|Anker=PRESENCE|Label=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


==Optimierungsmöglichkeiten==
== Dank ==
*der Lichtzustand könnte über [http://fhem.de/commandref.html#LightScene 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 ([http://fhem.de/commandref.html#PRESENCE 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 2te 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 :)
Besonderer Dank geht an Puschel, der doch reichlich Geduld bewiesen hat :)


== Links ==
== Links ==
* FHEM Forum: [http://forum.fhem.de/index.php?t=msg&goto=79817&rid=932 Meine ersten zwei Notifies]
* FHEM Forum: {{Link2Forum|Topic=13066|LinkText=Meine ersten zwei Notifies}}
 
 
{{Todo|Informationen aus dem Forenthread konsolidieren und für das Wiki aufbereiten.}}


[[Kategorie:Examples]]
[[Kategorie:Examples]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 17. Oktober 2018, 11:01 Uhr

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