Telefonat als Auslöser für Aktionen: Unterschied zwischen den Versionen
(Artikel als Stub mit Verweis auf den entsprechenden Thread im Forum angelegt.) |
K (Templateverwendung für commandref-Link) |
||
(4 dazwischenliegende Versionen von 4 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 | |||
* 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: | |||
** 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 == | ||
* | * [http://fhem.de/commandref.html#FB_CALLMONITOR FritzBox mit dem Callmonitor Helpermodul] | ||
** 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) | |||
* SamsungTV (zur Zeit noch mit dem [http://forum.fhem.de/index.php/topic,12988.0 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 | |||
<nowiki> | |||
#### 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";;\ | |||
}\ | |||
}\ | |||
} | |||
</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 | |||
== Dank == | |||
Besonderer Dank geht an Puschel, der doch reichlich Geduld bewiesen hat :) | |||
{{ | == Links == | ||
* FHEM Forum: {{Link2Forum|Topic=13066|LinkText=Meine ersten zwei Notifies}} | |||
[[Kategorie:Examples]] | [[Kategorie:Examples]] | ||
[[Kategorie:Code Snippets]] |
Aktuelle Version vom 17. Oktober 2018, 10: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
- 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 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
- FHEM Forum: Meine ersten zwei Notifies