Telefonat als Auslöser für Aktionen: Unterschied zwischen den Versionen
Rince (Diskussion | Beiträge) (erster Versuch) |
(Links auf fhem Forum korrigiert; Todo-Status entfernt) |
||
Zeile 1: | Zeile 1: | ||
Im [http://forum.fhem.de/index.php/topic,13066.0.html 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 | * 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 | ||
== 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) | ||
*[ | * [[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 | * 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 == | ||
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 75: | Zeile 68: | ||
} \ | } \ | ||
} | } | ||
## Anruf beendet | ## Anruf beendet | ||
Zeile 92: | Zeile 83: | ||
</nowiki> | </nowiki> | ||
== Optimierungsmöglichkeiten == | |||
* 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 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 == | |||
==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 | * FHEM Forum: [http://forum.fhem.de/index.php/topic,13066.0.html Meine ersten zwei Notifies] | ||
[[Kategorie:Examples]] | [[Kategorie:Examples]] | ||
[[Kategorie:Code Snippets]] |
Version vom 16. Oktober 2013, 11:09 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
- FritzBox mit dem Callmonitor Helpermodul
- Fritz_Box (<=Bezeichnung im Skript)
- HM Bewegungsmelder außen (der einen unabhängigen Helligkeitswert liefert)
- CUL_HM_HM_Sen_MDIR_O_1A8306 (<=Bezeichnung im Skript)
- SamsungTV (zur Zeit noch mit dem Codeschnipsel aus dem Forum)
- STV4 (<=Bezeichnung im Skript)
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 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
- FHEM Forum: Meine ersten zwei Notifies