Apr 10, 2015

Raspberry Pi als Internetradio in FHEM

Ich habe die ganze Zeit schon nach einer für mich akzeptablen Lösung gesucht, meine Zone 2 (Küche und Bad) mit stabilem Radioempfang zu befeuern. Bisher waren allerdings alle Lösungen nicht zu meiner vollsten Zufriendenheit. Ich habe das ganze zunächst mit normalen Radio ausprobiert (übermeinen AV-Receiver), aber auch mit einer UKW-Zimmerantenne ist der Empfang eher mäßig. Mein AV-Receiver besitzt zwar ein eigenes Internat-Radio Interface, aber das lässt sich zum einen nicht per Remote administrieren (es soll ja nur laufen, wenn es benötigt wird), zum anderen läuft es nicht gerade stabil. Irgendwann kam ich dann auf die Idee, den Raspberry bei Bedarf einfach zum Internet-Radio zu machen. Da meine FHEM-Zentrale sowieso direkt hinter meinem AV-Receiver hängt, kann ich diesen direkt über ein normales Audiokabel anschließen.

Dazu muss natürliche erstmal ein player her, der sich per console starten lässt. Nach einer kurzen Recherche kam ich schnell auf den „mplayer“. Dieser lässt sich ganz einfach starten, in dem man die Streamadresse anhängt:

pi@raspberrypi ~ $ mplayer http://stream-to-play.de/stream.mp3

Durch diesen Aufruf wird der Player zwar gestartet, aber sobald man die Konsole verlässt, beendet sich mplayer und die Musik verstummt. Es muss also ein Start-Skript her, dass den mplayer mit dem entsprechenden Stream startet. Dazu wird im Ordner /etc/init.d/ eine Datei angelegt.


pi@raspberrypi ~ $ sudo nano /etc/init.d/mplayerd

# /etc/init.d/mplayerd
### BEGIN INIT INFO
# Provides:          mplayer
# Required-Start:    $network $syslog
# Required-Stop:     $network $syslog
# Should-Start:      $time
# Should-Stop:       $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the mplayer daemon
# Description:       mplayer daemon
### END INIT INFO

CONTROLFILE="/tmp/mplayercontrol"
DAEMONUSER=pi

DAEMON=mplayer
DAEMON_ARGS="http://stream-to-play.de/livestream.aa$
PIDFILE=/tmp/mplayerd.pid

start() {
echo "Starting mplayer..."

# Prepare fifo file
rm -rf $CONTROLFILE
mkfifo $CONTROLFILE
chmod a+rw $CONTROLFILE

start-stop-daemon --start --quiet --user $DAEMONUSER    \
--make-pidfile --pidfile $PIDFILE --background       \
--exec /bin/bash -- -c "$DAEMON $DAEMON_ARGS > /tmp/mplayerd.log 2>$

echo "Started for user: $DAEMONUSER."
}

stop() {
echo "Stopping mplayer..."
kill -9 `cat $PIDFILE`
killall mplayer
# Cleanup fifo file
rm -rf $CONTROLFILE
rm $PIDFILE
}

status() {
if [ -z `cat $PIDFILE` ];
then
echo "mplayerd: not running."
else
echo "mplayerd: running."
fi
}

case "$1" in
start)
start
;;

stop)
stop
;;

restart|reload|force-reload)
stop
start
;;

status)
status
;;

*)
echo "Usage: /etc/init.d/mplayerd {start|stop|reload|force-reload|restart|s$
exit 1

esac

exit 0

Soweit, so gut. Nun muss man dem ganzen noch die entsprechenden Rechte geben:


sudo chmod 755 /etc/init.d/mplayerd

Nun kann man das Skript starten

pi@raspberrypi ~ $ /etc/init.d/mplayerd start

Wenn alles richtig eingestellt ist, sollte nun der Stream abgespielt werden.

Bei mir war der Ton am anfang noch sehr leise. Das lag aber daran, dass im alsamixer der Ton nur halb aufgedreht war. Über „alsamixer“ kann man die Lautstärke einstellen.

alsamixer

 

So, das Internetradio funktioniert schonmal. Nun sollte das ganze ja auch über FHEM steuerbar sein. Dazu kann man sich einfach einen Dummy und ein Notify in FHEM anlegen und den Aufruf des Skriptes mit reinpacken.


define dummy_InternetRadio dummy
attr dummy_InternetRadio setList on off
attr dummy_InternetRadio webCmd on:off
define Notify_Set_InternetRadioStation_On notify dummy_InternetRadio:on.* {system("etc/init.d/mplayerd1 start")
define Notify_Set_InternetRadioStation_Off notify dummy_InternetRadio:off.* {system("/etc/init.d/mplayerd1 stop")}

Das wars auch schon. Mit dem Dummyschalter „dummy_InternetRadio“ kann man komfortabel das Internetradio an- und ausschalten.

Leave a Reply