Hallo,
anbei möchte ich nach und nach mein Setup für Multiroom Audio, 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
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 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.
Alles anzeigen
In den Einstellungen des piCore muss diese in den Nutzerspezifischen Starteinstellungen mit /home/tc/button.py eingetragen werden
anbei möchte ich nach und nach mein Setup für Multiroom Audio, 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
Quellcode
- /opt/lms$ cat docker-compose.yml
- version: '3'
- services:
- lms:
- container_name: lms
- image: lmscommunity/logitechmediaserver
- volumes:
- - /opt/lms/config:/config:rw
- - /MusicLibrary:/music:ro
- - /Daten/public/Musik:/mp3:ro
- - /Daten/public/Hoerbuecher:/Hoerbuecher:ro
- - /opt/lms/playlist:/playlist:rw
- - /etc/localtime:/etc/localtime:ro
- - /etc/timezone:/etc/timezone:ro
- network_mode: host
- devices:
- - /dev/snd:/dev/snd
- #ports:
- # - 9000:9000/tcp
- # - 9091:9091/tcp
- # - 3483:3483/tcp
- # - 3483:3483/udp
- restart: always
- environment:
- - PUID=1000
- - PGID=1000
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 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.
Quellcode
- #!/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)