Airplay-Sender: Owntone

Es gibt Hunderte Anleitungen für RPi OS, um einen AirPlay-Receiver einzurichten, oft ist die Funktionalität schon Teil des Systems (Volumio, KODI). Aber die eigentlich praktischere Variante, nämlich Audio über AirPlay zu einem vorhandenen und meist auch teuren Audiosystem zu senden, wird sehr wenig besprochen.
Owntone ist ein DAAP-MediaServer, der sich elegant über die Apple Remote-App steuern lässt.
Installationsanleitung hier: https://forums.raspberrypi.com/viewtopic.php?t=49928

In meinem Fall soll die Remote-App auf meinem Handy die Radiostreams auf dem „Owntone-Device“ steuern, ohne selbst mit irgendwelchen Streams belästigt zu werden. Dafür muss ein Pairing mit dem Service durchgeführt werden.

Meine Stationen liegen alle in einzelnen M3U-Files, der Vorteil ist ein Touch-Eintrag pro Station. Man kann sie auch in eine Datei legen, aber dann muss man über die Remote-App erst in die Datei selber (e.g radios.m3u) und dann dort die Station auswählen.

Die Ausgabe wird über das Setting-Menü in Owntone eingestellt, hier kann man final seine Speaker auswählen. Btw: Volumio unterstützt ebenfalls externe Speaker, aber für dieses Feature muss man bezahlen.

Raspiaudio+ V2

Das DAC V2 (orange) von Raspiaudio wird nicht mehr vertrieben, stattdessen gibt es jetzt die Variante V3 (blau). Die Installation ist gleich wie bei V2, siehe Forum, in meinem Fall will ich das Videolooper-Setup dokumentieren.
Hier die Auszüge aus der /boot/video_looper.ini, hw_device ist nicht nötig, aber sound = alsa muss eingeschaltet sein.


# ALSA hardware device to use for sound output. This consists of the card
# number and subdevice number separated by a comma, e.g. '1,0'. Run
# 'aplay -l' to list available devices. If empty, the default output device is
# used.
hw_device =
#hw_device = 1,0
...
# Sound output for omxplayer, either hdmi, local, both or alsa. When set to
# hdmi the video sound will be played on the HDMI output, and when set to local
# the sound will be played on the analog audio output. A value of both will
# play sound on both HDMI and the analog output. A value of alsa will play
# sound through ALSA, using the device specified in the [alsa] section above.
# The both value is the default.
#sound = both
#sound = hdmi
#sound = local
sound = alsa

In der /boot/config.txt ist nur der hifiberry-Zusatz wichtig und Onboard-Audio aus.


# Enable audio (loads snd_bcm2835)
# dtparam=audio=on

# dac
dtoverlay=hifiberry-dac

Damit ist Audio über den Miniklinken-Ausgang eingeschaltet.

IKEA-Videoframe (KODI)

Ein KODI-Server lungert schon seit Jahren bei mir rum, aber es war mal Zeit für was Aufregendes. Bei IKEA findet man Praktisches und Schönes, ein Bilderrahmen lässt sich unauffällig in ein anderes Bild-Ensemble integrieren.
Die Elektronik muss klein und vor allem ohne grosse thermische Belastung auskommen, die aktuellen SSD-Preise (hier 29 Eur für 500 GB) lassen das zu und man kann endlich die alten mechanischen HDs rauswerfen.
Softwareseitig kommt LibreELEC Version 10 für RPi 3 zum Einsatz, die anderen Varianten, Version 11 und 12 für RPi 3 funktionierten nicht auf Anhieb, und das war auch Teil des Projektes, nämlich so schnell wie möglich Out-of-the-Box loslegen zu können. Das System auf dem RPi und die Daten auf der externen SSD sind getrennt benutzbar.
Die LibreELEC-Einrichtung erfordert den WLAN-Zugang, Hostname und SMB-Service-Einstellung, das dauert eine Minute, die angeschlossene Festplatte wird als externe Quelle mit der Formatierung MS-DOS (Dateigrössen-Limitierung 4 GB) erkannt.

Als Client für die Inhalte auf einer AppleTV-StreamingBox kommt Infuse zum Einsatz, die Anmeldung erfolgt über die Option „Anonymer Login“ und dort wird die Festplatte als „Favorit“, hier „Video500“, definiert. Danach sind alle Inhalte darüber verfügbar.

Unter macOS kann man eine konstante Datenrate von ca. 10 MB/s erreichen, das wäre auch das Maximum für die RPi-Hardware, also in einer Stunde könnte man 39 GB transferieren.
Alles in allem ein sehr nützliches und vor allem zuverlässiges Gerät, ähnliche Konfigurationen benutze ich schon mehrere Jahre ohne Ausfälle. Die Gesamtkosten betragen bei heutigem Stand 75 Euro plus Mini-SD-Karte und Stromversorgung, das ist nicht zuviel für eine elegante und langlebige Lösung.

BOM:

IKEA Vaestanhed Bilderrahmen

Intenso SSD 500 GB

SATA-USB-Adapter

Raspberry Pi 3A+

Player „Universal“ (Audio/Video)

Complete Image (with Button on Pin 11 and 9):
http://rootfriend.com/videolooper-masterimage

Manual (Audio):

1. Connect Speaker or Head-Phones at the Audio-Connector
2. The Loop will start automatically after Power-On (Audio-Files need to be MP4 or M4A)
3. Re-Start the Audio-Loop with the Button on the Front

Manual: (Video)

1. Connect Screen at the HDMI-Connector
2. The Loop will start automatically after Power-On (Video-Files need to be MP4)
3. Re-Start the Video-Loop with the Button on the Front

Undervoltage-LED, external

Über dmesg kann man den „Undervoltage“-Status auslesen und an eine externe LED anzeigen lassen. Das macht Sinn bei Custom Cases, bei der die Onboard-LED nicht zu sehen ist. Ausserdem kann man seinen eigenen „Alert Mode“ definieren: blinken, leuchten, blinken-leuchten, flimmern, flackern. Testen kann man das mit diversen Netzteilen und/oder Stromversorgung über Computer-USB, die in der Regel zu gering definiert ist, um einen Raspberry Pi zu betreiben. Liegt natürlich auch am jeweiligen Modell. Achtung: die Schreibweise von „Undervoltage detected!“ ändert sich auch mal entsprechend der Raspberry-Pi-OS-Versionen, z.B. „Under-voltage detected“, dieser String muss natürlich passen.


#!/bin/bash
while [ $loop 1 ] ; do
dmesg | grep -iC 3 "Undervoltage detected!"
if [ $? != 0 ]
then
    echo "normal voltage" &>/dev/null
else
    sh /home/pi/LED/voltage-led
    echo "under voltage" &>/dev/null
fi
sleep 1
done
sleep 0
done

Audioplayer „1120“

Dieser Player im Peli-Koffer, Model 1120, ist eigentlich ein DevKit für Volumio. Eine Idee hier war, die Lieblingsradiostation anzuwerfen und grob über Play/Pause zu steuern. Basis ist ein RPi 3A+, Audio Out erfolgt über das IQaudio DAC+ , das Akkupack kann man von aussen über Micro-USB aufladen.

Ganz wichtig: die GPIO-Steuerung (über das Volumio-GPIO-Buttons-Plugin) muss den Default-Pull-Status der einzelnen Pins respektieren, den kann man hier einsehen: https://community.volumio.com/t/plugin-gpio-control-control-gpio-with-volumio2-events/10173/47. Bedeutet konkret in meinem Fall: GPIO8 geht auf Masse, GPIO25 geht aber auf 3,3V.