FAQs und Tweaks zu meiner Phoniebox

Ich bekomme häufig die selben Fragen in Kommentaren, per Mail oder auch im Forum gestellt. Daher versuche ich mit diesem Beitrag einige davon abzufangen…

Inhalt

Beim Abspielen mit dem HifiBerry MiniAmp kommt kein Ton…

Hierfür gibt es häufig zwei Hauptgründe:

  1. 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…
  2. 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 😉

Shutdownsound 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):

       /home/pi/RPi-Jukebox-RFID/scripts/./resume_play.sh -c=savepos && mpc clear
       /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:

Start-Sound Quelle: success 1 by Leszek_Szary
Shutdown-Sound Quelle: game over by Leszek_Szary

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

Kann die Box schneller starten

Ja, das kann sie. 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=30

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 "echo 'dtoverlay=disable-bt' >> /boot/config.txt"
sudo sh -c "echo 'boot_delay=0' >> /boot/config.txt"
sudo sh -c "echo '#avoid_warnings=2' >> /boot/config.txt"
sudo sh -c "echo 'disable_splash=1' >> /boot/config.txt"
sudo sh -c "echo '#initial_turbo=30' >> /boot/config.txt"
Deaktvieren von Exim4

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 Serice entfernt werden…

sudo update-rc.d exim4 remove
Anpassungen im dhcp-Client-Dienst

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, z.B. wrden die meisten Heimnetzwerke nur IPv4 nutzen, daher habe ich IPv6 deaktiviert. 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 "echo 'noarp' >> /etc/dhcpcd.conf"
sudo sh -c "echo 'ipv4only' >> /etc/dhcpcd.conf"
sudo sh -c "echo 'noipv6' >> /etc/dhcpcd.conf"

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 "echo 'interface wlan0' >> /etc/dhcpcd.conf"
sudo sh -c "echo 'static ip_address=<IP>/24' >> /etc/dhcpcd.conf"
sudo sh -c "echo 'static routers=<Router IP>' >> /etc/dhcpcd.conf"
sudo sh -c "echo 'static domain_name_servers=<IPs DNS-Server>' >> /etc/dhcpcd.conf"

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

Im Regelfall brauchen Eure Boxen kein IPv6, zumindest noch nicht… Daher könnt Ihr der Datei /etc/sysctl.conf folgendes anhängen:

net.ipv6.conf.all.disable_ipv6 = 1

Folgend wieder die Befehle für die Shell:

sudo sh -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
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

# 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
MPD Service eher laden

Dafür die Datei /etc/systemd/system/multi-user.target.wants/mpd.service ab Zeile 5 wie folgt anspassen:

#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

Bitte prüft, ob Eure Box damit klar kommt…

cmdline.txt Tuning

Diese Datei bitte manuell anpassen. Ich werde hierfür keinen Automatismus bereit stellen!

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty3 root=PARTUUID=<EURE-ID> rootfstype=ext4 elevator=
deadline noatime nodiratime fastboot fsck.repair=yes rootwait quiet

Der Parameter quiet scheint im Netz allgemein anerkannt zu werden was den Zeitgewinn angeht. Die restlichen Parameter könnt Ihr mal durchtesten, Feedback ist ausdrücklich erwünscht!

SD Karten Speed ausnutzen

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"

Das könnte Dich auch interessieren …

