Sprachausgabe über HomePod

Begonnen von jko, 16 Juli 2019, 18:31:56

Vorheriges Thema - Nächstes Thema

jko

Hallo,

ich habe eine Sprachausgabe über den HomePod realisiert und möchte hier einmal dokumentieren, wie man das ans fliegen bringen kann.

Das ganze basiert natürlich auf dem Modul Text2Speech. Die Ausgabe des gesprochenen wird auf einen HomePod (oder jedes andere "Airplay"-fähige Gerät) umgeleitet. Dazu dient "Node AirTunes", allerdings tut das nur mit ein paar Bugfixen. Die Basis dazu habe ich beim "BabelPod" gefunden: http://faden.me/2018/03/18/babelpod.html

Als Basis für FHEM dient mir ein Raspberry PI, das folgende gilt also entsprechend für einen solchen.

Zunächst brauchen wir ein FFMPEG, welches wir wie folgt installieren können:


sudo apt-get install mplayer
sudo apt-get install ffmpeg


Anschließend brauchen wir Node AirTunes:


git clone https://github.com/afaden/node_airtunes.git
cd node_airtunes
git checkout fix_port_0_error
node-gyp configure build


Das klont das git-repository und checked den branch mit einem wichtigen Bugfix aus. Anschließend wird das Modul kompiliert.

In meiner Installation fehlte noch eine Abhängigkeit, die man mit

npm install optimist

installiert.
Prinzipiell sollte nun ein erster Test möglich sein. Um an die nötigen Informationen zu kommen, empfiehlt sich noch die Installation der avahi-utils mit

sudo apt-get avahi-utils

Das installiert das tool avahi-browse, das wir nun nutzen können, um uns alle AirPlay Empfänger anzeigen zu lassen:

avahi-browse -r _raop._tcp

Die Ausgabe zeigt alle Geräte an, so z.B. auch meinen HomePod:

Zitat=  wlan0 IPv4 D4A33D80129F@WohnPod                          AirTunes Remote Audio local
   hostname = [WohnPod.local]
   address = [192.168.3.49]
   port = [7000]
   txt = ["vv=2" "ov=12.3" "vs=383.1.3" "vn=65537" "tp=UDP" "pk=..." "am=AudioAccessory1,1" "md=0,1,2" "sf=0x18404" "ft=0x4A7FCA00,0x4156BD0" "et=0,3,5" "da=true" "cn=0,1,2,3"]

Man sieht die IP-Adresse und auch den Port. Diese Informationen braucht man nun für einen ersten Test:


cd examples
node play_ffmpeg.js --host 192.168.3.49 --port 7000 --ffmpeg /usr/bin/ffmpeg


Das sollte dazu führen, dass man ein nettes Demo hört. Sollte das der Fall sein, so kann man mit dem Einbinden in FHEM beginnen. Dazu habe ich mir ein shell-script gebastelt, welches in Text2Speech dann verwendet wird:


IP=`getent hosts wohnpod.fritz.box | awk '{ print $1 }'`
echo /usr/bin/node /home/pi/node_airtunes/examples/play_ffmpeg.js --host $IP --port 7000 --ffmpeg /usr/bin/ffmpeg --file /opt/fhem/cache/text.mp3
/usr/bin/node /home/pi/node_airtunes/examples/play_ffmpeg.js --host $IP --port 7000 --ffmpeg /usr/bin/ffmpeg --file /opt/fhem/cache/text.mp3


Das script nutzt den DNS-Namen meines HomePod um seine IP zu ermitteln. Ich mag DHCP, entsprechend mag ich keinen fixierten IPs. Der Name muss natürlich angepasst werden! Evtl. auch der Port. Bei mir liegt das Script aus Bequemlichkeit im "examples"-Verzeichnis von node_aitrunes.

In FHEM dann Text2Speech definieren, hier als "Raw export"

defmod tts Text2Speech hw=1.0
attr tts TTS_Language Deutsch
attr tts TTS_MplayerCall /home/pi/node_airtunes/examples/talkToAirplay.sh
attr tts TTS_OutputFile text.mp3
attr tts TTS_UseMP3Wrap 1
attr tts TTS_VolumeAdjust 75


Das "hw=1.0" spielt keine Rolle, weil wir ja keine lokale Audio-Ausgabe machen.
TTS_MplayerCall zeigt auf das script oben. Lieder gibt Text2Speech in der aktuellen Version den Parameter auf die Audio-Datei nicht mehr mit, weshalb das Attribut TTS_OutputFile gesetzt ist. Der Wert muss auf dem im script verwendeten passen. Für alle anderen Attribute darf ich auf die Text2Speech Doku verweisen. Insbesondere sollte mp3wrap installiert werden, wenn es genutzt wird.

Bei mir sagt der HomePod so z.B. an, wer gerade anruft, wenn das Telefon klingelt...

viel Spass damit!
Jürgen

kofri

Das klingt ja sehr interessant.
Schade, dass AirPlay 2 noch nicht entschlüsselt ist. Das würde die Ansage Multiroom fähig machen.

jko

Zitat von: kofri am 18 Juli 2019, 23:22:55
Das klingt ja sehr interessant.
Schade, dass AirPlay 2 noch nicht entschlüsselt ist. Das würde die Ansage Multiroom fähig machen.
Hi,

