SNOM: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 1: Zeile 1:
== Durchsage ==
== Durchsage ==
FFMPEG bauen:  
Ausgangslage: Ein FHEM mit funktionierender Sprachausgabe (Text2Speech) über den angeschlossenen Lautsprecher.
http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/
Ziel: Die gleiche Durchsage auch auf allen SNOM 370 Telefonden abspielen.


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


erster test: 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
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 '''Ewetiert''' 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 [https://tools.ietf.org/html/rfc5771].


Dann geht es auf dem Raspberry Pi weiter - hier benötigt man FFMPEG. Ihr müsst es selbst kompilieren da in dem raspian Paket keine Filter eingebaut sind. Dazu findet ihr alles unter [http://www.jeffreythompson.org/blog/2014/11/13/installing-ffmpeg-for-raspberry-pi/].


Dann noch sudo freigeben:
Den ersten Test startet ihr mit folgendem Befehl: Bitte denkt daran die IP, den Port sowie die MP3 Datei (auf eine vorhandene) anzupassen.
fhem   ALL=NOPASSWD: /usr/local/bin/ffmpeg *
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


Ein notify mit dateinamen erzeugen lassen:
Um es in FHEM aufrufen zu dürfen benötigt ihr einen SUDO Eintrag:
fhem    ALL=NOPASSWD: /usr/local/bin/ffmpeg *


    readingsSingleUpdate($hash, "file", $file, 1); in 98_Text2Speech.pm einbauen
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');


<nowiki>  if(-e $file) { # Datei existiert jetzt
Damit das Text2Speech Modul ein passendes Notify abwirft müsst ihr an den Quellcode von dem Modul:
    readingsSingleUpdate($hash, "file", $file, 1);
Dazu öffnet ihr die Datei 98_Text2Speech.pm und springt auf Zeile 619 - Dass ist das Ende der Routine ''sub Text2Speech_BuildMplayerCmdString($$) {'' und fügt vor dem '''return $cmd;''' folgende Zeile ein:
    $cmd = Text2Speech_BuildMplayerCmdString($hash, $file);
readingsSingleUpdate($hash, "file", $file, 1);
    Log3 $hash->{NAME}, 4, "Text2Speech: " .$cmd;
Nun wird bei jedem Zusammenbau des Mplayer Kommandos der Dateiname an FHEM übergeben und kann dort über ein Notify ausgewertet werden.
    system($cmd);
 
  }
Nun noch das Notify anlegen:
</nowiki>


und das Notify anlegen:
MyTTS {
<nowiki>
MyTTS {
   my $command = (substr($EVENT, 0, 4));;
   my $command = (substr($EVENT, 0, 4));;
   my $value = (substr($EVENT, 6,(length($EVENT)-1)));;
   my $value = (substr($EVENT, 6,(length($EVENT)-1)));;
Zeile 34: Zeile 36:
   }
   }


}
}
</nowiki>
 
Bei mir ist die Podcast IP:PORT 238.255.255.252:5432 im 192.168er Netz...

Version vom 1. April 2016, 14:58 Uhr

Durchsage

Ausgangslage: Ein FHEM mit funktionierender Sprachausgabe (Text2Speech) über den angeschlossenen Lautsprecher. Ziel: Die gleiche Durchsage auch auf allen SNOM 370 Telefonden 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 Ewetiert 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 raspian 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 - Dass 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');
 }
}