AirSonos – Airplay für Sonos mit dem Raspberry Pi

Veröffentlicht von

Vor kurzem habe ich mir ein Sonos Play1 zugelegt. Mein Kumpel Kiwi besitzt dieses bereits eine Weile und hat das hier vor einiger Zeit bereits getestet. Gegen Hardware und Technik ist nichts einzuwenden. Die Klang ist gut und die App funktioniert zuverlässig. Leider ist das auch der einzige Knackpunkt am Sonos-System: ohne Sonos-App kein Abspielen von Inhalten.
Problemlos funktioniert dies für vorhandene Inhalte auf dem Smartphone oder Tablett. Radiosender und diverse Musikdienste lassen sich ebenfalls über die App nutzen.

image

IOS- und Mac-User, wie ich, vermissen die Unterstützung für Airplay. Diese erlaubt die Wiedergabe aus jeder App. Ich verwende Instacast als Podcastapp auf meinem Telefon. Mit dieser läuft jedoch nichts in Sachen Sonos.

Die Lösung in diesem Fall heißt AirSonos: AirSonos ist ein, in Node.js geschriebener, AirPlay-Server, welche die Musik an das Sonos-System weiterleitet. Der Server läuft auf einem extra Rechner, welcher an das Heimnetzwerk angeschlossen sein muss. In Zeiten von Raspberry Pi und Co. ist damit zum Glück kein großer klobiger PC mehr notwendig. Die Software kommt zudem mit mehreren Lautsprechern im Netzwerk klar.

Legen wir los: Ich beschreibe Installation und Einrichtung unter Raspbian auf dem Raspberry Pi. Das ganze funktioniert aber auch mit etwas Variation auf anderen Linuxderivaten und Rechnertypen.

Übertakten

Mit der Standardtaktfrequenz vom RPI funktionierte bei mir die Musikwiedergabe leider nicht flüssig. Deswegen ist die Empfehlung den Kleinen auf 1000 Mhz zu übertakten. Dies geschieht entweder direkt bei der Installation von Raspbian oder später durch einfaches Bearbeiten der entsprechenden Config-Datei:

 sudo vim /boot/config.txt

