Raspberry Pi als Musik-Kiste

Grundlage: Raspberry Pi

Über den Raspberry Pi – den kleinen Einplatinencomputer – hatte ich ja schon mehrfach geschrieben. Seit einem guten halben werkelt so ein Gerät als Spotify-Client an der Stereoanlage im Wohnzimmer. Das läuft sehr stabil und war genau das Gerät, was ich lange vergeblich für einen bezahlbaren Preis gesucht habe. Aber hat man erst einen Raspberry, entstehen schnell Ideen, was man nicht noch alles schönes damit machen könnte. Und so entstand die Idee im Stile eines alten Radios eine kleine (fast mobile) Musik-Kiste auf Basis des Wohnzimmer-Projekts zu machen, damit man z.B. im Kinderzimmer auch eine webgestützte Plattform hat – Spotify bietet inzwischen ja auch „Kindermusik“, Hörspiele und mehr.

Read More

Onkyo Receiver und Raspberry Pi

IMG_20130206_215155Der Raspberry Pi hat es mir ja weiterhin angetan – ein Mini-Projekt, das schon seit einem halben Jahr auf der To Do-Liste steht: Mein Onkyo-Verstärker (TX 8050) hat ein LAN-Interface und hängt bei mir im internen Netz. Es gibt einige Apps für Android und Ipad mit denen man den Verstärker steuern kann, ich hätte es aber gerne genereller und würde die Verstärkersteuerung z.B. in Automatisierungsszenarien einbinden.

Ausgang – Raspberry steuert Spotify

Wie schon im Artikel Raspberry Pi und Spotify beschrieben steuere ich die Spotify-Wiedergabe über den Raspberry Pi und das funktioniert bisher wirklich ziemlich gut.

Ziel: Weitere Automatisierung

Auf der Wunschliste steht als nächstes die Automatisierungskette zu vervollkommnen. Nett wäre es doch, wenn ich den Raspberry Pi einschalte, dass gleichzeitig der Verstärker angeht und dieser sich dann doch auch direkt auf den passenden Kanal umschaltet und vielleicht auch zur Sicherheit die Lautstärke passend setzt.

Weg: Onkyo und ISCP

Der Onkyo hat eine Netzwerkschnittstelle (LAN) und ist darüber grundsätzlich einstellbar. Onkyo hat sich dafür ein eigenes Protokoll einfallen lassen: ISCP. Im Netz habe ich unterschiedliche Informationen gefunden – ob die Dokumentation von Onkyo nun offiziell supported und herausgegeben wird oder nicht, sei’s drum, es gibt diverse Excel-Tabellen mit den entsprechenden Befehlssets. Praktischerweise habe ich auf github ein Projekt gefunden, dass ISCP mittels Python-Scripts zugänglich macht: Miracle2k – onkyo-eiscp
Darüber ist der Onkyo schlussendlich z.B. direkt in der Shell steuerbar.

Umsetzung auf dem Raspberry Pi

Ganz praktisch nachfolgend der Weg:

  • Python selbst ist auf meinem Raspberry Pi schon verfügbar (ich verwende ein Debian Wheeze-Image)
  • Als nächstes benötigen wir die Python Setup-Tools, d.h. Shell auf dem Raspberry Pi aufmachen und dann:
    sudo apt-get install python-setuptools
  • Damit haben wir nun easy_install am Start, das erleichtert die Installation von Python-Dingen
  • Weiter geht’s in der Shell:
    easy_install https://github.com/miracle2k/onkyo-eiscp/tarball/master
    (das installiert das onkyo-Paket)
  • Nun können wir in der Shell mit
    onkyo command
    den Verstärker steuern. Eine Übersicht möglicher Befehle gibt es in der yaml-Datei.
  • Damit sind die Grundlagen gelegt, jetzt müssen wir dem Raspberry Pi noch beibringen beim Start auf den Kanal zu schalten und die Lautstärke zu setzen, dazu die Datei /etc/rc.local öffnen und folgenden zwei Zeilen ergänzen:
    /usr/local/bin/onkyo SLI00
    /usr/local/bin/onkyo MVL15
    Das passt natürlich jetzt nur für meine Umgebung, das Prinzip sollte aber klar sein.

Verstärker einschalten

In meinem Setup wird dabei auch der Verstärker physikalisch eingeschaltet – das kommt demnächst, wenn ich meine ersten Artikel zu meiner Hausautomatisierungs-Umgebung angehe, die auf FHEM basiert.

Raspberry Pi automatisch ausschalten

