Rund um die Squeezebox ...

Squeezebox

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 einige Geräte die versuchen das ganze nachzuahmen. Allerdings haben die Lösungen immer einen oder mehrere dicke Haken:

  • Meist praktisch keine lokale Bedienmöglichkeit oder über eine IR Fernbedienung
  • 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 PI 2 Model B mit PiFace Control + Display

Der eine Nachbau den ich mir aufgebaut habe ist ein Raspberry PI 2 Model B Board mit dem PiFace Control + Display Board. Dafür gibt es auch direkt ein Gehäuse und eine fertige Jessie Debian Distribution. Ich habe eine 4 GB Micro SD Karte mit dem Full-Desktop Image beschrieben (Na, das war natürlich Quark, weil ich gleich mal z.B. Wolfram etc. löschen mußte, da sonst der Platz nicht reicht).

[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.01.2016 00:30 - Impressum