Deine Phoniebox ist fertig, darf aber noch schneller booten oder hier und da etwas „gepimpt“ werden, dann bist Du hier richtig. Außerdem bekomme ich häufig die selben Fragen in Kommentaren, per Mail oder auch im Forum gestellt. Daher versuche ich mit diesem Beitrag einige davon abzufangen…
Beim Abspielen mit dem HifiBerry MiniAmp kommt kein Ton…
Hierfür gibt es häufig zwei Hauptgründe:
- Die Datei gpio-buttons.py hat standardmäßig einige Ports in Beschlag genommen, die auch vom HifiBerry benötigt werden. Der HifiBerry benötigt folgende GPIOs + Stromversorung:
– Pins 3V, 5V, GND
– GPIO 18 (Pin 12)
– GPIO 19 (Pin 35)
– GPIO 20 (Pin 38)
– GPIO 21 (Pin 40)
Die GPIOs 19 (Volume down), 20 (Previos) und 21 (Next) sind allerdings vorbelegt und müssen angepasst werden. Daher bitte gut aufpassen welche GPIOs wie belegt sind und diese unbedingt in der gpio-buttons.py pflegen!
Die Datei kann wird im Regelfall hier liegen:/home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py
Falls das Script zum installieren des Displays verwendet und die Datei aus dem Repository gezogen wurde, dann liegt die Konfiguration hier:/home/pi/oled_phoniebox/scripts/gpio-buttons/gpio-buttons.py
Es reicht zwar den Dienst neu zu starten, aber tatsächlich teste ich es eher, indem ich die komplette Box reboote… - Bei der Installation der Jukebox4Kids wird irgendwann nach einem iFace-Name gefragt. Diesen setze ich aus Gewohnheit auf Master, kann selbstverständlich auch was anderes sein. Die asound.conf ist dann allerdings auch zu pflegen. Dies ist auch hier beschrieben. Recht häufig wird die Installation in anderer Reihenfolge durchgeführt, so dass der HifiBerry nicht angesprochen wird.
Dann ist die Datei/etc/mpd.conf
zu editieren und der control.name aus der asound.conf als Audio_iFace_Name zu hinterlegen. Einmal die Box neu starten und der Sound ist hoffentlich da 😉
Shutdown-Sound mit OnOffShim
Um den Shutdownsound einzuarbeiten müsst Ihr etwas „dreckig“ am Code rumwurschteln. Dafür ist es notwendig die Datei /usr/bin/cleanshutd zu bearbeiten. Fügt nach
if shutdown_trigger; then
folgendes ein (sollte bei Zeile 85 sein):
/usr/bin/mpg123 /home/pi/RPi-Jukebox-RFID/shared/shutdownsound.mp3
Wer sich nicht ran traut und einen fertigen Befehl sucht:
sudo sed -i '/ if shutdown_trigger; then/a \ /home/pi/RPi-Jukebox-RFID/scripts/./resume_play.sh -c=savepos && mpc clear\n /usr/bin/mpg123 /home/pi/RPi-Jukebox-RFID/shared/shutdownsound.mp3' /usr/bin/cleanshutd
Danach noch den Service neu starten und es funktioniert:
sudo service cleanshutd restart
Hier funktioniert natürlich auch jede andere MP3. Ich persönlich finde folgende Sounds gut:
Musikdatenbank aktualisieren
Immer wieder gibt es Probleme mit der lokalen Musikdatenbank. Problem ist hier, dass kopierte Musik auf die Phoniebox zwar in der Weboberfläche angezeigt wird, aber nicht automatisch „verfügbar“ und „abspielbar“ ist.
Hierfür habe ich zwei Lösungswege:
Aktualisierung über die Web-Oberfläche
Öffne die Weboberfläche der Phoniebox. Unter dem Reiter Files & Folders gibt es eine unscheinbare Schaltfläche „Scan Music Libary“. Durch einen simplen Klick wird lokal nach Musik gescannt. Das kann dann auch mal ein paar Sekunden dauern. Beachte, dass bei laufendem Scan kann keine Musik abgespielt werden!
Aktualisierung per Shell
sudo service mpd restart sudo mpc update
Auto-Idle-Shutdown mit OnOffShim: Phoniebox lässt sich nicht einschalten
Diverse Anwender haben über Probleme berichtet, dass nach dem Idle-Shutdown die Box nicht mehr über den OnOffShim + Powerbank eingeschaltet werden kann. Hintergrund ist, dass es verschiedene Arten gibt die Box auszuschalten. Bei Poweroff wird wohl dem System das Ausschalten per ACPI befohlen, also auch das „Auschalten der Stromversorgung“ um es leichter verständlich zu machen. Dagegen werden bei Halt alle Dienste beendet und die Maschine müsste „manuell“ ausgeschaltet werden. Das übernimmt hier der OnOffShim.
Im Endeffekt hatte ich keine Probleme beim Shutdown mit dem Befehel:
sudo shutdown -h 0
Dieser kann einfach in der Datei /home/pi/RPi-Jukebox-RFID/scripts/playout_controls.sh gegen poweroff ausgetauscht werden:
sed -i -e 's/sudo poweroff/sudo shutdown -h 0/g' /home/pi/RPi-Jukebox-RFID/scripts/playout_controls.sh
Speed Up: So startet die Box noch schneller
Das Thema hab ich ewig vor mich her geschoben, aber dank dieses Forenbeitrages vom User bCid ist Schwung ins Thema gekommen. Ich konnte meine Box damit 7 Sekunden schneller booten! Folgende Möglichkeiten bestehen die Box schneller zu booten:
Tweaks in der config.txt
Die folgenden beiden Werte sind teils selbsterklärend:
# Disables loading Bluetooth dtoverlay=disable-bt # Boot Delay Time boot_delay=0 # avoid_warnings=2 disables the warning overlays, but additionally allows turbo mode even when low-voltage is present; avoid_warnings=1 disables the warning overlays avoid_warnings=2 # the rainbow splash screen will not be shown on boot disable_splash=1 # Initial Turbo in seconds; max. 60 seconds initial_turbo=20
Die ersten beiden Parameter sind einmal ein delay, also eine Wartezeit beim booten, die auf 0 gestellt wird, und mit pi3-disable-bt wird Bluetooth nicht gestartet bzw. geladen.
Die Parameter avoid_warnings und initial_turbo sind mit Vorsicht zu genießen. Vor avoid_warnings möchte ich auch ausdrücklich warnen, damit hab ich schon Bootloops hervorgerufen, auch wenn damit ein subjektiv spürbarer Zeitgewinn möglich ist. Das Abschalten lief dann leider ebenso suboptimal. Die Zeiten für initial_turbo könnt Ihr bis 60 Sekunden hoch schrauben, tastet Euch mal ran, Zuviel des Guten macht auch keinen Sinn!
Das hinzufügen geht mittels dieses Befehls:
sudo sh -c " cat >> /boot/config.txt << EOF # Disables loading Bluetooth dtoverlay=disable-bt # Boot Delay Time boot_delay=0 # avoid_warnings=2 disables the warning overlays, but additionally allows turbo mode even when low-voltage is present; avoid_warnings=1 disables the warning overlays avoid_warnings=2 # the rainbow splash screen will not be shown on boot disable_splash=1 # Initial Turbo in seconds; max. 60 seconds initial_turbo=20 EOF"
Deaktvieren von Exim4 (1,4 Sekunden)
Hierbei handelt es sich um einen MTA (Message Transfer Agend) Dienst, der für Euch nur dann Sinn macht, wenn ihr auch Mails über den Server versendet, falls nicht, kann der Service entfernt werden…
sudo update-rc.d exim4 remove
Anpassungen im dhcp-Client-Dienst (0,82 Sekunden)
Der DHCP-Client-Dienst ist für das Aushandeln einer IP-Adresse für den Client, in unserem Fall der Raspberry, notwendig. Aber es gibt nun verschiedene Netzwerk-Konstellationen. Ein großer Geschwindigkeitszuwachs wird erzielt, wenn noarp aktiviert ist. ARP im Zusammenhang mit dem DHCP-Client-Dienst prüft im lokalen Netz, ob die IP schon vergeben ist. In Heimnetzwerken kann man das im Regelfall vernachlässigen:
sudo sh -c " cat >> /etc/dhcpcd.conf << EOF noarp ipv4only EOF"
Vergabe einer fest eingestellten IP-Adresse (1,5 Sekunden)
Noch ein wenig Zeit gewinnt man, wenn die IP fest vergeben wird. Vorher solltet Ihr mal in Eurem Router / DHCP-Server schauen, welcher Adressbereich dynamisch vergeben wird und Euch eine IP raus picken, die möglichst nicht vergeben oder anderweitig belegt wird. Mit dem Befehl ifconfig (ifconfig wlan0) findet Ihr das Standardgateway raus (im Regelfall die IP des Routers):
ifconfig wlan0
Das Standardgateway bekommt Ihr über folgenden Befehl raus (das Feld Router in der Zeile von wlan0 im Regelfall:
route -ne
Prüft bitte auch die DNS-Server mit folgendendem Befehl:
cat /etc/resolv.conf
Jetzt geht es ans eingemacht, die Datei /etc/dhcpcd.conf muss editiert werden. Folgender Abschnitt muss dort ergänzt werden (Eingaben sind Beispielwerte):
interface wlan0 static ip_address=192.168.1.99/24 static routers=192.168.1.1 static domain_name_servers=192.168.2.1 8.8.8.8
Übrigens ist 8.8.8.8 ein DNS-Server im Internet, dieser kann, muss aber nicht verwendet werden. Natürlich hab ich wieder was für die Shell für Euch:
sudo sh -c " cat >> /etc/dhcpcd.conf << EOF interface wlan0 static ip_address=192.168.0.123/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 8.8.8.8 noarp ipv4only EOF"
Eine Sache ist nun zwingend zu beachten: solltet Ihr zusätzlich zum OnBoard Wlan einen USB WLAN-Adapter im Einsatz haben, sollte man festlegen, dass das OnBoard-WLAN immer als wlan1 geladen oder deaktviert wird. Bevorzugt würde ich dann das OnBoard Wifi deaktivieren, dies geht mit fogendem Eintrag in der config.txt:
dtoverlay=disable-wifi
Folgende Befehle helfen Euch dabei Onboard Wifi als wlan1 zu laden, werden die wenigsten von Euch benötigen (nur durchführen, wenn Ihr wisst, wofür Ihr das braucht…):
if [ -f /etc/systemd/network/99-default.link ]; then echo "File already exist, nothing to do!" else sudo ln -nfs /dev/null /etc/systemd/network/99-default.link echo "Linked File /etc/systemd/network/99-default.link created" fi sudo sh -c "echo 'ACTION==\"add\", SUBSYSTEM==\"net\", DRIVERS==\"brcmfmac\", NAME=\"wlan1\"' > /etc/udev/rules.d/72-wlan-geo-dependent.rules"
IPv6 deaktivieren (0,28 Sekunden)
Im Regelfall brauchen Eure Boxen kein IPv6, zumindest noch nicht… Daher könnt Ihr IPv6 mit folgenden Befehlen komplett deaktivieren:
sudo sh -c "echo 'options ipv6 disable=1' >> /etc/modprobe.d/ipv6.conf" sudo sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf" sudo sh -c "echo 'noipv6' >> /etc/dhcpcd.conf" #sudo sh -c "echo -n ' ipv6.disable=1' >> /boot/cmdline.txt" sudo sysctl -p
Deaktivieren von weiteren „unnötigen“ Diensten
Folgend werden mehrere Dienste deaktiviert, vorab der Kommentar, worum es sich bei dem Dienst handelt:
# Der Dienst ist notwendig, wenn lokal eine Tastatur angeschlossen ist, sonst kann er deaktiviert werden sudo systemctl disable keyboard-setup.service # Der Dienst prüft, ob die WLAN-Ländereinstellungen gesetzt sind... sudo systemctl disable wifi-country.service # Damit kann man Tasten einer Tastatur Befehle zuordnen sudo systemctl disable triggerhappy.service # Deaktiviert das SWAP-File sudo systemctl disable dphys-swapfile.service # Deaktiviert den Bluetooth Dienst sudo systemctl disable hciuart.service # Da ich die rc-local nicht verwende, deaktiviere ich sie. Damit kann man in verschiedenen Runleveln Scripte automatisch starten lassen sudo systemctl mask rc-local sudo chmod a-x /lib/systemd/system-generators/systemd-rc-local-generator # Raspi-config benötigt man idR nur bei der Einrichtung. Sollte man es später benötigen, kann auch wieder alles aktiviert werden mit diesem Befehl: `sudo raspi-config` sudo systemctl disable raspi-config.service # Deaktiviert den Avahi Dienst, welcher zur vereinfachten Netzwerkfreigabe von Diensten gedacht ist sudo systemctl disable avahi-daemon.service sudo systemctl disable sys-kernel-debug.mount sudo systemctl disable systemd-udev-trigger.service sudo systemctl disable rpi-eeprom-update.service sudo systemctl disable rsyslog.service sudo systemctl disable systemd-journald.service sudo systemctl disable systemd-fsck-root.service sudo update-rc.d exim4 remove # Wenn die Zeit nicht synchron läuft, können ggf. Pakete nicht geupdatet und und auf Spotify nicht zugegriffen werden - daher folgenden Punkt nur deaktivieren, wenn man weiß was man tut! # sudo systemctl disable systemd-timesyncd.service sudo chmod a-x /lib/systemd/system-generators/systemd-rc-local-generator sudo chmod a-x /lib/systemd/system-generators/systemd-cryptsetup-generator sudo chmod a-x /lib/systemd/system-generators/systemd-debug-generator sudo chmod a-x /lib/systemd/system-generators/systemd-bless-boot-generator sudo chmod a-x /lib/systemd/system-generators/systemd-hibernate-resume-generator sudo chmod a-x /lib/systemd/system-generators/systemd-run-generator sudo chmod a-x /lib/systemd/system-generators/systemd-system-update-generator sudo chmod a-x /lib/systemd/system-generators/systemd-veritysetup-generator
MPD Service eher laden
Diese Option funktioniert nur, wenn Spotify nicht installiert ist!!! Passe dafür die Datei /etc/systemd/system/multi-user.target.wants/mpd.service ab Zeile 5 wie folgt an:
#After=network.target sound.target After=sound.target
Danach noch folgenden Befehl ausführen und die Box mit reboot neu starten:
sudo systemctl daemon-reload sudo reboot
SD Karten Speed ausnutzen (0,5 Sekunden)
Unter der Vorraussetzung, dass Ihr eine gute SD Karte habt die UHS-I U3 fähig ist, könnt Ihr die Geschwindigkeit auch auskosten, in dem die config.txt folgende Zeile hinzugefügt bekommt:
dtoverlay=sdtweak,overclock_50=100
Bitte seid Euch sicher, dass die SD Karte wirklich die Geschwindigkeit abkann, ansonsten war es das u.U. mit Eurer Installation! Ich empfehle diese SD: Samsung EVO 64GB microSDXC UHS-I U3
Für diejenigen, die einfach nur den Befehl ausführen wollen zum einfügen:
sudo sh -c "echo 'dtoverlay=sdtweak,overclock_50=100' >> /boot/config.txt"
Wartezeit für Netzwerkboot deaktivieren (0,2 Sekunden)
Es geht nur um Millisekunden, aber auch diese lassen sich sparen, wenn man das Warten auf das Netzwerk deaktiviert.
sudo rm /etc/systemd/system/dhcpcd.service.d/wait.conf
Schneller SSH-Client (2 Sekunden)
Wir befinden uns nun bei den letzten Millisekunden, die man raus kitzeln kann! Dropbear ist ein sehr schlanker SSH Client. Hier ein kleines Script, um Dropbear komplett zu installieren und OpenSSH zu deinstallieren:
sudo apt -y install dropbear sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropbear sudo systemctl enable dropbear && sudo service ssh stop && sudo service dropbear start && sudo apt-get -y remove openssh-server && sudo apt -y autoremove && sudo reboot
Langsamer Start der Spotify Edition
Vorab: die Box arbeitet so, wie sie vor konfiguriert ist! Bei der Spotify Edition kommt die OpenSource Software Mopidy zum Einsatz, die auch einen eigenen MPD (Music Player Daemon) installiert. Der Service verbindet sich logischerweise mit Spotify und hier kommt es je nach Konfiguration zu Wartezeiten. Hier ein paar Kniffe, welche der Box beim booten zu mehr Speed verhelfen können!
Vorladen der Wiedergabelisten verhindern
Du kannst die Konfiguration des Mopidy-Dienstes in der Datei /etc/mopidy/mopidy.conf anpassen. Ich nutze dazu den Editor vi, nano ist ebenso beliebt. Der Dienst hat eine Option standartmäßig aktiviert, welche die Bootzeit der Box stark beeinflusst. Mit dem Parameter allow_playlists wird online jede einzelne vorhandene Playliste abgefragt. Nach meiner Recherche bedeutet das je Playlist min ca. 4 Sekunden Wartezeit, die beim booten dazu addiert werden! Die Option kann bedenkenlos deaktiviert werden, da Playlists trotzdem mit der Phoniebox oder dem IRIS Player verfügbar sind. Hier wieder ein Codeschnipsel, der alles für Dich erledigt:
sudo ed /etc/mopidy/mopidy.conf <<EOF /#allow_playlists = true/a allow_playlists = false . wq EOF sudo service mopidy restart
Weitere Infos zur Mopidy-Spotify Konfiguration findest Du hier: https://pypi.org/project/Mopidy-Spotify/