Rund um die Squeezebox ...

Squeezebox

[Squeezebox Nachbau]

Die ehemalige Logitech Squeezebox war bzw. ist ein feines System um eine größere Musiksammlung 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:

  • Meist praktisch keine ordentliche Bedienmöglichkeit (außer Smartphone).
  • Kein Display um aktuellen Titel anzuzeigen oder eine Auswahl zu treffen
  • Abhängigkeit von Cloud-Diensten bzw. der Verfügbarkeit des einen Anbieters der die Hardware herstellt.
  • Komplette Konzentration auf eine Steuerung durch ein Smartphone
  • Geschlossenes System - nur bestimmte Steuerprogramme / Apps und Anwendungsszenarien sind unterstützt bzw. vom Hersteller "gewünscht".
  • Trotz problemloser und kostenfreier Verfügbarkeit der Quelltexte für eine Implementierung können meist keine ogg-Vorbis Dateien abgespielt werden und müssen (on-the-fly) konvertiert werden.
  • Oft verblüffend unkomfortabel wenn viele Musikdateien vorhanden sind.
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.

Offene Plattform

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.

Raspberry PI2 Player mit 7" Touch Display

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. Leider gibt es nur ein relativ teueres Gehäuse das für diesen Aufbau geeignet ist und dies muß leider auch noch nachbearbeitet werden. Als Software verwende ich den piCore Player. Dieser basiert auf TinyCore Linux, SqueezeLite als Player und Jivelite als grafische Steuerung.

Hardware...

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

Kurz hier der Aufbau. Angefangen wird mit dem 7" Touch Display des Raspberry PI Boards welches mittlerweile schon vormontiert geliefert wird.

[Raspberry PI 7 Zoll Display Platinenseite]

Darauf wird dann direkt das Raspberry PI Board auf die vorgesehenen Abstandshalter gelegt um die weitere Montage voranzutreiben.

[Board während der Montage]

Hier habe ich direkt die nötige Verbindung für die 5V Spannungsversorgung von Display bzw. Raspberry PI Board hergestellt um diesen Zwischenschritt zu testen. Eigentlich muß ja direkt das HifiBerry-Digi+ Board auf das PI Board montiert werden. Im folgenden Bild habe ich die nackte Platine fotografiert wie man sie z.B. bei Reichelt bestellen kann. Auf dem Platz "P3" muß eine 2 polige 90° Pfostenleiste eingelötet werden, damit die Spannungsversorgung des Displays weiter sichergestellt werden kann. Im Bild habe ich den entsprechenden Platz "P3" mit einem roten Pfeil markiert.

[Hifiberry Digi+]

Beim Hifiberry Digi+ Board sind 4 Kunststoff Distanzhülsen dabei. Diese müssen um ca. 2 mm gekürzt werden, ansonsten passt die Cinch Buchse für die elektrische SP/DIF Schnittstelle nachher nicht ins Gehäuse herein. Hierzu habe ich die Distanzhülsen auf der Seite mit dem Innengewinde einige Male über ein 120er Schleifpapier gezogen bis die 1~2mm abgetragen sind. .

[Raspi Komplettaufbau]

So sieht der Aufbau dann komplett ohne Gehäuse aus. Am Anschluß P3 liegen glücklicherweise GND und 5V an, so daß man hieraus die Spannungsversorgung des Displays sicherstellen kann.

Im nächsten Schritt muß die Mittelachse der Cinch Buchse des Hifiberry Boards gegen die analoge Audiobuchse des Raspberry Boards vermessen werden und auf dem Gehäuse angezeichnet werden. Dann kann man ein 4 oder 5 mm Loch bohren. Ich habe leider keine Tischbohrmaschine daher durfte ich mit dem Akkuschrauber nur ein kleines Loch bohren, da ansonsten das Risiko besteht, daß der Bohrer beim Bohren ins Bohrloch gezogen wird und die Kräfte für das Kunststoffgehäuse zu groß werden.

Mangels anderer Werkzeuge habe ich die weitere Ausformung des nötigen Gehäuseausbruchs komplett mit Laubsäge und Feile gemacht. Dazu habe ich eine gute Stunde gebraucht. Im Bild sieht man einen Zwischenschritt während der Bearbeitung. Immer wieder muß der Staub weggeblasen werden und die Passgenauigkeit des kompletten Platinenaufbaus getestet werden. Der Ausbruch für die Cinch Buchse geht genau bis an die obere bzw. im Betriebszustand hinteren Gehäusekante. Wenn man im obigen Schritt die Distanzhülsen entsprechend gekürzt hat bleibt ein kleines bißchen Abstand.

[Raspi Gehaeuse]

Raspberry PI2 Player mit PiFace Control Interface

Dieser im folgenden Beschriebene Aufbau hat zwar den Vorteil der IR Bedienbarkeit, mangels ordentlicher Audioausgabe bleibt die Wiedergabequalität aber leider hinter der nötigen Hifi-Qualität zurück. Mit einem AV Receiver kann man natürlich den HDMI Ausgang nutzen und dann ist es natürlich ebenso ein interessanter Aufbau. Der Analoge Augang des Raspberry PI ist allerdings als Hifi Interface nicht zu gebrauchen.

[Bild des Boards im Gehäuse]

