Lyrion Music Server

Als Sonos-User der allerersten Generation war ich begeistert von der Flexibilität und Einfachheit dieses Systems. Nach und nach haben sich die Wolken am Sonos-Himmel verdichtet (siehe Sonos: Gut zu wissen) . Deswegen habe ich mich nach einer Alternative ungeschaut und wurde bei Lyrion Music Server (ehem. Logitech Media Server) fündig.

Das Sonos-System war damals revolultionär. Die Kombination von „Software und Lautsprecher“ macht es unglaublich flexibel. Der grosse Vorteil ist aber geichzeitig auch ein Nachteil. Da sich die Software weiter entwickelt (aus firmenpolitischen Gründen oder auch tatsächlich für neue gute Funktionen), wird auch an die Hardware (in diesem Falle an Prozessor und Arbeitsspeicher) neue Anforderungen gestellt. Die Hardware kann dann irgendwann nicht mehr mithalten und muss ersetzt werden. Dazu kommt dann noch der Fakt, dass auch Sonos am Markt bestehen muss und auf neue Verkäufe angewiesen ist. Das alles ist nicht wirklich nachhaltig.

Meine 10 Sonos-Boxen habe ich deswegen verkauft und mit dem Erlös durch folgendes Setting ersetzt:

  • 10x JBL Control ONE Boxen (passiv) mit Raspberry Pi 3 inkl. HifiBerry
  • Auf den Raspis läuft bei mir Max2Play.
    => Für versiertere User kann auch einfach ein Squeezeplayer installiert werden.
  • 1x LMS auf einem Docker Container
    => Es kann aber auch gerne auf einem der Max2Play Installationen einfach ein Lyrion Music Server „per Mausklick“ gestartet werden.
    => Oder man nimmt sich einen weiteren Raspi und installiert einen dedizierten Lyrion Music Server darauf. Für Installation siehe weiter unten.

Im Prinzip habe ich mir einfach eine Squeezebox gebaut. Ich hätte mir auch einfach eine auf Ricardo besorgen können. Aber ich wollte etwas flexibleres. Der HifiBerry Amp2 liefert 60Watt Leistung. Also genügend um einfache passive Lautsprecher damit zu betreiben. Das ganze kann man als Stereo- oder auch als Mono-Setting konfigurieren.

Wie alle Lösungen hat auch mein Setting Vor- und Nachteile:

  • + Super flexibel, Gruppierungen genau wie bei Sonos möglich
  • + Dank OpenSource wird das System wird auch in 10 Jahren noch genauso lauffähig sein
  • + Keine lästigen „Feature Updates“
  • + Es kann jeder Music-Stream integriert werden. Meine Radio-Streams starten alle direkt ohne lästige Werbe-Jingles
  • + Spotifiy integration
  • + Sehr aktive Community
  • – Initialaufwand und etwas technisches Flair nötig

Mein Setting sieht in „Real Life“ folgendermassen aus:

Noch ein Blick auf die Software Web-Oberfläche, welche auch als auch als App verfügbar ist:

Installation LMS auf einem Raspberry Pi

Für jene die den Lyrion Music Server nicht über eine Max2Play Installation betreiben möchten (wie ich) hier noch die Beschreibung, wie dieser auf einem weiteren Raspberry Pi installiert werden kann.

Voraussetzung:

  • Raspberry Pi OS ist installiert
  • SSH Zugang ist eingerichtet

OS aktualisieren

sudo apt-get update && sudo apt-get dist-upgrade

Audio-Formate installieren

sudo apt-get install libsox-fmt-all libflac-dev libfaad2 libmad0

Download LMS

Die Versionen gibt es hier. Für den Raspi 4 brauchen wir die ARM Verison.

cd 
wget http://downloads.slimdevices.com/nightly/8.3/lms/fe81659879fef1a51537fb579b8e57b6a7b987d9/logitechmediaserver_8.3.0~1630708871_arm.deb
sudo apt install ./logitechmediaserver_8.3.0~1630708871_arm.deb

Log überprüfen, ob alles ok installiert wurde

tail -n 100 /var/log/squeezeboxserver/server.log

Links

ioBroker: Node.js Update / Reinstallation ioBroker

Update 20.2.2024

Neu ist das Update von node auf dem iobroker deutlich vereinfacht worden. Siehe auch hier und hier:

Siehe auch alle Consolen-Commands für iobroker hier.

iob stop             ## für iob fix muss iobroker gestoppt sein
iob fix
iob nodejs-update xx ## (mit xx eine GERADE Major Node.js version - Ungerade Versionen sind Entwicklerversionen)
sudo reboot

