Die Preise für den Raspberry Pi fallen ganz langsam wieder auf ein normales Niveau. Während der Minirechner in den letzten 12 Monaten gar nicht oder nur zu Wucherpreisen zu haben war, zahlt man heute für ein Modell 3 (mit 1 GB) ca. 50 Euro und für den Pi 4 (mit 4 GB) ca. 100 Euro. Das sind zwar immer noch astronomische Preise, aber sie fallen und die Verfügbarkeit wird besser. In diesem Artikel möchte ich ein altes Bastelprojekt aus der Mottenkiste holen, über das ich schon vor 2 Jahren geschrieben habe: das Badezimmerradio.
Ich höre morgens unter der Dusche gerne Radio, Internetradio ohne Gelaber, um genau zu sein. Um das zu realisieren, habe ich einen alten Raspi 3 genommen, eine Soundbar per 3.5 Klinke an den Raspi angeschlossen und ein kleines Shell-Skript geschrieben, das jeden Morgen zu bestimmten Zeiten das Radio an- und ausschaltet. Somit muss ich, wenn ich das Bad schlaftrunken betrete, nur die Soundbar einschalten und wieder ausschalten, wenn ich im Bad fertig bin. Das ist für mich höchster Badkomfort mit einfachen Mitteln.
Diese Lösung läuft bei mir seit zwei Jahren ohne Problem, bis ich vor ein paar Tagen das Upgrade auf Debian 12 gefahren habe. Über das Problem und seine Lösung lest ihr in diesem Artikel.
Wenn ich dem Problem einen Namen geben soll, würde ich es "Raspi Audiostack" nennen. Damit habe ich auf allen meinen Raspis Querelen gehabt. Bisher hat das Badezimmerradio mpv verwendet, um den Audiostream des Internetradiosenders abzuspielen. Seit dem Debian 12 Upgrade weiss mpv nicht mehr, an welche Audio-Senke es seine Ausgabe senden soll. Nach ewigem Herumprobieren habe ich herausgefunden, dass die Anwendungen speaker-test und omxplayer ohne Umstände die Audio-Ausgabe an die per Klinke angeschlossenen Lautsprecher wiedergeben. Sicherlich gibt es auch für mpv eine Lösung, die ich noch nicht herausgefunden habe.
Also habe ich mein Skript kurzerhand umgeschrieben, damit es omxplayer statt mpv verwendet. Uns so sieht es aus:
#!/bin/bash
# Cron starts internet radio stream
# Description
# Add to crontab with: crontab -e
# 30 6 * * 1-5 /home/pi/dev/badradio/radio_cron.sh
# At 06:25 on every day-of-week from Monday to Friday
# 30 10 * * 6-7 /home/pi/dev/badradio/radio_cron.sh
# At 10:30 on every Saturday and Sunday
# check crontab registration with: crontab -l
#
# Shell script:
# changes directory to the script folder
# appends 'started + datetime' to log-file
# starts omxplayer with internet-radio stream (and continues with next script commands '&')
# sleeps for 120 minutes
# stops all running omxplayer.bin processes
# appends 'stopped + time' to log-file
#
# The Script:
cd ~/dev/badradio/;
echo started: `date` >> radio_cron.log
omxplayer http://stream02.iloveradio.de/iloveradio2.mp3 &
sleep 120m
killall omxplayer.bin
echo stopped: `date +%T` >> radio_cron.log
Viel muss ich dazu nicht erklären, weil die Kommentare im Skript die Beschreibung übernehmen. Eigentlich sind nur drei Zeilen und die Einträge in der Crontab relevant:
omxplayer http://stream02.iloveradio.de/iloveradio2.mp3 &
sleep 120m
killall omxplayer.bin
Die erste Zeile startet den Player mit einem beliebigen Internetradiostream. Dann läuft die Radiowiedergabe für zwei Stunden, wonach der Player gestoppt wird. Die übrigen Zeilen im oben gezeigten Skript schreiben Log-Einträge für den Start- und Stopp-Zeitpunkt der Wiedergabe; kann man weglassen.
Damit das Ganze zu bestimmten Zeiten an Wochentagen und am Wochenende losläuft, werden Einträge in die Crontab benötigt, die im Skriptkommentar beschrieben sind. Falls euch Cron Spanisch vorkommt, empfehle ich diese beiden Seiten: Cron bei Ubuntuusers und Crontab.guru, um die Zeiteinstellung auszuprobieren.
Falls jemand weiss, wie man mpv beibringt, auf welchen Audiooutput es spielen soll, bin ich für Hinweise in den Kommentaren dankbar. Ich könnte jetzt noch viel zu ALSA, PulseAudio und Pipewire schreiben, was ich mir jedoch erspare, weil ihr das bestimmt in den Kommentaren nachholen werdet.
Vergangenes Wochenende gab's einen passenden Vortrag dazu: https://media.ccc.de/v/froscon2023-2878-wie_hort_man_heute_radio
Hier gibt es einen älteren Thread zum Thema MPV und Sinks, vielleicht hilft der: https://github.com/mpv-player/mpv/issues/1196
Cool … Ich hatte allerdings erst englisch „bad radio“ gelesen – stimmt hier ja (zeitweise) auch … aber 2 Stunden im Bad? ;)
Ich brauche 15 Minuten im Bad, aber das Radio weiss nicht, wann ich komme und gehe. Deshalb die 2 Stunden.
Hilft zwar nicht bei deinem mpv problem, aber ich verwende dazu volumio. Dort kannst du dann im GUI wecker stellen wann es (und was) loslaufen soll. Mittlerweilen habe ich das im ganzen haus verbaut. Fast alle mit einem digiamp oder hifiberry HAT. Sehr schick das ganze. Vor allem weil man dann an die pi's auch noch sensoren hängen kann (bei mir magnetschalter, pir, temperatur sensoren und andere "witzige" sachen die dann bei einem event einen ton abspielen). Aus sicherheitsgründen kann ich nicht ins detail gehen... 😁
Addon für Firefox https://addons.mozilla.org/de/firefox/addon/worldwide-radio/
....und gut ist.
Nein, das ist doch ein ganz anderer Use Case. Das Radio soll automatisch an- und ausgehen.
Du könntest JACK als Audioserver benutzen und diesen mit Deinem Script stets für das hw:0 Audiointerface konfigurieren. Beim internen Raspberry Pi Audiointerface brauchst Du eine hohe Frames-Einstellung von vmtl. min. 1024. Das ArchWiki ist ein gutes Nachschlagewerk: https://wiki.archlinux.org/title/JACK_Audio_Connection_Kit
Den mpv startest Du dann wie folgt: mpv --ao=jack
Laut Dokumentation sollte die Option --jack-connect=yes default sein, sodass automatisch mit den Klinkenausgang verbunden werden sollte (s. https://mpv.io/manual/master).