In der Config-Datei kommentiert man die folgenden Zeilen ein (# Symbol am Anfang entfernen):

 #Turbo
 arm_freq=1000
 core_freq=500
 sdram_freq=500
 over_voltage=6

Nach dem Neustart sollte der RPI in der neuen hohen Taktrate unterwegs sein.

Installation von AirSonos

Wie so oft beginnen wir die Installation mit einem Update der Paketquellen und der bereits installierten Software:

 sudo apt-get update
 sudo apt-get upgrade

Nun installieren wir noch ein paar Dinge:

 sudo apt-get install git-all libavahi-compat-libdnssd-dev

Es folgt Node.js, welches wir vorkompiliert herunterladen:

 wget http://node-arm.herokuapp.com/node_latest_armhf.deb

und installieren:

 sudo dpkg -i node_latest_armhf.deb

Das Ganze dauert ein wenig, also geduldig sein. 🙂
Im vorletzten Schritt folgt nun noch die Installation von AirSonos selbst:

 sudo npm install airsonos -g

Auch das dauert eine Weile. Unschön: bei mir kam es vor, dass der Vorgang mit der Fehlermeldung npm ERR! cb() never called abgebrochen wurde. Hier hat es geholfen den letzten Schritt einfach nochmal durchzuführen.

Fertig!

Ist alles installiert und eingerichtet, kann man AirSonos starten:

 sudo airsonos

Es sollten nun alle Sonos-Lautsprecher im Netzwerk gefunden und aufgelistet werden:

Searching for Sonos devices on network...
Setting up AirSonos for Kitchen {192.168.1.108:1400}

Im IOS-Gerät der Wahl werden diese jetzt auch als AirPlay-Device angezeigt und können entsprechend genutzt werden.

image

Kleiner Schönheitsfehler, schließt man die Konsole zum Rechner beendet sich AirSonos. Dies kann man verhindern indem man den Prozess von der Konsole entkoppelt:

 $ airsonos & disown

Viel Spaß beim Ausprobieren!

14 Kommentare

  1. Super Anleitung und funktioniert auch.
    Aber gibt es eine Möglichkeit, den Dienst automatisch starten zu lassen, z.B. nach Stromunterbrechung?
    Bin jetzt nicht der Linux-Freak…..

  2. HI

    Ich habe heute versucht Ariosos so zu installieren, wie Du es oben beschrieben hast. Leider leider klappt das nicht so.

    An bei eine ganze Menge an ERR-Meldungen

    npm WARN engine nodetunes@0.1.2: wanted: {“node”:”0.10.x”} (current: {“node”:”0.12.1″,”npm”:”2.5.1″})

    npm WARN deprecated static-favicon@1.0.2: use serve-favicon module

    > mdns@2.2.2 install /usr/local/lib/node_modules/airsonos/node_modules/nodetunes/node_modules/mdns

    > node-gyp rebuild

    gyp WARN EACCES user “root” does not have permission to access the dev dir “/root/.node-gyp/0.12.1”

    gyp WARN EACCES attempting to reinstall using temporary dev dir “/usr/local/lib/node_modules/airsonos/node_modules/nodetunes/node_modules/mdns/.node-gyp”

    child_process: customFds option is deprecated, use stdio instead.

    gyp ERR! build error

    gyp ERR! stack Error: not found: make

    gyp ERR! stack at F (/usr/local/lib/node_modules/npm/node_modules/which/which.js:38:28)

    gyp ERR! stack at E (/usr/local/lib/node_modules/npm/node_modules/which/which.js:41:29)

    gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/which/which.js:52:16

    gyp ERR! stack at FSReqWrap.oncomplete (fs.js:99:15)

    gyp ERR! System Linux 3.12.31

    gyp ERR! command “node” “/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js” “rebuild”

    gyp ERR! cwd /usr/local/lib/node_modules/airsonos/node_modules/nodetunes/node_modules/mdns

    gyp ERR! node -v v0.12.1

    gyp ERR! node-gyp -v v1.0.2

    gyp ERR! not ok

    > lame@1.2.0 install /usr/local/lib/node_modules/airsonos/node_modules/nicercast/node_modules/lame

    > node-gyp rebuild

    gyp WARN EACCES user “root” does not have permission to access the dev dir “/root/.node-gyp/0.12.1”

    gyp WARN EACCES attempting to reinstall using temporary dev dir “/usr/local/lib/node_modules/airsonos/node_modules/nicercast/node_modules/lame/.node-gyp”

    child_process: customFds option is deprecated, use stdio instead.

    gyp ERR! build error

    gyp ERR! stack Error: not found: make

    gyp ERR! stack at F (/usr/local/lib/node_modules/npm/node_modules/which/which.js:38:28)

    gyp ERR! stack at E (/usr/local/lib/node_modules/npm/node_modules/which/which.js:41:29)

    gyp ERR! stack at /usr/local/lib/node_modules/npm/node_modules/which/which.js:52:16

    gyp ERR! stack at FSReqWrap.oncomplete (fs.js:99:15)

    gyp ERR! System Linux 3.12.31

    gyp ERR! command “node” “/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js” “rebuild”

    gyp ERR! cwd /usr/local/lib/node_modules/airsonos/node_modules/nicercast/node_modules/lame

    gyp ERR! node -v v0.12.1

    gyp ERR! node-gyp -v v1.0.2

    gyp ERR! not ok

    npm ERR! Linux 3.12.31

    npm ERR! argv “/usr/local/bin/node” “/usr/local/bin/npm” “install” “airsonos” “-g”

    npm ERR! node v0.12.1

    npm ERR! npm v2.5.1

    npm ERR! code ELIFECYCLE

    npm ERR! mdns@2.2.2 install: `node-gyp rebuild`

    npm ERR! Exit status 1

    npm ERR!

    npm ERR! Failed at the mdns@2.2.2 install script ‘node-gyp rebuild’.

    npm ERR! This is most likely a problem with the mdns package,

    npm ERR! not with npm itself.

    npm ERR! Tell the author that this fails on your system:

    npm ERR! node-gyp rebuild

    npm ERR! You can get their info via:

    npm ERR! npm owner ls mdns

    npm ERR! There is likely additional logging output above.

    npm ERR! Please include the following file with any support request:

    npm ERR! /home/pi/npm-debug.log

    Kannst Du mir helfen?

    VG Markus

    1. bei mir geht es unter iOS 9 einwandfrei, es gibt ab&zu mal einen Aussetzer bei Youtube aber sonst geht es wunderbar. Wie kann ich es einstellen, das es direkt immer Startet?

    2. Hallo alle,

      ich habe die gleichen Probleme und ähnliche Fehlermeldungen wie Markus mit verschiedenen Versionen von node auf meinem Raspi 2 mit Rasbian Pixel. Kann jemand helfen?

      Andreas

      1. Wenn ich das richtig interpretiere:
        npm WARN engine nodetunes@0.1.2: wanted: {“node”:”0.10.x”} (current: {“node”:”0.12.1″,”npm”:”2.5.1″})

        Scheint da die falsche (neuere) node.js Version installiert zu sein. 0.12 statt 0.10.

        Also versuchen die ältere Version zu installieren. Ich habe auch mal geschaut, eventuell kann man dieses Tool nutzen:
        https://github.com/tj/n

  3. Hallo Markus,

    schein mir daran zu liegen, dass Du eine aktueller Version von node installiert hast (0.12.1) aber 0.10.x erwartet wird. Ist aber auch nur eine Vermutung. Ich würde node einfach nochmal deinstallieren und anschließend die alte Version installieren:

    wget http://node-arm.herokuapp.com/node_0.10.36_armhf.deb

    sudo dpkg -i node_latest_armhf.deb

    Wäre nur ein Versuch, habs selbst nicht getestet. Viel Erfolg.

    Gruß
    Andy

  4. Hi,

    Welche Version von node.js setzt du ein?

    Bei mir klappts weder mit “latest” noch mit 0.10.36.

    Der Beitrag ist echt toll geschrieben und bis auf das Installieren von airsonos klappt soweit auch alles.

    Vielen Dank für deine Hilfe.

    Gruß
    Christian

    1. Hi Christian,

      ich habs leider nicht mehr auf dem RPI installiert. Auf meinem normalen Ubuntu-Server funktioniert es mit NodeJS 0.10.38. Hoffe das hilft etwas weiter.

      Gruß
      Andy

  5. Hallo zusammen
    Habe es auch versucht. Leider klappt es bei mir auch nicht.

    Könnte mir vorstellen das in nächster Zeit einige Versuchen ein airsonos auf einem Raspberry einzurichten, da apple music ja noch nicht mit den Sonosboxen zusammenarbeitet. Auch ein streaming über das Handy ist auf Grund von DRM nicht möglich.

    Wenn irgendjemand ncoh einen Tipp hat wäre ich dankbar

    Gruß strubbel

  6. Also:
    Wird überall geschrieben läuft nicht schon gar nicht unter iOS 9
    Hab iOS 9.1 und genau der guten Beschreigung hier gefolgt unt läuft sauber!

  7. Hallo zusammen, bekomme immer bei dem Befehl :
    sudo dpkg -i node_latest_armhf.deb
    Folgende Fehlermeldung:
    ~ $ sudo dpkg -i node_latest_armhf.deb
    dpkg: Betreffend node_latest_armhf.deb, welches node enthält:
    nodejs-legacy kollidiert mit node
    node (Version 4.2.1-1) soll installiert werden.
    node liefert node und wird installiert.

    dpkg: Fehler beim Bearbeiten des Archivs node_latest_armhf.deb (–install):
    Kollidierende Pakete – node wird nicht installiert
    Fehler traten auf beim Bearbeiten von:
    node_latest_armhf.deb

    Was mach ich falsch?

    Gruß Stephan

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert