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

Lanhydrock

Anm.:

Auch die Jungs und Mädels nebenan kämpfen gerade mit den "passenden" Versionen, um Airtunes ans Laufen zu bekommen...  ;)
https://forum.smartapfel.de/forum/thread/2722-homepod-plugin-homebridge-airtunes-radio/?pageNo=1

vor allem ab Seite 5:
https://forum.smartapfel.de/forum/thread/2722-homepod-plugin-homebridge-airtunes-radio/?pageNo=5

Werde mal auch dort weiter mitverfolgen...
- 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

Dirk070

Danke für den Link zum smarten Apfel.....lässt sich das dort beschrieben Szenario "Seit iOS 13 kann man ja über die Home App als Aktion die "Musik"-Ausgabe auf dem Homepod auswählen." auch mit FHEM bauen?
Also kann man z.B. mit Homebridge eine Aktion auf dem Homepod auslösen?

4kk

Guten Abend zusammen,

ich schließe mich hier mal an, da ich gefühlt den ganzen Tag versucht habe das gute TTS via Airplay zu laufen zu bekommen .

Ebenfalls an beide Anleitungen gehalten und zig nodejs Versionen getestet.
zu beginn die 9.8 wie gefordert.

auch bei mir kommt nur adding device...

pi@XXXX_FHEM_PI:~/node_airtunes/examples $ node play_ffmpeg.js --host 169.254.231.XXX --port 7000 --ffmpeg /usr/bin/ffmpeg
adding device: 169.254.231.XXX:7000
^C


Wenn ich aber das Skript manuell startet (konsole) kommt ein versionskonflickt....
Eventuell verbirgt sich da das Problem.

Mit "Module löschen" und neu Kompilieren usw. habe ich mich bereits versucht. Ob das alles so richtig war weiß ich aber auch nicht.


Eventuell kann ja jemand mehr damit anfangen als ich daher hier mal die Fehler Ausgabe:

Bis morgen und gute Nacht :) :o

FHEM_PI:~ $ /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
internal/modules/cjs/loader.js:807
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: The module '/home/pi/node_airtunes/build/Release/airtunes.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 59. This version of Node.js requires
NODE_MODULE_VERSION 64. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:807:18)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/home/pi/node_airtunes/lib/device_coreaudio.js:4:16)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)

4kk

update:

So lässt es sich ausführen:

Versionen verwaltet mit NVM:
https://linuxize.com/post/how-to-install-node-js-on-raspberry-pi/
FHEM_PI:~ $ nvm ls
        v7.10.1
         v8.0.0
         v8.8.1
         v8.9.0
         v8.9.4
         v9.0.0
         v9.8.0
->     v10.19.0
       v13.11.0
         system
default -> 10 (-> v10.19.0)
node -> stable (-> v13.11.0) (default)
stable -> 13.11 (-> v13.11.0) (default)
iojs -> N/A (default)
unstable -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.19.0
lts/erbium -> v12.16.1 (-> N/A)


also mit -> Now using node v10.19.0 (npm v6.13.4)

Aber jetzt gleich das nächste Problem:

FHEM_PI:~ $ ./Airplay_Einmal.sh
/usr/bin/node /home/pi/node_airtunes/examples/play_ffmpeg.js --host 192.168.1.160 --port 7000 --ffmpeg /usr/bin/ffmpeg --file /tmp/Einmal.mp3
adding device: 192.168.1.160:7000
(node:7202) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.


Eventuell klappt es ja mit dem richtigen Node bereits bei jemandem.
Wenn jemand Ideen hat würde ich mich freuen.
Nach dem Inhalt der "play_ffmpeg.js" müsste da eigentlich noch was kommen...


var airtunes = require('../lib/'),
    spawn = require('child_process').spawn,
    argv = require('optimist')
      .usage('Usage: $0 --host [host] --port [num] --ffmpeg [path] --file [path] --volume [num] --password [string]')
      .default('port', 7000)
      .default('volume', 75)
      .default('ffmpeg', '/usr/local/bin/ffmpeg')
      .default('file', './wakeup.mp3')
      .demand(['host'])
      .argv;

console.log('adding device: ' + argv.host + ':' + argv.port);
var device = airtunes.add(argv.host, argv);

