Raspi Badradio reloaded

  Ralf Hersel   Lesezeit: 4 Minuten  🗪 8 Kommentare

Wer seine Raspis auf Debian 12 upgraden möchte, sollte sich auf Schwierigkeiten beim Audio-Stack gefasst machen.

raspi badradio reloaded

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.

Tags

Raspberry Pi, Raspi, Debian-12, Audio, Radio

neffets
Geschrieben von neffets am 8. August 2023 um 12:05

Vergangenes Wochenende gab's einen passenden Vortrag dazu: https://media.ccc.de/v/froscon2023-2878-wie_hort_man_heute_radio

Naja
Geschrieben von Naja am 8. August 2023 um 14:25

Hier gibt es einen älteren Thread zum Thema MPV und Sinks, vielleicht hilft der: https://github.com/mpv-player/mpv/issues/1196

kamome
Geschrieben von kamome am 8. August 2023 um 20:22

Cool … Ich hatte allerdings erst englisch „bad radio“ gelesen – stimmt hier ja (zeitweise) auch … aber 2 Stunden im Bad? ;)

Ralf Hersel
Geschrieben von Ralf Hersel am 13. August 2023 um 17:35

Ich brauche 15 Minuten im Bad, aber das Radio weiss nicht, wann ich komme und gehe. Deshalb die 2 Stunden.

The_Raven
Geschrieben von The_Raven am 8. August 2023 um 21:29

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... 😁

Uwe
Geschrieben von Uwe am 11. August 2023 um 20:05
Ralf Hersel
Geschrieben von Ralf Hersel am 13. August 2023 um 17:39

Nein, das ist doch ein ganz anderer Use Case. Das Radio soll automatisch an- und ausgehen.

this.ven
Geschrieben von this.ven am 23. August 2023 um 12:39

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).