iob upgrade          ## bei Bedarf gleich alle Adapter mit aktualisieren

Wenn iobroker als lxc betrieben wird, muss das update-commando als iobroker ausgeführt werden:

su iobroker -s /bin/bash -c 'iob nodejs-update 20'

Auf dem LXC Container scheint das iobroker update-script nicht zu funktionieren. Also über die Pakete installieren:

NODE_MAJOR=20

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

apt update

apt upgrade

Deprecated:

Ich betreibe seit einigen Jahren ioBroker, welches auf nodejs basiert. Heute war es an der Zeit die Nodejs Version von 8 auf 12 anzuheben, was leider nicht ganz ohne Probleme funktionierte. Hier fasse ich kurz zusammen, welche Schritte bei meiner Installation nötig waren. Die Schritte basieren auf diesem Howto.

Die einzige, im Howto beschriebenen und für mich funktionierende Lösung für das Update war, die komplette Reinstallation des ioBrokers. Dabei wird zuerst die neue Node.js Version installiert. Dann ein Backup des iobroker-data Verzeichnisses gezogen, die ioBroker-Installation gelöscht, neu installiert und dann das Backup wieder zurück gespielt:

Installation neue Node.js Version 12

cd /opt/iobroker
iobroker stop
cd

# install nodejs
curl -sLf https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

# install iobroker
curl -sLf https://iobroker.net/install.sh | bash -

Bei einer Aktualisierung von Node.js müssen bereits installierte JavaScript- Module im ioBroker-Ordner aktualisiert werden, da sonst Fehler bei deren Ausführung auftreten. Hier traten bei mir dann die Probleme auf. Die einzige bei mir funktionierende Lösung war, den ioBkoker neu zu installieren:

Backup und Neuinstallation ioBroker

  • Backup des iobroker-data Verzeichnisses nach „Home“ ziehen
  • Die alte Installation löschen
  • ioBroker neu installieren
cp -r /opt/iobroker/iobroker-data ~/iobroker-data 
sudo rm -r /opt/iobroker/ 
sudo mkdir /opt/iobroker
cd /opt/iobroker
curl -sL https://iobroker.net/install.sh | bash -

ioBroker wird nach der Installation wieder gestartet. Wir stoppen ioBroker deswegen wieder:

iobroker stop

Nun löschen wir das neu erstellte iobroker-data Verzeichnis und kopieren das Backup

rm -r /opt/iobroker/iobroker-data
cp -r ~/iobroker-data /opt/iobroker/iobroker-data

Während meinen Installations-Bemühungen habe ich festgestellt, dass die Berechtigungen immer wieder durcheinander gehen. Es existiert deswegen ein korrektur-Script, welches die Berechtigungen des ioBrokers wieder gerade zieht. Es ist ratsam dieses jetzt durchzuführen:

cd /opt/iobroker
curl -sL https://iobroker.net/fix.sh | bash -

Jetzt den ioBroker neu starten

iobroker start

Der Start kann jetzt sehr lange dauern. Der ioBroker merkt jetzt, dass die Adapter (gem. Backup) fehlen und installiert diese neu nach.

Um zu schauen, wo die Installation steht, kann man das log konsultieren

tail -f /opt/iobroker/log/iobroker.current.log

Ein Adapter (zigbee) liess sich jetzt immer noch nicht installieren. Diesen habe ich dann noch manuell installiert:

cd /opt/iobroker
iobroker stop
sudo -H npm install iobroker.zigbee --unsafe-perm

Ganz zum Schluss dann nochmals die Berechitigungen gerade ziehen, um sicher zu gehen…

cd /opt/iobroker
curl -sL https://iobroker.net/fix.sh | bash -

Das wars. Jetzt den Raspi neu booten und sich über die neue ioBroker-Installation freuen 🙂

sudo reboot

Rasperry Pi SD Karte klonen

Hier beschreibe ich, wie man eine SD Karte eines Raspberry PIs aus dem laufenden Betrieb heraus klonen kann

Klone aus dem laufenden Betrieb

Siehe dazu auch den Forum-Eintrag https://forums.raspberrypi.com

  • Raspi mit angeschlossenem Card-Reader (inkl. darin enthaltener neuer SD Karte) starten
  • Anschliessend https://github.com/framps/rpi-clone.git installieren
    Original Repo war https://github.com/billw2/rpi-clone.git. Aber das wird nicht mehr unterhalten.
  • $ git clone https://github.com/framps/rpi-clone.git
    $ cd rpi-clone

Übersicht über die angeschlossenen Disks

lsblk -o NAME,FSTYPE,UUID,PARTUUID