// when the device is online, spawn ffmpeg to transcode the file
device.on('status', function(status) {
  console.log('status: ' + status);

  if(status !== 'ready')
    return;

  var ffmpeg = spawn(argv.ffmpeg, [
    '-i', argv.file,
    '-f', 's16le',        // PCM 16bits, little-endian
    '-ar', '44100',       // Sampling rate
    '-ac', 2,             // Stereo
    'pipe:1'              // Output on stdout
  ]);

  // pipe data to AirTunes
  ffmpeg.stdout.pipe(airtunes);

  // detect if ffmpeg was not spawned correctly
  ffmpeg.stderr.setEncoding('utf8');
  ffmpeg.stderr.on('data', function(data) {
    if(/^execvp\(\)/.test(data)) {
      console.log('failed to start ' + argv.ffmpeg);
      process.exit(1);
    }
  });
});

// monitor buffer events
airtunes.on('buffer', function(status) {
console.log('buffer ' + status);

  // after the playback ends, give some time to AirTunes devices
  if(status === 'end') {
    console.log('playback ended, waiting for AirTunes devices');
    setTimeout(function() {
      airtunes.stopAll(function() {
        console.log('end');
        process.exit();
      });
    }, 2000);
  }
});


Grüße Mike

Felix_86

Hallo zusammen,

ich kam nun mal wieder dazu, mich dem Thema bei meinem Kumpel anzunehmen. Leider sind wir nach wie vor erfolglos bei der Sprachausgabe über den HomePod.

Anbei die Ausgabe der Console. Evtl. sieht hier jemand den Fehler, damit der Kram endlich läuft.

pi@raspberrypi:~/Downloads $ git clone https://github.com/afaden/node_airtunes.git
Klone nach 'node_airtunes' ...
remote: Enumerating objects: 379, done.
remote: Total 379 (delta 0), reused 0 (delta 0), pack-reused 379
Empfange Objekte: 100% (379/379), 1.30 MiB | 2.51 MiB/s, Fertig.
Löse Unterschiede auf: 100% (182/182), Fertig.

pi@raspberrypi:~/Downloads $ cd node_airtunes
pi@raspberrypi:~/Downloads/node_airtunes $ git checkout fix_port_0_error
Branch 'fix_port_0_error' folgt nun Remote-Branch 'fix_port_0_error' von 'origin'.
Zu neuem Branch 'fix_port_0_error' gewechselt

pi@raspberrypi:~/Downloads/node_airtunes $ node-gyp configure build
module.js:559
    throw err;
    ^

Error: Cannot find module 'graceful-fs'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)

pi@raspberrypi:~/Downloads/node_airtunes $ sudo apt-get install node-graceful-fs
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
node-graceful-fs ist schon die neueste Version (4.1.11-1).
node-graceful-fs wurde als manuell installiert festgelegt.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 83 nicht aktualisiert.

pi@raspberrypi:~/Downloads/node_airtunes $ node-gyp configure build
module.js:559
    throw err;
    ^

Error: Cannot find module 'graceful-fs'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)


Folgende Versionen sind installiert:

pi@raspberrypi:~/Downloads/node_airtunes $ npm -v
5.6.0
pi@raspberrypi:~/Downloads/node_airtunes $ node -v
v9.8.0
pi@raspberrypi:~/Downloads/node_airtunes $ nodejs -v
v10.15.2
pi@raspberrypi:~/Downloads/node_airtunes $ node-gyp -v
module.js:559
    throw err;
    ^

Error: Cannot find module 'graceful-fs'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)

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,

Da fehlt ein Modul


npm i graceful-fs

Sollte helfen....

Felix_86

Hallo jko,

vielen Dank für deine Antwort. Leider war die Installation des Moduls nicht ausreichend oder wurde nicht korrekt durchgeführt.

Anbei die Ausgabe vom heutigen Versuch