Prinzipiell geht das auch hiermit, halt nicht so effizient. Aber man kann mehrere Geräte hinzufügen, dazu müsste man den Node-Client entsprechen anpassen, ich nutze hier ja nur das sample....

viele Grüße
Jürgen

elfnulleins

Hi,

das klingt alles sehr interessant. Danke für den Beitrag!
Eine kurze Frage: Wie hoch ist denn die Latenz zwischen dem Auslösen der Wiedergabe in FHEM und der tatsächlichen akustischen Wiedergabe? Hintergrund: Ich habe meine Türklingel aktuell über den MP3-Gong von Homematic umgesetzt. Die Latenz ist hier schätzungsweise so 3 bis 4 Sekunden, was mich doch etwas stört. Daher überlege ich diesen durch die AirPlay-Variante abzulösen.

Besten Dank und LG
Mario

jko

Hi,

Ich höre den Namen, wer anruft beim zweiten Klingeln des Telefons...

Anjo1979

Hallo zusammen...

sehr gern würde ich dies so umsetzen, wie jko. Leider komme ich nicht weiter. Bin dem Installationsguide für airtunes gefolgt.

Wenn ich "node play_ffmpeg.js --host 192.168.xxx.xx --port 7000 --ffmpeg /usr/bin/ffmpeg" ausführe erhalte ich nur: "adding device: 192.168.xxx.xx:7000". Weiter passiert nichts, keine Ton, keine Fehlermeldung... Nada... Als Ziel habe ich einen Homepod (allerdings IOS 13.2) als auch eine AppleTV probiert, gleiches Ergebnis.

Als Betriebssystem verwende ich raspbian lite. Hardware: raspberry pi 4

Wer kann mir weiterhelfen? Muss ich noch weitere Einstellungen vornehmen?

Ich hoffe es kann mir jemand helfen. Danke!

Grüße

jko

Hi,

Den richtigen branch ausgecheckt?

Anjo1979

Sorry, was meinst du mit branch?

jko

Ziehe erster Beitrag:

Git checkout.....

Sonst geht es nicht...

Anjo1979

Ich gebe es auf... Bekomme es nicht zum Laufen...

Homepege von Author für "BabelPod" beachtet. Nodeversion 9.8 installiert. Danach:


sudo apt-get install mplayer
sudo apt-get install ffmpeg



git clone https://github.com/afaden/node_airtunes.git
cd node_airtunes
git checkout fix_port_0_error
node-gyp configure build


Zusätzlich zu optimist wollte er noch async. Alle Installationen laufen durch. Bekomme keine Fehlermeldung.

Keine Ahnung woran es liegt.

Felix_86

Hallo zusammen,

gibt es hierzu weiteren Support?

Ich habe die Anleitung gestern bei einem Kumpel ausgeführt, komme allerdings (auch nur) bis zu "adding device: 192.168.2.130:7000" und danach passiert nichts.
Mittels tcpdump habe ich versucht Kommunikation zwischen dem Raspberry 3b und dem Homepod ausfindig zu machen. Da kommt aber nichts. Aus meiner Sicht schickt der Raspberry nichts - weder an den Homepod direkt, noch via Apple Airplay Protokoll.

Der Homepod hat zwischenzeitlich die iOS Version 13.3.

Läuft die Verbindung bei jemandem in gleicher Konstellation und kann Tipps geben?

Besten Dank.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT, SD_GT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

jko

Hallo,

Bei mir läuft das, auch unter 13.3.

Bitte mal mittels BonjourBrowser schauen, ob IP und Port passen...

Felix_86

Hallo,

ja, IP und Port passen. Ist das einzige Gerät das mittels "avahi-browse -r _raop._tcp" angezeigt wird.

Komisch finde ich eben, dass im tcpdump keine Kommunikation sichtbar ist. Selbst wenn IP und Port nicht stimmen, müsste der Raspberry etwas schicken - tut er in meinen Augen aber nicht.
Daher vermute ich, ging bei der Installation schon etwas schief, wodurch die Scripte und Aufrufe nicht funktionsfähig sind.

Danke vorab.
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT, SD_GT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

jko

Hi,

Wichtig ist, den richtigen branch zu verwenden, weil bestimmt Port 7000 verwendet wird. Der branch fixt ein Problem mit "Nuller Ports"...
Ansonsten bitte mal checken, ob die mp3 Datei im samples Ordner liegt? Und den Pfad von ffmpg checken?

Lanhydrock

#14
Hallo Jürgen,

vielen Dank für Deine Mühe; hier leider auch kein Erfolg, selbe Symptomatik: Alles läuft fehlerfrei durch, dann "adding device...", aber kein Ton aus dem Homepod.

Magst Du mal kurz mitteilen, welche Versionen Du im Einsatz hast, bitte. Vielen Dank.

npm -v
node -v
nodejs -v
node-gyp -v
npm -g ls | grep airtunes
- FHEMs in VM @ Mac mini & RPi, fhem2fhem
- Homematic, 1wire, Hue & Lightify & Tradfri & Xiaomi & Oblo via zigbee2mqtt/Conbee II, Rademacher DuoFern, Roto i8 & Hunter Ventile via HM-LC-Sw4-DR
- Interdomo GBK (via Siemens ozw672; dank HTTPMOD, lest Post #33765)
- homebridge(-fhem), Grafana, DBLog