Ideal als Basis ist die modifizierte Version von Squeezelite von github.com/fpasteau/squeezelite. Diese Version von Squeezelite enthält unterstützung für ein kleines (LC)-Display (via LCDd), Tastatur- und IR-steuerung über die LIRC-Bibiliothek. Der Entwickler beschreibt seinen Umbau sehr schön.

Wichtige Basisdienste sind bei dieser Konfiguration der LCDd für die Anzeige auf dem 16x2 LCD Display und LIRC für die Nutzung einer IR Fernbedienung. Interessanterweise muß man recht viel auch an der Software basteln.

SPI und IR Schnittstelle Kerneltreiber

Das PiFace Control 2 + Display Board hat das 16x2 LC Display via dem SPI Interface an die CPU angebunden. Erstmal muß man das mit raspi-config aktivieren bzw. folgendes muß in /boot/config.txt landen.

# Enable audio (loads snd_bcm2835)
dtparam=audio=on
dtparam=spi=on
dtparam=i2c_arm=on
dtoverlay=lirc-rpi,gpio_in_pin=23
			

Leider sind das noch nicht alle Arbeiten die zu erledigen sind. In /etc/modules habe ich ebenfalls das lirc-rpi mit der entsprechenden Option für lirc aufgenommen. Allerdings wird das wohl direkt vom Bootloader geladen. Sind die Module geladen sollte man gleich die Funktion der Hardware über die Software sicherstellen.

LCDd

Das LC Display ist via SPI Bus angeschlossen. Aus meiner Sicht etwas ungewöhnlich. Jedenfalls muß folgendes in /etc/LCDd.conf eingestellt werden:

[server]
DriverPath=/usr/lib/arm-linux-gnueabihf/lcdproc/
Driver=hd44780
NextScreenKey=Right
PrevScreenKey=Left
ReportToSyslog=yes
ToggleRotateKey=Enter
ServerScreen=no

[hd44780]
ConnectionType=pifacecad
Device=/dev/spidev0.1
Size=16x2
Backlight=no
und damit ist man noch nicht fertig. Der neue Kernel hat noch ein Problem mit der SPI Schnittstelle. Das habe ich dann gesehen, als das Display-Licht nach dem Starten nur geflackert hat und nix sinnvolles kam. Der Artikel Not working with new kernels #4 hat mich dann aber auf die Lösung gebracht. In lcdproc muß man noch eine Änderung für den neuen Kernel vornehmen die dort der Nutzer "barcoboy" am 5.4.2015 beschrieben hat. Man muß das lcdproc mit allen Treibern neu übersetzen, es reicht dann aber nur das hd44870.so File nach /usr/lib/arm-linux-gnueabihf/lcdproc/ zu kopieren. Danach ist das LCDd "zum Leben erweckt" und der LCDd zeigt noch einem nackten Start die Systeminformationen im Display an.

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 /etc/lirc/lircd.conf herunter und installieren sie ebenda (ansonsten halt die Tastencodes manuell anlernen, geht auch recht flott.

Danach muß man im Home von ~root eine Konfiguration anlegen - welche Taste soll quasi "virtuell" gedrückt werden, wenn ein IR Signal erkannt wird. Dieser "Tastendruck" funktioniert aber nur, wenn die Appliation die lirc_lib eingebunden hat und sich selber einen Namen gibt (obiger Squeezelite Patch nennt sich selber squeezeslave). Ich habe in lircrc meine Konfiguration mal gespeichert. Die Fernbedienung (eine alte Sony RM-892) habe ich manuell angelernt, allerdings nur die Basissachen. Die muß man sicher manuell anpassen.

Squeezelite

Um Squeezelite richtig zu starten habe ich noch folgende Optionen in /etc/default/squeezelite aktiviert

SL_NAME="$(hostname -s)"
SL_SOUNDCARD="sysdefault:CARD=ALSA"
SB_EXTRA_ARGS="-T -L -a 80:::0 -i -F /root/.lircrc"

Dadurch wird der Hostname als Squeezeboxname gesetzt, das richtige Audiointerface gesetzt und insbesondere LCD und Infrarotunterstützung aktiviert. Damit die IR-Konfiguration auch gefunden wird, wird die Konfigurationsdatei mit -F vorgegeben. Die Option "-T" steht für das "slimp3" Textinterface. Das hat wird auch vom Logitechmediaserver so gesteuert, d.h. Scrollgeschwindigkeit etc. kann man im Webinterface des LMS einstellen - was recht komfortabel ist.

Der Programmierer der Squeezelite für IR und LCDd angepasst hat, hat noch eine Kleinigkeit vergessen. Im Quelltext kann man in der Datei interactive.c noch folgende Änderung machen, dann kann man die Box auch ausschalten

unsigned long getircode(int key) {
    unsigned long ir = 0;

[...]
	 case 'w': ir = 0x768940bf; break; /* power */
    /* non-IR key actions */

In der Funktion getircode ist das Mapping der Tastatureingaben auf die IR Steuercodes des orginal-Squeezeboxen abgelegt. Die "Power"-Taste hat gefehlt, deshalb habe ich die Zeile mit dem "case 'w'" hinzugefügt. Anhand der Datei /usr/share/squeezeboxserver/IR/Slim_Devices_Remote.ir auf einer LMS Installation habe ich den entsprechenden Code herauslesen können.

© Carsten Groß - Letzte Änderung 14.04.2016 13:58 - Impressum