SNOM

Aus FHEMWiki
Wechseln zu: Navigation, Suche

Durchsage

Ausgangslage: Ein FHEM mit funktionierender Sprachausgabe (Text2Speech) über den angeschlossenen Lautsprecher. Ziel: Die gleiche Durchsage auch auf allen SNOM 370 Telefonen abspielen.

Da die Snom-Geräte Audiomulticast unterstützen kommt dieses hier zum Einsatz.

Aktiviert wird es in den Einstellungen des Telefons. Hierzu muss am Telefon mit dem Knopf Settings das Einstellungsmenü aufgerufen werden. Hier kann man über den Eintrag Wartung und dann den Eintrag Administratormodus das Webfrontend freischalten. Nun geht es vom PC aus mit dem Browser weiter. Dazu die IP des Telefons eingeben und unter Erweitert den Reiter SIP/RTP anwählen. Ganz unten gibt es nun eine Tabelle namens Multicast wo wir die Multicast Unterstützung auf An setzen. Darunter geben wir die Multicast IP Adresse sowie den dazugehörigen Port ein. Als Multicast IP kann man sich irgendwas im Range 224.0.0.0 - 239.255.255.255 aussuchen. Hier gibt es keine Abhängigkeit vom lokalen Subnetz - Wieso, Weshalb und Warum findet ihr in den RFC's [1].

Dann geht es auf dem Raspberry Pi weiter - hier benötigt man FFMPEG. Ihr müsst es selbst kompilieren da in dem Raspbian Paket keine Filter eingebaut sind. Dazu findet ihr alles unter [2].

Den ersten Test startet ihr mit folgendem Befehl: Bitte denkt daran die IP, den Port sowie die MP3 Datei (auf eine vorhandene) anzupassen.

ffmpeg -re -i "/opt/fhem/cache/d08c473c8d5f7f1b7ac252ce80d0b12a.mp3" -filter_complex 'aresample=8000,asetnsamples=n=160,volume=0.25' -acodec pcm_mulaw -ac 1 -vn -f rtp rtp://IP:PORT

Um es in FHEM aufrufen zu dürfen benötigt ihr einen SUDO Eintrag:

fhem    ALL=NOPASSWD: /usr/local/bin/ffmpeg *

Unter FHEM ist es z.B. aus einem Notify wie folgt ansprechbar:

system('ffmpeg -re -i /opt/fhem/"' . $value . '" -filter_complex "aresample=8000,asetnsamples=n=160,volume=0.25" -acodec pcm_mulaw -ac 1 -vn -f rtp rtp://IP:PORT');

Damit das Text2Speech Modul ein passendes Notify abwirft müsst ihr an den Quellcode von dem Modul: Dazu öffnet ihr die Datei 98_Text2Speech.pm und springt auf Zeile 619 - das ist das Ende der Routine sub Text2Speech_BuildMplayerCmdString($$) { und fügt vor dem return $cmd; folgende Zeile ein:

readingsSingleUpdate($hash, "file", $file, 1);

Nun wird bei jedem Zusammenbau des Mplayer Kommandos der Dateiname an FHEM übergeben und kann dort über ein Notify ausgewertet werden.

Nun noch das Notify anlegen:

MyTTS {
 my $command = (substr($EVENT, 0, 4));;
 my $value = (substr($EVENT, 6,(length($EVENT)-1)));;
 Log 1, "$EVENT";;
 if($command eq "file") {
   Log 1, "$value";;
   system('ffmpeg -re -i /opt/fhem/"' . $value . '" -filter_complex "aresample=8000,asetnsamples=n=160,volume=0.25" -acodec pcm_mulaw -ac 1 -vn -f rtp rtp://IP:PORT');
 }
}