MPD-Modul: Mehrere Airplay Instanzen auswählen und mit Spotify anspielen

Begonnen von davidwohnthier, 12 April 2016, 21:57:17

Vorheriges Thema - Nächstes Thema

davidwohnthier

Hallo!
Erst einmal danke für die vielen Sachen, die sich mit FHEM so super realisieren lassen.
Ich bin gerade dabei über FHEM (welches auf meinem Raspberry läuft) Musik an meinen Yamaha Receiver zu spielen. Explizit geht es um Spotify, welches auf dem Raspberry eine bestimmte Playlist abspielt, an mehrere Airplay-Instanzen zu senden.
Das ganze funktioniert ausgezeichnet bisher. Ich komme nach Hause, FHEM erkennt mich und der Raspberry fängt an Spotify über Airplay abzuspielen. Was ich jetzt noch nicht hinbekommen habe, ist FHEM zu erklären, dass es direkt mehrere Outputs auswählen soll. Ich kann über MPC im Terminal ohne Probleme mehrere Instanzen auswählen und aktivieren, nur der Command funktioniert nicht in FHEM.

In MPC lasse ich mir einfach die Airplay Outputs anzeigen mit "mpc outputs" und aktivere dann die jeweiligen mit "mpc enable >name<".
Der dazu passende Command in MPD (FHEM steuert ja MPD) wäre enableoutput "id". Umgelegt in FHEM hieße das dann doch "set mympd mpdCMD enableoutput ID" - es passiert allerdings gar nichts. Wenn ich in MPC den enable Command verwendet geht sofort die jeweilige Airplay Instanz an, alles also kein Problem.

Vielleicht kann mir jemand sagen was ich falsch mache und/oder ob man diesen Command nativ integrieren kann, da sich dadurch ja sehr leicht ein Airplay-Multiroom System aufbauen lässt und man einzelne Airplay-Instanzen damit ein und ausschalten kann (den toggle-Command gibt es auch bei MPD von Haus aus..)

Hoffe ich konnte mich halbwegs verständlich ausdrücken.
Danke schon einmal im Vorhinein!

David

P.S. Das Log das nebenbei gar nichts.. Hab MPD auf verbose 5 laufen aber da kommen eigentlich immer nur die Status Informationen

Wenn ich "get mympd mpdCMD outputs" eingebe kommt folgendes:
mympd outputs:
outputid: 0
outputname: Computer
outputenabled: 0
outputid: 13456
outputname: konfettikanone
outputenabled: 1
outputid: 1812
outputname: traumland
outputenabled: 1
outputid: 27685
outputname: AirReceiver(AFTB)
outputenabled: 0


Aber, wie oben beschrieben, gebe ich "set mympd mpdCMD enableoutput 1812" oder eben statt der Nummer der jeweilige Name, passiert nichts und es erscheint:

mympd enableoutput 13457:

edit:
Hab jetzt doch noch etwas im Log gefunden. Dieses sagt, wenn ich in FHEM den Command sende
mpd: No speaker to deactivate
Verstehe ich nicht ganz, da das ganze mit MPC ohne Probleme funktioniert. hmmmmmm

davidwohnthier

Okay, Vorführeffekt, hab es hinbekommen.

Ich hab andauernd versucht die IDs die MPC output rausgegeben hat zu schalten, da ich dachte es seien die selben, die eben auch MPD in FHEM rausgibt - die letzte Ziffer war jedoch unterschiedlich. Oh man.

Wzut

Zum Thema MPD Outputs enable / disable lies bitte mal ab hier https://forum.fhem.de/index.php/topic,18517.msg430419.html#msg430419
Die Funktion arbeitet in der heutigen (aktuellen) Version noch nicht ganz perfekt,
wird aber mit der nächsten Version besser :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

klausw

ich habe keine Antwort sondern eine Frage ;)

wie bekomme ich die Airport Lautsprecher im mpc angezeigt.
Irgendwie finde ich da nix.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Wzut

Hast denn die Lautsprecher als mögliches Output Device in der mpd.conf eingetragen ?
Quick & dirty via Google , etwa so :
audio_output {
        type                "httpd"
        name                "My HTTP Stream"
        encoder                "lame"        port                "8000″
        bitrate                "320"        format                "44100:16:1″
bind_to_address "0.0.0.0"
}


Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

klausw