(Absatz ergänzt am 07.02.2013) Letzte Fragestellung in dem Zusammenhang: Wie schalte ich den Raspberry Pi am besten aus – die Hausautomation einfach hart die Steckdose abschalten lassen ist vermutlich auf Dauer für die Sd-Card nicht die beste Variante. Ich habe da ein paar kombinierte Maßnahmen:

  • die Hausautomation pingt alle 10 Minuten alle LAN-Geräte im Haus durch: wenn der Raspberry Pi nicht mehr per Ping erreichbar ist, schaltet sie die Steckdose einfach ab
  • der Raspberry Pi fährt sich ansonsten spät abends über einen Eintrag in der crontab selbst runter
  • und dritte Variante: ein Script (basiert auf dieser netten ping-script Vorlage) auf dem Raspberry Pi pingt alle 20 Sekunden den Onkyo an, gehen genügend Ping-Pakete verloren, geht der Raspberry Pi davon aus, dass der Verstärker aus, was bedeutet, dass er auch nicht mehr gebraucht wird, also fährt er sich runter, die Hausautomation kommt dann ein paar Minuten später und nimmt den Strom weg

Funktioniert bisher eigentlich recht zuverlässig, die Szenarien reichen bisher aus. Das ganze mit ping-Scripts zu machen ist natürlich eher die Version „Nagios für Arme“, aber es funktioniert. Ich empfehle auch es nicht zu kompliziert zu machen ansonsten verliert man den Überblick und weiß auch selbst nicht mehr genau, warum wann was passiert. Aber so lange das alles kleine nette Helferlein im Hintergrund sind, ist das doch sehr nett.

Raspberry Pi und Spotify

Inzwischen ist mein Raspberry Pi gelandet und ich habe die ersten Gehversuche soweit erfolgreich hinter mich gebracht und den Raspberry Pi an Spotify angeschlossen bekommen.

Raspberry Pi Logo

Raspberry Pi Logo

Raspberry Pi

Der Raspberry Pi (RPI) ist ein sogenannter (lüfterloser) „Ein-Platinen-Computer“, darin werkelt ein ARM-Prozessor, das Gerät verbraucht 2,5-3,5 Watt. Für das, was es kann ist das erstaunlich wenig und für mich eignet es sich damit als „Medienzuspieler“ im Wohnzimmer. Auf dem RPI sind unterschiedliche Systeme ans Laufen zu bringen, es gibt von Raspberry selber Distributionen aber auch gebaute Debian-Versionen und darüberhinaus auch jede Menge Images, die neben der Distribution schon vorinstallierte Pakete für die unterschiedlichsten Einsatzzwecke enthalten.

Ziel und Einsatzzweck

Der Raspberry Pi soll bei mir an Spotify angebunden werden. Bisher habe ich das immer über Ipad, AppleTV und dann Airplay gemacht. Das funktioniert zwar, schränkt aber gerade bei der Benutzung mit mehreren daheim zu sehr ein.

Also das Ziel: Der RPI unterhält sich mit Spotify und ist von außen (im Idealfall über beliebige) Geräte steuerbar. Entweder Apps oder noch lieber ein Webinterface.

Umsetzung

Das schöne am Internet – egal welches Problem man sich stellt – man findet vermutlich jemanden, der das gleiche Problem angeht oder vielleicht sogar schon gelöst hat. So auch hier: Mit Mopidy gibt es einen MusicServer, der sich u.a. an Spotify anbindet. Mopidy ist inzwischen auch auf dem Raspberry Pi verfügbar. Nach einigem Recherchieren wie ich Mopidy am besten auf den Raspberry Pi bekomme bin ich dann auf der Webseite von Wouter van Wijk gelandet, der ziemlich das gleiche Projekt verfolgt und schon ein Image unter dem Titel „PI Musicbox“ zusammengestellt hat. Es enthält neben Mopidy auch ein Webinterface über das Playlisten etc. gesteuert werden können.

Installation und Spotify

Logo SpotifyAls erstes – Image herunterladen, ZIP-Datei entpacken – man erhält eine .img-Datei. Auf dem Mac gibt es dann ein nettes Programm namens „RPI-SD Card Builder“ – dem wirft man das Image vor und er erzeugt daraus die nötigen Partitionen etc. auf der SD-Card. Dauert 10 Minuten und danach hat man die fertige SD-Card. Diese gilt es zu mounten und die notwendigen Settings/Logindaten einzutragen. Ich hatte noch ein sehr frühes Image und musste ein paar Verrenkungen machen, um den Netzzugang ans Laufen zu bekommen, das ist in der aktuellen Fassung gelöst).

SD-Card in den RPI, Netzwerkkabel einstecken, booten – und tatsächlich, es funktioniert.

Nach außen wird unter der IP-Adresse des Raspberry Pi ein Webservice aufgemacht, der die Daten von Spotify durchreicht. Hier ist momentan nicht der komplette Spotify-Funktionsumfang abgebildet, aber Playlisten abspielen etc. funktioniert. Das Webinterface ist dabei nett gemacht (jquery und Co), d.h. Änderungen, die man z.B. zeitgleich von einem anderen Gerät an den Playlisten vornimmt werden ohne Reload „just in time“ auch in Browsern auf anderen Geräten angezeigt.

Einschränkungen