pi@raspberrypi:~ $ cd Downloads/
pi@raspberrypi:~/Downloads $ date
Mi 6. Mai 21:19:55 CEST 2020
pi@raspberrypi:~/Downloads $ git clone https://github.com/afaden/node_airtunes.git
Klone nach 'node_airtunes' ...
remote: Enumerating objects: 379, done.
remote: Total 379 (delta 0), reused 0 (delta 0), pack-reused 379
Empfange Objekte: 100% (379/379), 1.30 MiB | 2.25 MiB/s, Fertig.
Löse Unterschiede auf: 100% (182/182), Fertig.
pi@raspberrypi:~/Downloads $ cd node_airtunes
pi@raspberrypi:~/Downloads/node_airtunes $ git checkout fix_port_0_error
Branch 'fix_port_0_error' folgt nun Remote-Branch 'fix_port_0_error' von 'origin'.
Zu neuem Branch 'fix_port_0_error' gewechselt
pi@raspberrypi:~/Downloads/node_airtunes $ node-gyp configure build
module.js:559
    throw err;
    ^

Error: Cannot find module 'graceful-fs'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)
pi@raspberrypi:~/Downloads/node_airtunes $ npm i graceful-fs
npm WARN airtunes@0.1.7 No license field.

+ graceful-fs@4.2.4
updated 1 package in 2.283s
pi@raspberrypi:~/Downloads/node_airtunes $ node-gyp configure build
module.js:559
    throw err;
    ^

Error: Cannot find module 'graceful-fs'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/node-gyp/lib/node-gyp.js:12:10)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)
pi@raspberrypi:~/Downloads/node_airtunes $


Zwischenzeitlich habe ich auch npm nicht von apt-get installation, sondern aus dem Github Projekt geklont. Dies brachte allerdings auch keine Veränderung.

Ist hier etwas grundlegend schief und muss bereinigt werden oder warum bin ich nicht in der Lage den HomePod auf dem Raspberry in Betrieb zu nehmen????
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

Felix_86

#22
Hallo zusammen,

da ich mir keinen Rat mehr wusste, habe ich Raspbian 9 / Stretch auf einer zweiten SD Karte neu installiert und habe dort die Installationsschritte ausgeführt. Nun sieht es deutlich besser aus - keine Fehler mehr beim Kompilieren.

Starte ich nun play_ffmpeg.js erhalte ich folgende Ausgabe:

pi@raspberrypi:~/Downloads/node_airtunes/examples $ node play_ffmpeg.js --host 192.168.2.152 --port 7000 --ffmpeg /usr/bin/ffmpeg --file ~/Downloads/node_airtunes/examples/wakeup.mp3
adding device: 192.168.2.152:7000
status: stopped


Im tcpdump sehe ich auch, dass Netzwerkkommunikation zwischen dem Raspberry und dem angesprochenen Homepod stattfindet, allerdings ist der Ton nicht hörbar.

Wo liegt nun der Fehler?
Warum kommt direkt nach dem "adding device" die Meldung "status: stopped"?
Was bedeutet "status: stopped"?


UPDATE:
Wenn ich das play_ffmpeg.js als Root ausführe, erhalte ich die Meldung "Cannot find module 'async'". Ok, installiere ich async mittels "npm install async" unter Root, kommt zwar die Meldung nicht mehr, allerdings kommt dann als pi User nach dem "adding device" nichts mehr (auch nicht die Ausgabe "status stopped"), auch im tcpdump ist dann KEINE Netzwerkkommunikation mehr zu sehen.
Entferne ich async unter Root wieder (npm remove async) dann erhalte ich zwar wieder die Meldung  "Cannot find module 'async'" unter Root, aber als pi User kommt nach dem "adding device" wieder "status: stopped" und im tcpdump ist Netzwerkkommunikation ersichtlicht.

Das async Modul (installiert unter Root) tut also irgend etwas, was dazu führt, dass play_ffmpeg.js unter dem pi User anders agiert / funktioniert.

Jemand eine Idee?

Danke
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

Felix_86