Zitat von: Wzut am 13 April 2016, 16:36:20
Hast denn die Lautsprecher als mögliches Output Device in der mpd.conf eingetragen ?
Quick & dirty via Google , etwa so :
audio_output {
        type                "httpd"
        name                "My HTTP Stream"
        encoder                "lame"        port                "8000″
        bitrate                "320"        format                "44100:16:1″
bind_to_address "0.0.0.0"
}

nein, soweit bin ich noch nicht mal  :-\
Dein Beispiel macht doch eher nen Streaming Server auf.
Mir geht es eher darum, was an ein Airplay device zu senden
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Wzut

Sorry , aber ich habe kein Airplay Device und daher auch NULL Ahnung wie genau man den Sound von A nach B bekommt.
Vllt. kann ja davidwohnthier uns Unwissenden etwas beibringen :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

klausw

Zitat von: Wzut am 13 April 2016, 20:50:40
Sorry , aber ich habe kein Airplay Device und daher auch NULL Ahnung wie genau man den Sound von A nach B bekommt.
Vllt. kann ja davidwohnthier uns Unwissenden etwas beibringen :)
Das ist mir nicht verborgen geblieben  ;D
Ja genau darauf spekuliere ich. Ich haben im Netz Anleitungen gefunden, die allerdings alle recht aufwändig sind. Ich hoffe einfach, das ich es einfach übersehen habe.
Ich habe derzeit halt Audio Clients mit picoreplayer drauf, die ich über SqueezeboxServer bediene. Für Webradio ist das bisschen überdimensioniert. Die picoreplayer verstehen auch shairport-sync und das mit mpd zu bedienen wäre für mich die Ideallösung.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

davidwohnthier

#8
Ich wollte dazu eigentlich eh mal einen Artikel verfassen, da das Thema im Netz nur sehr wenig ausgeführt ist (auch hier bei FHEM) und ich doch so begeistert bin. Die Lösung heißt letztendlich forked-daapd. Lässt sich einfach per apt-get installieren und funktioniert bei mir sehr gut. Die Steuerung per Remote iOS App ist etwa langsam, aber das könnte an meinem Raspberry 1 liegen, der immer einen Load von 35% durch pilight hat... Forked-daapd versteht sich auch mit dem neuen Airplay Protokoll (Raop2) und listet sehr zuverlässig alle Airplay Instanzen auf. Zusätzlich unterstützt es Spotify. Eine eierlegend Wollmilchsau also :) Hier geht es zum Github: https://github.com/jasonmc/forked-daapd

Den Artikel den ich für euch schreiben wollte, hab ich auch schon vorgeschrieben... Damit er nicht nur in meiner Notiz-App vergammelt copy & paste ich ihn mal hier rein...:

Eine Anmerkung noch: Ich habe es nicht geschafft in der forked-daapd config mehrere Airplay Devices standardmäßig auszuwählen. Das löse ich jetzt indem ich den Command zum aktivieren des Outputs (set mympd mpdCMD enableoutput "ID") immer noch anhänge..

ZitatHallo!

Ich hab jetzt so viel Hilfe von euch gelesen und bekommen, deswegen wollte ich mal bisschen was zurückgeben indem ich kurz beschreibe, was ich am Wochenende auf meinem Raspberry 1 Model B, auf dem FHEM läuft gebaut habe. Spotify ist ja bisher noch nicht so viel beschrieben hier (was wahrscheinlich auch am schlechten Spotify Support und der uralten API liegt) aber ich habe es trotzdem geschafft Spotify auf dem Raspberry laufen zu lassen, dieses per Airplay auf einen Yamaha AVR/NP übertragen und das ganze per FHEM MPD Modul zu steuern.

Das Ergebnis ist jetzt, dass FHEM durch GEOFANCY erkennt wenn ich mich auf 100m meiner Wohnung nähere, 60 Sekunden wartet, den Receiver einschaltet und eine bestimmte Spotify Playlist abspielt und per Airplay an den Receiver überträgt.

Irgendwie ist es auch sehr trivial, aber trotzdem habe ich lange gesucht und bin an manchen Ecken hängengeblieben. Ich hab verschiedene Apps wie Mopidy und MPD selbst ausprobiert, letztendlich ist es aber forked-daapd gewesen mit dem alles so wie oben beschrieben funktioniert.