Was momentan noch nicht funktioniert: Playlist-Ordner werden von Mopidy bisher noch nicht unterstützt, d.h. es werden alle Playlists untereinander angezeigt. Momentan habe ich die Stereoanlage über den analogen Klinke-Ausgang des RPIs angeschlossen, hier habe ich beim Trackwechsel momentan ein einmaliges Knacksen auf der Leitung – das liegt wohl am RPI und ist da ein bekanntes Phänomen. Ich werde es die Tage mit einer USB-Soundkarte probieren.
Etwas mehr Schwung in die Szene würde auch gelangen, wenn Spotify die RPI-Umgebung bzw. deren ARM-Prozessoren besser unterstützen würde. Bisher gibt es hier nur Anfragen an Spotify, der Spotify-Client selbst ist bisher nur für x86-Umgebungen veröffentlicht.

Was funktioniert
Mopidy auf dem RPI funktioniert bei mir bei den bisherigen Tests stabil. Bisher keine Abstürze oder Aussetzer. Soweit scheint mir der Ansatz bisher vielversprechend, ich teste das jetzt unter „familiären Produktionbedingungen“.

Einbindung in Hausautomation
Letzter Absatz am Rande: Der Raspberry Pi hat keinen Aus- bzw. Einschalter, d.h. an dieser Stelle muss sich überlegen, wie man das Gerät an- und ausschaltet. Vor allem auch, wenn im Familienbetrieb die Option „gehe mit SSH auf den RPI und mache einen shutdown -h now“ als „nicht realistisch“ anzusehen ist. Bei mir ist die Lösung die Integration in meine Hausautomationswelt, die auf FHEM basiert.
Konkret: Der RPI sitzt an einer schaltbaren Steckdose und es gibt einen simplen Funkschalter über den bei uns alle Audiokomponenten geschaltet werden. Einschalten erfolgt über einen Druck auf den Schalter, der bei mir bei FHEM aufläuft. Ist der RPI aus (via Ping werden bei mir alle Netzwerkgeräte alle 5 Minuten gecheckt) schaltet FHEM die Steckdose ein. Drückt man später den Schalter, passiert nichts, da FHEM „weiß“, dass der RPI ja schon läuft. Ausschalten ist momentan etwas sehr simpel mit einem Cronjob auf dem Raspberry Pi zu später Stunde gelöst (also nicht über FHEM).
Bei Interesse kann ich die 20 Zeilen Code zu FHEM hier auch gerne reinschreiben.

Fazit

Für die erste Woche mit dem RPI hat das wirklich Spaß gemacht und funktioniert soweit schon – Spielraum nach oben gibt es und Ideen für den zweiten RPI entstehen auch schon. Apple TV habe ich kurzerhand abgebaut, denn zu mehr als „Spotify via Airplay“ habe ich es nie gebraucht und das kann der RPI auf dem Level genausogut.

Gesammelte Links

Raspberry Pi bestellt

Raspi_Colour_RDie Kollegen haben eine Sammelbestellung organisiert und so warte ich denn jetzt auch auf einen Raspberry Pi. Um die Wartezeit zu überbrücken hat er schonmal eine Kategorie hier bekommen und wir erweitern dann reticon hiermit thematisch auf mein Steckenpferd der letzten zwei Jahre, das schöne Thema „Hausautomatisierung“. Aber nun zum Raspberry Pi:

Das ist ein klitzekleiner Computer, der eigentlich aus nicht viel mehr als der Platine besteht – mit Gehäuse etwas größer als eine Streichholzschachtel. Darauf arbeitet eine ARM-Prozessor, es gibt etwas Hauptspeicher (256 oder 512 MB, je nach Modell), dann haben wir da noch eine Ethernet-Schnittstelle, ein SD-Kartenslot, Audio-Klinke, HDMI und ein bzw. zwei USB-Ports und einen Micro-USB-Anschluss für die Stromversorgung, das war’s auch schon.

Gerade für „Bastelprojekte“ ist das eine sehr nette Umgebung, man kann auf der SD-Karte inzwischen unterschiedlichste Betriebssysteme ablegen, ich werde wohl zuerst mit einem Debian starten (es gibt aber auch schon erste Ansätze Android darauf verfügbar zu machen).

Nach einigem hin- und herüberlegen werde ich versuchen folgendes „Projekt“ anzugehen:
Der Raspberry Pi soll den Spotify-Zuspieler übernehmen (bisher ist das noch eine Verbindung über Ipad->Apple TV->Verstärker) – das ist kompliziert, funktioniert nicht von anderen Geräte aus. Auf der Suche nach etwas, das unter Android, Ipad, Browser etc. funktioniert brauche ich ein Gerät auf dem der Spotify-Client läuft und ich nur die Steuerung von draussen übernehmen kann. Das scheint mit dem Raspberry Pi machbar zu sein.
Mit Mopidy gibt es einen Music-Server, der zumindest laut Datenblatt genau das umsetzt und den clientseitigen Zugriff von so ziemlichen allen Plattformen aus erlaubt.

Noch eine Anmerkung zum Schluss, der Raspberry Pi steht mit 2,5 Watt Stromverbrauch im Betrieb ziemlich gut da – bis dahin … muss ich jetzt noch auf die Lieferung warten, dann berichte ich hier weiter.