Wer kennt es nicht: Man sitzt gemütlich auf der Couch und das Telefon klingelt. Aber ist es wieder nur ein nerviger Werbeanruf und das Aufstehen lohnt sich sowieso nicht, oder ruft jemand aus der Verwandtschaft an?! Bevor man aufsteht, weiß man zukünftig Bescheid, da mithilfe von Sonos und der FritzBox eine Anruferansage möglich ist. Wie das funktioniert, möchte ich euch nachfolgend Schritt für Schritt erklären.
Die Voraussetzungen für die Anruferansage
Damit die Anruferansage funktioniert, werden 3 wesentliche Punkte benötigt. Ein Sonos Lautsprecher (oder anderer, über FHEM steuerbarer Lautsprecher), eine FritzBox und FHEM.
Letzte Aktualisierung am 25.09.2023 um 12:05 Uhr | Werbung | Bilder: Amazon Product Advertising API
Wer zu diesem Zeitpunkt noch keine lauffähige FHEM Installation auf einem Raspberry Pi besitzt, der kann sie sich Step-by-Step nach unserer Anleitung installieren: Howto: FHEM Server auf Raspberry einrichten
FritzBox und FHEM verbinden
Damit die FritzBox gleich mit FHEM kommunizieren kann, müssen diese vorab miteinander verbunden werden. Dazu ist es notwendig, weitere Module über SSH auf dem Raspberry Pi zu installieren. Also per SSH eingeloggt und folgende Pakete nachinstallieren:
sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl
Nach der Installation wird in FHEM die FritzBox definiert. Dazu wird der Code in die obere Zeile eingefügt und mit Enter bestätigt. Ich habe meine Definition als fritzbox bezeichnet. Hier ist ein beliebiger Name möglich.
define fritzbox FRITZBOX

Wenn die FritzBox nicht unter der Standard-IP erreichbar ist, muss noch die IP-Adresse entsprechend konfiguriert werden. Sollte sie über fritz.box erreichbar sein, ist dieser Schritt nicht notwendig.
define fritzbox FRITZBOX IP-ADRESSE
Ist die Weboberfläche der FritzBox abgesichert (durch Passwort und/oder Benutzernamen), so müssen auch diese Daten eingefügt werden.
attr fritzbox boxUser Benutzername
set fritzbox password Passwort
Ist die Oberfläche nur durch ein Passwort gesichert, genügt der password set Befehl.
Damit die FritzBox auch Kommandos von FHEM entgegen nimmt, wird die TR064 Schnittstelle aktiviert.
attr fritzbox allowTR064Command 1
Callmonitor aktivieren
Grundsätzlich sei zu sagen: Möchte man anhand der eingehenden Rufnummer filtern, benötigt man den Callmonitor nicht zwingend. Nutzt man hingegen das interne Telefonbuch der FritzBox, da man auch bspw. das FritzFon besitzt, empfiehlt es sich den Callmonitor zu aktivieren, da dann der Name des Anrufers in FHEM angezeigt wird.
Also zunächst den Callmonitor definieren. Die IP-Adresse wird entsprechend angepasst, die Standard-IP ist die 192.168.178.1. Der Name Telefon kann wieder beliebig gewählt werden.
define Telefon FB_CALLMONITOR 10.0.0.1
Nach einem Testanruf auf die eigene Rufnummer sollte nun schon entsprechend die Rufnummer angezeigt werden.

Soll nun, wie bei mir, der Anrufername des internen Telefonbuches angezeigt werden, muss nun das remote-phonebook aktiviert werden. Dazu die beiden Befehle nacheinander absetzen.
attr Telefon fritzbox-remote-phonebook 1
attr Telefon fritzbox-remote-phonebook-via tr064
Wie bereits schon beim Verbinden der FritzBox muss nun noch das Passwort und/oder der Username angegeben werden.
set Telefon Password PASSWORT
set Telefon fritzbox-user USER
Anruferansage
Im letzten Schritt muss nun noch das notify definiert werden. Hierzu habe ich folgenden Code zusammengestellt, sodass ich über meine Sonos Lautsprecher eine Ausgabe erhalte.
define Anruferansage notify Telefon:event:.ring {\ my $name=(ReadingsVal("Telefon","external_name",0));;;;\ if($name eq "Michael") {fhem ("set Sonos_Wohnzimmer Speak 30 de |notify| Michael ruft an.")};;;;\ if($name eq "Person1") {fhem ("set Sonos_Wohnzimmer Speak 30 de |notify| Person1 ruft an.")};;;;\ if($name eq "Person2") {fhem ("set Sonos_Wohnzimmer Speak 30 de |notify| Person2 ruft an.")};;;;\ if($name eq "Person3") {fhem ("set Sonos_Wohnzimmer Speak 30 de |notify| Person3 ruft an.")};;;;\ if($name eq "Person4") {fhem ("set Sonos_Wohnzimmer Speak 30 de |notify| Person4 ruft an.")}}
Man könnte natürlich auch andere Dinge dadurch schalten, hier kann man seinen Ideen freien Lauf lassen. Es könnte auch eine Lampe ein- und ausgeschaltet werden, die Farbe ändern und und und.
Demovideo
Letzte Aktualisierung am 25.09.2023 um 12:05 Uhr | Werbung | Bilder: Amazon Product Advertising API
Moin,
danke für die tolle Idee, da wäre ich so nicht drauf gekommen. Ich habe den Aufruf etwas abgeändert (Befehlsteil des meines DOIF), so dass der Name nun aus dem Telefonbuch gelesen wird. Das spart einige Zeilen:
my $anrufer = (ReadingsVal(„CallMonitor“,“external_name“,““));
if ($anrufer eq „unknown“) {$anrufer = „Unbekannter Anrufer“};
my $ansage = $anrufer . “ ruft an.“;
fhem („set Sonos_Wintergarten Speak 25 de |notify| „.$ansage)};
Viele Grüße
Michael
Hallo Michael,
danke für das Teilen deines Codes 🙂
Viele Grüße
Michael
Ein kleiner Fehler hat sich da eingeschlichen, sorry :-/ die geschweifte Klammer am Ende der letzten Zeile muss weg… heißt korrekt so:
fhem (“set Sonos_Wintergarten Speak 25 de |notify| “.$ansage);
Hallo Michael,
und das funktioniert?
Wie erfolgt denn die Umsetzung des Textes (Namen im Telefonbuch (Text)) in Ansage (Audio) auf dem SONOS-Lautsprecher?
Bisher kannte ich es so, daß man dafür ein TTS benötigt.
Ich gebe allerdings zu, daß ich Einsteiger in FHEM bin und nachdem die „Grundlagen“ funktionierten, wollte ich mich an dieses Orojekt trauen, da mein Telefon eine Etage höher steht und ich es abends im Erdgeschoß oft nicht höre.
Jedenfalls habe ich Dein Projekt nachgebaut und es funktioniert- nicht.
Einfach so, ohne Fehlerausgabe!
Was mache (denke) ich falsch?
Besten Dank!
Jürgen
Hallo Jürgen,
so aus dem Stegreif festzustellen, was du falsch machst, ist schwierig.
Wichtig ist, die notwendigen Pakete per SSH auf dem Raspberry Pi nach zu installieren: sudo apt-get install libjson-perl libwww-perl libsoap-lite-perl libjson-xs-perl
Ansonsten geht schonmal gar nichts. Geh am besten die Anleitung nochmal Schritt für Schritt durch, damit du sicherstellst, nichts vergessen zu haben. Genau wie ich es beschrieben habe, funktioniert es bei mir.
Viele Grüße
Michael