Die Installation von forked-daapd auf dem Raspberry wird hier sehr gut vom Autor beschrieben:
https://www.raspberrypi.org/forums/viewtopic.php?t=49928

How to install
1a. If you use Jessie then add this line to /etc/apt/sources.list:
deb m http://www.gyfgafguf.dk/raspbian m jessie/armhf/
or
1b. If you use Wheezy then add this line to /etc/apt/sources.list:
deb m http://www.gyfgafguf.dk/raspbian m wheezy-backports/armhf/
2. Run sudo apt-get update and then sudo apt-get install forked-daapd
3. Edit the config file /etc/forked-daapd.conf and (re)start the server with sudo /etc/init.d/forked-daapd restart

More instructions, like how to get Remote working, are are available here.

Optional - how to add support for Spotify:
1. Add deb m http://apt.mopidy.com/ m stable main contrib non-free to /etc/apt/sources.list
2. Run sudo apt-get update and then sudo apt-get install libspotify-dev
3) Restart forked-daapd and enter credentials as described in the instructions.
4) Check the log to see how it is working. It should start loading your playlists.

Gerade der Punkt mit der Remote ist für iOS Menschen sicherlich sehr interessant. Es lässt sich damit ein einfaches Multi-Room System mit mehreren Airplay Empfängern herstellen. Dies funktioniert sonst nur über Umwegs oder Apple-Eigene Hardware (Vom Macbook oder ähnlichem aus). Wer aber vom iOS Gerät auf mehrere Airplay Instanzen gleichzeitig streamen will, kann das ganze hiermit lösen.

Ich würde neben forked-daapd noch mpc (über apt-get) installieren, damit kann man ein wenig flotter nach Fehlern suchen. Die einzelnen Airplay Instanzen lassen sich dann auch in FHEM über den mpdCMD "outputs" auflisten.

Ich habe jetzt im Tablet UI einen Punkt eingerichtet, mit dem ich 1.) unterschiedliche Spotify Playlists abspielen kann und 2.) unterschiedliche Airplay Instanzen aktivieren kann (Bad, Schlafzimmer, Küche, Wohnzimmer)

Wzut

Ich habe inzwischen auch einiges zu diesem Thema gelesen, am längsten hat es gedauert bis ich begriffen hatte das dabei gar kein MPD mehr verwendet wird sondern nur noch die diversen Clients auf MPC Basis. Da das 73_MPD.pm ja auch nur ein weiterer MPC Client ist klappt das wohl soweit auch.
Ich setzte gerade ein neues Jessie Image auf und will anschliessend mal Mopidy mit Spotify Unterstützung installieren. Mal schauen ob die neuste Version meines Moduls damit klar kommt oder ob ich je nach verwendetem Unterbau ( MPD, Mopidy, forked-daapd ) Unterscheidungen einbauen muss.
 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Wzut

@davidwohnthier , teste doch bitte mal die angehängte Version.
Damit sollten sich deine Outputs besser ein und ausschalten lassen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

davidwohnthier

Mache ich direkt morgen und berichte! Bin gerade nicht zuhause :) Danke schon mal für die Mühe!

davidwohnthier

Ich hab das die alte .pm Datei ins Home Verzeichnis kopiert und die neue in das FHEM Verzeichnis. Beim starten von FHEM kommt folgendes im Log:
2016.04.21 13:27:40 1: reload: Error:Modul 73_MPD deactivated:
Can't locate XML/Simple.pm in @INC (you may need to install the XML::Simple module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/73_MPD.pm line 47, <$fh> line 137.
BEGIN failed--compilation aborted at ./FHEM/73_MPD.pm line 47, <$fh> line 137.

2016.04.21 13:27:40 0: Can't locate XML/Simple.pm in @INC (you may need to install the XML::Simple module) (@INC contains: /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.20.2 /usr/local/share/perl/5.20.2 /usr/lib/arm-linux-gnueabihf/perl5/5.20 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.20 /usr/share/perl/5.20 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/73_MPD.pm line 47, <$fh> line 137.
BEGIN failed--compilation aborted at ./FHEM/73_MPD.pm line 47, <$fh> line 137.

2016.04.21 13:27:41 1: Converting weblink Stats_BBxM (fileplot) to SVG

Wzut

Dir fehlt das XML::Simple Modul, nachinstallieren mit :
sudo apt-get install libxml-simple-perl
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher