Hallo,
anbei möchte ich nach und nach mein Setup für Multiroom Audio vorstellen, nachdem ich hier im Forenchat darauf hingewiesen worden bin.
Ich nutze eigentlich überall Kodi, aber bin mit den Musikfähigkeiten nie warm geworden. Der Ausgangspunkt ist also ein Ubuntu-Server im Keller, eine Android MiBox im Wohnzimmer mit externen DAC, sowie in der Küche ein RPi2 per Volumio. Windows Systeme haben auch Kodi.
Als erstes habe ich LMS auf meinem Server mittels Docker installiert, um eine zentrale Möglichkeit zu haben. Hierzu nutze ich docker-compose
/opt/lms$ cat docker-compose.yml
version: '3'
services:
lms:
container_name: lms
image: lmscommunity/logitechmediaserver
volumes:
- /opt/lms/config:/config:rw
- /opt/lms/playlist:/playlist:rw
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /MusicLibrary:/music:ro
- /Daten/public/Musik:/mp3:ro
- /Daten/public/Hoerbuecher:/Hoerbuecher:ro
network_mode: host
devices:
- /dev/snd:/dev/snd
restart: always
environment:
- PUID=1000
- PGID=1000
Alles anzeigen
Als Besonderheit leite ich über die Devices die Soundkarte in das Docker rein, und fahre das Netzwerk im Hostmodus, damit UPNP funktioniert.
Damit läuft LMS erstmal und ich habe meine Musik als Readonly eingetragen.
Hiermit sehe ich sogar die Kodigeräte per UPNP, leider klang das super asynchron.
Android-Tv
Für das Wohnzimmer nutze ich die Android App SB-Player SB Player – Apps bei Google Play
Das kann im Autostart mit Android laufen und verbindet sich mit dem Server und kann vernünftig gesteuert werden. Lustigerweise kann ich sogar einen Film per Kodi/ Netflix schauen und überlagert Musik.
Windows
Auf den Windowssystemen funktioniert die App Squeezelite-X https://www.microsoft.com/store/productId/9PBHMTNP9037
Nun sind auch alle Windows-Maschinen synchron, und können auch alle anderen Player steuern.
Raspberry
Nun zum Küchenradio. Wie gesagt nutze ich hier einen RPI2 mit USB Soundkarte. Bisher lief Volumio2 drauf, ich war nach dem Update auf v3 unzufrieden. Viele Updates sind noch nicht migriert und der Start dauert über eine Minute (bis Ton kommt). Man kann zwar GPIO und Squeezebox selbst aus v2 reinbasteln, es läuft aber nicht gut.
Also bin ich zu piCore Player gewechselt. Installiert und funktioniert.
Zur Steuerung des Players nutze ich 4 GPIO Taster, für vor/zurück/lauter/leiser
Und so kann man diese auch verwenden.
Wir brauchen die Module python3.8-rpi-gpio.tcz und python3.8
Diese können über LMS in den Playereinstellungen installiert werden, oder per SSH.
Ich habe folgende Datei unter /home/tc/button.py angelegt und ausführbar gemacht.
#!/usr/bin/env /usr/local/bin/python3
# http://RasPi.tv/how-to-use-interrupts-with-python-on-the-raspberry-pi-and-rpi-gpio-part-3
import RPi.GPIO as GPIO
import os
from time import sleep
GPIO.setmode(GPIO.BCM)
# GPIO 23,24 & 17,18 set up as inputs, pulled up to avoid false detection.
# ports are wired to connect to GND on button press.
# So we'll be setting up falling edge detection for both
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
#Callback functions
def lauter(channel):
#print "falling edge detected on 17"
os.system('pcp up')
def leiser(channel):
#print "falling edge detected on 18"
os.system('pcp down')
def weiter(channel):
#print "falling edge detected on 23"
os.system('pcp next')
def zurueck(channel):
#print "falling edge detected on 24"
os.system('pcp prev')
GPIO.add_event_detect(17, GPIO.FALLING, callback=lauter, bouncetime=300)
GPIO.add_event_detect(18, GPIO.FALLING, callback=leiser, bouncetime=300)
GPIO.add_event_detect(23, GPIO.FALLING, callback=weiter, bouncetime=300)
GPIO.add_event_detect(24, GPIO.FALLING, callback=zurueck, bouncetime=300)
while True:
sleep(86400)
Alles anzeigen
In den Einstellungen des piCore muss diese in den Nutzerspezifischen Starteinstellungen mit /home/tc/button.py eingetragen werden.
Optional: Amazon Music auf LMS
Nun wollte ich noch die Möglichkeit Amazon Musik auf den Geräten wiederzugeben. Leider gibt es hier nur einen Alexaskill für 5€ monatlich (will ich nicht zahlen).
Also habe ich die Soundkarte des Servers in das Docker gemappt.
In meiner Grabbelkiste befanden sich noch folgende Dinge:
Chromecast Ultra aus einem Stadia Deal
Alle Geräte werden über USB des Servers gespeist. Der Chromecast kommt in den Audioextraktor und dann geht es per SPDIF optisch in die Soundkarte. Es ist wichtig eine Soundkarte mit digitalen Eingang zu verwenden. Per Klinke klang es schrecklich.
Die Soundkarte kann über das wavin Plugin des LMS an alle Lautsprecher verteilt werden.
Hierzu muss nur ein Favorit angelegt werden mit folgendem Inhalt:
Das ist der Soundeingang der Karte, die über aplay -L ermittelt werden.
Ob das ganze funktioniert, lässt sich über
docker exec -ti lms alsamixer
ermitteln (lms heißt der LMS Docker bei mir).
Nun kann ich von jedem Handy den Sound zum Chromecast schicken und habe synchrones Amazon Audio (kostenfrei ). Die Player müssen dann nur den Favoriten abspielen.