Rund um die Squeezebox ...

Einführung zur Squeezebox

[Squeezebox Nachbau]
Raspberry PI basierender Squeezebox-Nachbau, im neuen Gehäuse ("Smarticase") mit IR-Fernbedienbarkeit

Die ehemalige Logitech Squeezebox war bzw. ist ein feines System um eine größere Musiksammlung und Radioprogramme in sehr guter Qualität auf eine Stereoanlage streamen zu können. Leider wurde die Produktion der Hardware im Jahr 2012 eingestellt.

Es gibt zwar mittlerweile etliche Geräte die Netzwerkfunktionalität bieten. Allerdings haben die Lösungen immer einen oder mehrere dicke Haken:

Im Gegensatz dazu steht der Logitech Mediaserver, der zwar kein UPnP Server ist, aber dafür Open-Source und insbesondere für die Verwaltung vieler Musikdateien sehr gut geeignet ist. Die neuen Versionen sind stand-alone fähig und laufen auch ohne Zugriff auf das Internet. Da es - obwohl die Anfänge ins Jahr 2000 zurückreichen - eine offene Plattform ist, gibt es natürlich auch gute Unterstützung für moderne Smartphones und Steuerprogramme für den PC.

Nachbauideen

Da es sich um eine offene Plattform handelt deren Protokoll und Konfiguration beschrieben ist gibt es mittlerweile viele Nachbauideen. Viele basieren auf dem Raspberry PI Board und dem "Headless"-Player squeezelite. Für komfortables Abspielen habe ich mir einen Player basierend auf dem Raspberry PI 2 Model B Board mit dem 7" Touch Display zur Steuerung und Hifiberry-Digi+ für die Audioausgabe gebaut. Zwei meiner Player enthalten jetzt einen Raspberry Pi 3. Der hat den Vorteil der WLAN Unterstützung. Mittlerweile gibt es ein preislich attraktives Gehäuse, das SmartiCase mit passender Abdeckung. Die Gehäuseabdeckung (ordentlich funktioniert nur die große, 37mm tiefe Abdeckung) muß minimal nachgearbeitet werden, damit die SPDIF Kabel eingesteckt werden können. Als Software verwende ich den piCore Player. Dieser basiert auf TinyCore Linux, SqueezeLite als Player und Jivelite als grafische Steuerung und ist in gewissen Rahmen konfigurierbar.

Hardware...

Folgende Teile verwende ich für den Aufbau Raspberry Pi2 Model B bzw. Raspberry Pi3 Model B, original 7" Touch-Display, Hifiberry Digi+ oder Hifiberry DAC+ und ein recht gut passendes Gehäuse (siehe jeweils unten). In meinem Setup übernimmt ein PoE Splitter die Stromversorgung, dadurch kann das Board z.B. Nachts automatisiert abgeschaltet werden (zentral per Software gesteuert).

Die neuen Versionen des piCorePlayer haben IR Support. Dieser basiert auf lirc. Da muß man ein paar Details anpassen damit es wirklich so eingerichtet ist, das wichtige Details funktionieren.

Raspberry PI mit Display und IR Empfänger im Smarticase

[Squeezebox Nachbau]
Raspberry PI basierender Squeezebox-Nachbau, mit DVB-C Streaming Empfang

Ich habe alle Player für das Smarticase mit Fernbedienbarkeit umgebaut. 3 Player sind mit SPDIF Ausgang (Hifiberry Digi+), einer mit Analogausgang (Hifiberry DAC+), weil das Zielsystem nur einen Analogeingang hat.

Der Einbau von Display und Raspberry PI Board ins Smarticase beschreibe ich hier nicht. Das haben schon andere erledigt. Hier im folgenden Text beschreibe ich insbesondere die Arbeiten für den IR Empfänger und für LLDP Unterstützung, damit man jeweils nachvollziehen kann, welcher Player wo am Netzwerk-Switch hängt.

Einbau des IR Empfängers

Hardwarearbeiten für den IR Empfang

In alle Player habe ich einen IR Empfänger TSOP 4838 eingebaut. Die Empfindlichkeit dieses Bauteils ist für die verwendeten Steuercodes völlig ausreichend und man kann den Player aus mehreren Metern Entfernung in verschiedenen Winkeln zuverlässig steuern. Der IR Empfänger muß an 3,3V, GND und GPIO Pin24 des Raspberry PI Boards angeschlossen werden. Hierzu müssen in das Smarticase zwei 4,5 mm große Löcher gebohrt werden. Durch das eine Loch (nach vorne) kann der IR Empfänger "nach außen schauen" und die IR Signale empfangen. Das andere Loch dient dazu das Kabel ins Smarticase und dort drinnen dann zum Raspberry Pi zu führen.

[Gebohrte Löcher]
Die am Smarticase erforderlichen Löcher für den Empfänger und die Verkabelung des IR Empfängers

Die Anschlußdrähte habe ich mit Isolierband gesichert und dann mit einem kurzen Stück Schrumpfschlauch eingeschrumpft.

[IR Empfänger] [Verlegung Anschlußkabel]
Montage des IR Empfängers direkt mit zwei 4,5 mm Löchern am Smarticase vorbereitet und verkabelt.

Der IR Empfänger kann dann direkt auf das Loch geklebt werden. Vorsichtige Naturen nehmen einen lösbaren Kleber oder Isolierband.

[Anschlußkabel] [Detail: Eingebauter Empfänger]
Hinführung der Kabel des IR Empfänger zum Raspberry PI Board. Das weitere Bild zeigt den fixierten IR Empfänger am Gehäuse