16 Antworten

  1. Martin sagt:

    Hallo Olli,

    vielen Dank für deine Anleitung. War eine große Hilfe und das Ergebnis bereitet dem Nachwuchs viel Freude.
    Bei der aktuellsten phoniebox Version besteht die Möglichkeit über RFID das Wifi ein/aus zu schalten. Intern wird dafür der Befehl „rfkill block/unblock wifi“ verwendet.
    Ich würde die Box gerne ohne Wifi starten und dieses dann nur bei Bedarf aktivieren (spart Strom + weniger Wifi smog). Habe versucht den Befehl „rfkill block wifi“ über rc.local mitzugeben. Bekomme das aber nicht so richtig hin. Hast du eine Idee?

    Danke!

  2. Friedrich sagt:

    Hallo,
    Deine Anleitung ist so toll und ausführlich. Vielen Dank.
    Leider habe ich noch ein Problem: Aus dem HiFi Berry kommt nach der Installation von „Jukebox4Kids“ kein Ton mehr raus.
    Vorher beim Test ja.
    Habe mich 1:1 an Deine Anleitung gehalten (auch schon 3 Mal neu aufgesetzt, falls ich doch irgend etwas flasch gemacht hätte).
    Ich habe noch kein OLED, kein OnOff Shim und noch keine GPIOS dran (die jeweiligen Änderungen auch noch nicht in der Software vorgenommen).
    Nur den Pi 3b+, das neue „HATs“ aus Deiner 2ten Box und den HiFiBerry.
    Bei der Juke4Kid habe ich OHNE Spotify ausgewählt. Sonst wie bei Dir.
    Gestern hatte ich fast das gleiche SetUp, aber ohne HiFi Berry dafür über die 3,5 Klinke. Das ging. Heute dann neu aufgesetzt, mit HiFiBerry.
    Habe IFace auch „Master“ ausgewählt und das wie von Dir beschrieben in der Config eingerichtet (Testsound vor nstallation von Jukebox4Kids kommt).
    Hier oben schreibst Du, dass noch Änderungen in der „/etc/mpd.conf“ vorgenommen werden müssen. Kannst Du das bitte noch einmal genauer erklären. ich finde da keinen Punkt, bei dem ich den control.name überhaupt aufgelistet sehe.
    Vielen Dank
    Gruß
    Friedrich

  3. Bernhard sagt:

    Hallo Olli,

    bezüglich deiner Anleitung für den Shutdown-Sound mit OnOffShim ist mir etwas aufgefallen:
    Mit den angegebenen & & funktioniert es nicht. Ohne schon
    Ich habe auch dieses ./ weggelassen und den Pfad direkt absolut angegeben.
    Warum machst du das so?

  4. Markus sagt:

    Moin moin
    hab da ne kurze Frage zu dem shutdownsound.
    Habe es so gemacht wie du es oben beschrieben hast…. jetzt habe ich das Problem das er beim Neustart immer eine Karte haben möchte damit er weiterspielt.
    Kann man das hinbekommen das die Box nach dem einschalten automatisch da weiterspielt wo sie aufgehört hat?
    Danke schon mal
    LG Annex
    Deine 2. Box ist ja der Hammer

  5. Florian sagt:

    Hallo,
    ich habe genau die gleiche Konfiguration wie bei deiner 2. Phoniebox und beim Starten erhalte ich die Meldung „Under Voltage detected“, wenn er mit der Powerbank startet.
    Was mache ich falsch?

    Habe den Hifiberry Miniamp, den RFID-Reader und den OnOff-Shim drauf.

    Danke!

    Viele Grüße

  6. Julius sagt:

    Hi!
    Vielen Dank für deine tollen und hilfreichen Artikel. Ich habe versucht mit deiner Anleitung den Shutdownsound in den OnOffShim einzubinden, leider ohne Erfolg (Sound kommt nicht, Phoniebox lässt sich nicht mehr über OnOffShim ausschalten).
    Meine /usr/bin/cleanshutd sieht jetzt so so:
    https://pastebin.com/7QbiEzQ3

    Hast du mir da irgendwelche Tipps? Danke!

    • Olli sagt:

      Zeile 10 ist ein Copy Paste Fehler mit &amp…

    • Julius sagt:

      Super, vielen Dank! Mit der Korrektur des Fehlers hat es nun geklappt. Übrigens steht der Fehler oben auch in dem Code, den du angegeben hattest. Nimm es doch bei Gelegenheit raus, damit „meine Nachfolger“ nicht darüber stolpern.

    • Olli sagt:

      Danke für den Hinweis, lässt sich leider nicht so darstellen, Codec-Problematik. Weiß gerade auch noch nicht, wie ich das lösen soll…

  7. Simon sagt:

    Hi,

    wiedermal ein sehr hilfreicher Beitrag, danke! Hab meine Box wieder ein bisschen schneller gemacht.

    Auf die FAQ zu undervoltage bin ich gespannt, damit kämpf ich auch grad immer wieder.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.