Das Problem besteht weiterhin und ohne Rückmeldung, Infos, Hilfe oder Denkanstöße komme ich leider nicht weiter :(
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

Ganglion

Zitat von: 4kk am 23 März 2020, 17:41:28
Aber jetzt gleich das nächste Problem:

FHEM_PI:~ $ ./Airplay_Einmal.sh
/usr/bin/node /home/pi/node_airtunes/examples/play_ffmpeg.js --host 192.168.1.160 --port 7000 --ffmpeg /usr/bin/ffmpeg --file /tmp/Einmal.mp3
adding device: 192.168.1.160:7000
(node:7202) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.


Grüße Mike

Habe 1:1 die gleiche Meldung und das gleiche Problem... Hast Du oder evtl. jemand anderes eine Lösung dafür oder eine Idee?

Felix_86

Ich kämpfe auch schon seit einem halben Jahr an dem Thema rum und finde keine Lösung und bringe es nicht zum Laufen. Habe auch schon Kontakt zum TE aufgenommen, aber bisher auch kein Weiterkommen.

Entweder wird die Verbindung zum HomePod über FHEM nur sehr selten von den Usern verwendet oder bei allen anderen läufts einfach und keiner hat Probleme.
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

Anjo1979

Zitat von: Felix_86 am 16 Oktober 2020, 21:07:57
Ich kämpfe auch schon seit einem halben Jahr an dem Thema rum und finde keine Lösung und bringe es nicht zum Laufen. Habe auch schon Kontakt zum TE aufgenommen, aber bisher auch kein Weiterkommen.

Entweder wird die Verbindung zum HomePod über FHEM nur sehr selten von den Usern verwendet oder bei allen anderen läufts einfach und keiner hat Probleme.

Hallo zusammen,

ich würde mich ebenfalls riesig freuen, wenn es jemand zum Laufen bekommt. Ich verfolge dies hier schon ein weile und habe diverse Dinge (ähnlich zu Felix_86) probiert. Leider ohne erfolg, Fehlermeldungen ebenfalls wie bei Felix_86.

Was ich gesehen hatte, dass es wohl eine "Weiterentwicklung = node_airtunes2" gibt. Siehe hier: https://github.com/mcfisto/node_airtunes2
Ich konnte es bisher noch nicht testen, werde ich aber asap tun. Vielleicht hilft es euch weiter!?

Grüße
Anjo

Hanjo

Hallo,

nachdem ich die gleichen Probleme hatte, wie weiter oben im Thread beschrieben, habe ich mich ein bisschen durch die Forks gewühlt. Erfolg hatte ich letztendlich mit diesem Fork:

https://github.com/fimius23/node_airtunes2

Viele Grüße
Hanjo

Dirk070

Hallo Hanjo,

ich habe hier auch alles Mögliche probiert und kam doch nie richtig weiter.
Nutze FHEM im Docker auf der Syno.

Könntest Du netterweise kurz beschreiben, welche Schritte hier zu unternehmen sind?

Vielen Dank und schöne Grüße
Dirk

Elektrolurch

Hallo,

ich weiß nicht, ob der Beitrag noch lebt (:-))?
Leider habe ich das gleiche Problem, wie die Mitstreiter hier im Beitrag:

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

Gibt nur "Adding device 192.168.1.87 Port 7000..." aus (ohne Sound) und bleibt dann einfach hängen (kann nur mit ctrl-C beeeendet werden).

example-Verzeichnis enthält Skript und Audio - Datei.
Device ist online mit Port 7000.

Versionen:

npm -v
5.6.0
nodejs -v
V12.22.12
node-gyp -v
module.js:559
    throw err;
    ^

Error: Cannot find module 'nopt'
    at Function.Module._resolveFilename (module.js:557:15)
    at Function.Module._load (module.js:484:25)
    at Module.require (module.js:606:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/usr/share/nodejs/node-gyp/lib/node-gyp.js:4:14)
    at Module._compile (module.js:662:30)
    at Object.Module._extensions..js (module.js:673:10)
    at Module.load (module.js:575:32)
    at tryModuleLoad (module.js:515:12)
    at Function.Module._load (module.js:507:3)


Habe versucht, dass zu fixen mit:

npm install nopt


Hat aber nichts gebracht.

Installation laut Anleitung:

git clone https://github.com/afaden/node_airtunes.git
cd node_airtunes
git checkout fix_port_0_error
npm install


läuft durch, bringt aber eine Menge Type-Warungen für die Funktionsaufrufe.


Hat da jemand mehr Erfolg gehabt?

Elektrolurch

P.S.: Glücklicherweise regnet es heute.... sitze schon den ganzen Nachmittag daran.

configDB und Windows befreite Zone!