10.06.2013

Raspberry PI Internetradio


Nach anfänglicher Begeisterung über das Projekt Snakeberry kam ich schnell auf den Boden der Tatsachen zurück. Weil nach einiger Zeit, gerade wenn man Sender gewechselt hat, müllte sich das System zu mit Zombieprozessen des MPlayers. Ist ein verbreitetes Problem, gerade wenn man ihn im Hintergrund laufen lässt.


Die Software ist in Python geschrieben, und da Python momentan in aller Munde ist, dachte ich mir, es sollte kein Problem darstellen, sich dort reinzufuchsen und den Bug zu beseitigen. Weit gefehlt...

Im Endeffekt habe ich es aufgegeben und mich stattdessen auf alte, zuverlässige und simple Programmiertechniken besonnen. Und nach wenigen Stunden hatte ich einen Ersatz welcher recht einfach nachzubauen und zu erweitern ist.

Das Gerüst besteht aus dem Apache2 Webserver und PHP5. Dazu zwei Shell-Dateien und eine PHP-Datei. Eine kleine Besonderheit, in meiner Version läuft der Apache2 als User pi anstatt www-data. So lassen sich einige Fußangeln vermeiden. Geht sicherlich auch anders, aber das war für mich die simpelste Möglichkeit, alles schnell lauffähig zu bekommen. Das System sollte eh nur im lokalen Netz erreichbar sein. Wozu sollte man sein Radio aus der Ferne steuern? Und wenn Bedarf besteht, ein VPN wirds schon richten.

Erstmal den MPlayer, Apache und PHP installieren: 
sudo apt-get install alsa-utils 
sudo apt-get install mplayer
sudo modprobe snd_bcm2835
amixer cset numid=3 1

Nun erstmal mit einer beliebigen MP3-Datei antesten, ob Musik aus dem PI herauskommt.
mplayer /pfad/zur/mp3-Datei
Gegebenenfalls mit alsamixer die Lautstärke einstellen.

Wenn das erfolgreich verlaufen ist, Webserver und PHP installieren
sudo apt-get install apache2 php5
Dann  gleich wieder den Webserver stoppen
sudo /etc/init.d/apache2 stop
Die Lockdatei dem User pi zuordnen
sudo chown -R pi:pi /run/lock/apache2
Den Apache unter dem User pi laufen lassen:
sudo nano /etc/apache2/envvars
Dort die Zeilen
export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi

anpassen. Sind normalerweise auf www-data.
Dann den Webserver wieder einschalten mit
sudo /etc/init.d/apache2 start

Wenn das ohne Fehlermeldung überstanden ist, einfach mit einem Browser aus dem lokalen Netz den Raspberry ansprechen mit seiner IP. Die Standard-Apachemeldung "It works" sollte erscheinen.

Nun noch die paar Dateien zum Betrieb des Radios hochladen nach /var/www . Die beiden Shelldateien müssen ausführbar gemacht werden:
sudo chmod a+x /var/www/*.sh

Nun sollte beim Aufruf  auf ipdesraspberrypi/radio.php das Bild unten erscheinen.

Ein Klick auf einen der Sender startet das Radio. In der zweituntersten Zeile sieht man den eingestellten Sender. Ein Klick auf Ausschalten und Ruhe ist. ;) Das komische Ausgabeformat habe ich für mein Smartphone eingerichtet. Kann aber mit wenigen Handgriffen angepasst werden. HTML-Spezis werden bei dem Code eh die Hände über dem Kopf zusammenschlagen.

Die Senderliste wird in der radio.csv Datei hinterlegt. Diese ist analog zum Projekt Snakeberry aufgebaut und selbsterklärend.

Dieses Projekt ist extrem simpel und kein Hexenwerk. Es lädt förmlich zu Verbesserung an allen Ecken ein. Bei mir dudelt der Raspberry nun den halben Tag herum und versorgt mich mit diversen exotischen Radiosendern oder Internetstationen. Die Hardware baumelt hinter dem Röhrenradio herum.

Ich habe zusätzlich noch Samba installiert und das Verzeichnis /var/www ins Windows-Netzwerk gemappt. So kommt man schneller an die radio.csv dran. Bequemlichkeit ist Trumpf. ;)

Allerdings muss es kein Raspberry sein, gleiches erfüllt jeder Linux-Rechner. Man könnte zum Beispiel seinem NAS-Server missbrauchen. Hauptsache man hat einen Audio-Out dran.

Ich hoffe die Beschreibung ist weitestgehend fehlerfrei. Ich habe es zwei mal nachgebaut. Jedesmal mit einer jungfräulichen Raspian-Version.