Verkabelt man den IR Empfänger wie beschrieben, so steht das nicht im Weg mit dem I2C und dem SPI Bus den der Audiocontroller auf der Zusatzplatine braucht. Hier landet das dekodierte IR Signal an GPIO Pin 24. Die anderen beiden Pins sind Masse und 3,3 V (siehe das interaktive Raspberry PI pinout). Der 5V Zweig des Displays wird über die Hifiberry Digi+ Platine an das Pi Board weitergeschickt.

[Anschluss IR Empfänger]
Anschluß der 5V Versorgung und des IR Empfängers auf der Hifiberry DAC+ Platine

Softwareanpassungen damit der IR Empfang klappt

Folgendes muß zur Aktivierung des IR Empfängers über die Shell des piCore Player konfiguriert werden

sudo mount /mnt/mmcblk0p1
Edit /mnt/mmcblk0p1/config.txt
Add at the end of file dtoverlay=lirc-rpi,gpio_in_pin=24
sudo umount /mnt/mmcblk0p1

Zusätzlich muß das Paket lirc auf dem picore Player installiert werden. In diesem Posting im Squeezeboxforum kann man grundsätzlich nachschauen wie der IR Support aktivert wird. Allerdings bezieht sich das offensichtlich auf eine ältere Version. Mit dem piCore Player 3.22 reicht die o.g. Konfigurationsanpassung, die Installation von lirc und die ganz unten beschrieben Anpassung der User Commands aus. Eine angepasste lircd.conf wird aber natürlich benötigt.

lirc

Damit squeezelite auch über eine IR Fernbedienung gesteuert werden kann muß eine Fernbedienung angelernt werden. Dies geschieht mit der Application irrecord. Faule Menschen gucken aber zuvor einfach in der Datenbank schon gelernter IR Fernbedienungen vorbei und holen sich die Konfigurationsdatei /usr/local/etc/lirc/lircd.conf herunter und installieren sie ebenda (ansonsten halt die Tastencodes manuell anlernen, geht auch recht flott. Wenn man es ganz einfach haben will kann man die u.g. HAMA Fernbedienung mit meiner unten verlinkten Konfiguration verwenden. Damit die Datei über einen reboot hinaus gespeichert wird, muß die Anpassung aus dem oben verlinkten Forenartikel gemacht werden und die Konfiguration gesichert werden.

Die folgenden Dateien spielen eng zusammen

Am besten funktioniert die Steuerung von jivelite über virtuelle "Tastaturkommandos" die lircd direkt an die Applikation sendet. In lircd.conf werden die Tastendrücke konfiguriert, die in InputToActionMap.lua zur Steuerung von jivelite akzeptiert werden.

Eine richtige Fernbedienung verwenden

Damit das ganze richtig nett funktioniert und ich nicht auf eine Fernbedienung aus meiner eigenen Grabbelkiste angewiesen bin habe ich mir eine mit Codes programmierbare Universalfernbedienung gekauft und angelernt. Ich beschreibe es hier, weil das wahrscheinlich für viele das Leben einfacher macht. Ich verwende die unten genannte Fernbedienung mit der Version 3.22 von piCore Player.

Gekauft habe ich eine Hama 4-in-1-SmartTV Universalfernbedienung für knapp 10 Euro bei Amazon (weil die recht preiswert war, keine Kritiken über plötzliches Versagen zu finden waren und nur 2 * AAA Batterien gebraucht werden). Ich habe auf die TV Funktion den Panasonic TV Code 5511 eingestellt, das ist offensichtlich eine Fernbedienung die RC-5 Codes verwendet. (Auf dieser FB: Lange Setup drücken bis die LED unter der Power Taste leuchtet, dann "TV", dann 5, 5, 1, 1. Die LED geht dann aus). Hier ist die von mir erstelle Konfigurationsdatei für diesen Code.

Diese Konfigurationsdatei muß man auf dem piCore Player nach /usr/local/etc/lircd/lircd.conf kopieren und danach die Konfiguration sichern (damit es über einen Reboot erhalten wird). Damit funktionieren alle mir wichtigen Funktionen:

[Hama Fernbedienung]
Die Fernbedienung mit dem Codebüchlein. Für die hier verlinkte Config muß der Panasonic TV mit id 5511 auf dieser FB eingestellt werden

LLDP Support

Am Schluß habe ich mir noch ein kleines Tool angepasst bzw. gebaut. Damit weiß ich schneller welcher Player wo am Netzwerk-Switch angeschlossen ist. Dazu habe ich mir einen kleinen, extrem minimalistischen LLDP Dienst für die Player gebaut. Der LLDP-Dienst meldet auch den jeweiligen Strombedarf (maximal 10W) an, meine Player sind ja alle via PoE versorgt. Der LLDP Dienst ist extrem simpel und versendet nur alle 30s LLDP Nachrichten

Folgendes muß man auf seinem Linux-Desktop Rechner machen (vor oder nach dem Herunterladen, Debian/Ubuntu)

Nach dem Vorbereiten des Systems auf diese Weise kann der C-Code wie folgt für ARM Crosscompiliert werden:

arm-linux-gnueabihf-gcc -O2 -o basic-lldp basic-lldp.c

Dieses Binary basic-lldp wird mittels scp ins Home des Users "tc" auf dem jeweiligen piCoreplayer kopiert. Damit die Dateien im Home gesichert werden muß im Webinterface des piCore Player "Main Page"->Backup aufgerufen werden (Ansonsten ist es nach einem Neustart weg). Folgende "Tweaks" habe ich im Webinterface des piCore Player gemacht

User Command#1: echo 0 > /proc/sys/net/ipv4/tcp_window_scaling ; echo '4096 87380 256000' > /proc/sys/net/ipv4/tcp_rmem
User Command#2: /home/tc/basic-lldp
User Command#3: /usr/local/sbin/lircd --device=/dev/lirc0 --uinput

Ich bin sehr zufrieden mit diesem Setup.