In meinem Beispiel ist die im Raspi installierte SD-Karte „mmcblk0“ und die SD-Karte im USB Card-Reader „sdb“. Jetzt die SD Karte klonen

sudo ./rpi-clone -f sdb

Dies hat den schönen nebenefekt, dass man den Clone auch direkt auf eine kleinere Karte schreiben kann, sofern der genutzte Speicher im Ursprungslaufwerk die Kapazität des Ziellaufwerks nicht übersteigt.

Nun noch überprüfen ob die PARTUUIDs korrekt in cmdline und fstab gesetzt sind. Hierfür kann ein Tool verwendet werden

wget https://raw.githubusercontent.com/framps/raspberryTools/master/syncUUIDs.sh
chmod +x syncUUIDs.sh

sudo ./syncUUIDs.sh /dev/sdb
--- Root PARTUUID 8e8f4b9d-02 already used in /dev/sda1/cmdline.txt
--- Boot PARTUUID 8e8f4b9d-01 already used in /dev/sda2/etc/fstab
--- Root PARTUUID 8e8f4b9d-02 already used in /dev/sda2/etc/fstab

Hint Passwort

Beim letzten Clone hat es das Passwort des Sudo-Users „zerstört“ bzw. ich konnte mich auf der geklonten SD Karte nicht anmelden. Hiermit kann man das Passwort reseten (Ich habe Methode 3 benutzt): https://forums.raspberrypi.com/viewtopic.php?t=319398

Sonos: Gut zu wissen

Dieser Beitrag ist „Deprecated“. Sonos ist dabei das schöne Upnp mit ihrer neuen API abzulösen (siehe https://developer.sonos.com/). Es wird wohl zwei API-Versionen geben. Eine für private Developer, für welche eine Cloud-API zur Verfügung gestellt wird und eine für Firmen, welche ein „lokales“ API nutzen (und sich dafür zertifizieren) dürfen. Für Entwickler wie mich wäre also zukünftig das Ansteuern der Boxen nur noch über die Cloud möglich, was für mich nicht in Frage kommt. Ich hoffe Sonos bietet da dann doch noch etwas womit die Sonos Boxen über das LAN angesprochen werden können. Aktuell sieht es aber leider nicht so aus. Erste Funktionen, welche ich hier noch beschrieben habe, sind bereits durch Firmware-Updates herausgefallen (z.B. reboot). Wundert euch also nicht, wenn nicht mehr alle Upnp oder HTTP-Calls funktionieren.

Mittlerweile habe ich meine Sonos Boxen verkauft und bin auf eine OpenSource-Lösung, basierend auf Hifiberry und Max2Play umgestiegen. Damit ist es möglich, die gleiche Funktionalität von Sonos mit eigenen Boxen nachzubauen. Siehe hier.

Hints, Tips und Tricks rund um Sonos

Mein Sonos System umfasst insgesamt 7 Player (1 Sonos Soundbar und 6 Sonos Play:1). Sonos erstellt und unterhält sein eigenes Netz (Sonos-Net) selber. Grundsätzlich funktioniert das „out of the box“. Es kann aber doch manchmal nötig sein das Sonos-Net zu optimieren. Dazu anbei ein paar nützliche Infos:

Tools

Auf jeder Sonos-Box läuft ein Webserver, den man über den Browser ansprechen kann. Dabei können einige nützliche Infos eingesehen oder aber auch Einstellungen vorgenommen werden:

http://IP:1400/support/review Übersicht über die Sonos Box. Hier kann auch die Network-Matrix aufgerufen werden
http://IP:1400/advconfig.htm Einstellen der Root-Bridge (FirstZP und Priority auf „enabled“).
http://IP:1400/reboot Reboot der Sonos Box
http://IP:1400/region.htm WLAN Region sezten  (bei uns EU – Europa)
http://IP:1400/tools.htm Netzwerktools wie Ping, Traceroute, nslookup
http://IP:1400/status Status-Seite
http://IP:1400/wifictrl?wifi=off Stellt das WIFI bis zum nächsten Reboot ab
http://IP:1400/wifictrl?wifi=persist-off Stellt das WIFI Interface komplett ab. Wenn man nur über Kabel arbeiten möchte
http://IP:1400/status/scanresults Scanresults zeigt euch alle WLAN-Verbindungen an, welche von Sonos erreicht wurden. Kann je nachdem noch nützlich sein, für Android Smartphones gibt es da noch bessere Apps
http://<IP>:1400/status/tracks_summary Mit diesem Befehl kannst Du dir die Anzahl der Tracks anzeigen lassen
http://<IP>:1400/status/topology Zeigt die Sonos Topologie mit allen Sonos Playern und Media Servern

Nützliche Links: