Basics – ein/aus


Einbau eines Ein-/Aus-Schalters

Version 1 mit GPIO

Raspberry mit ShutdownACHTUNG: Neue Erkenntnisse zum Shutdown am Ende der HiFiPi-Seite oder auch bei der USV-Seite.

Diese erste Version hat immer etwas unverlässlich reagiert und ich habe sie in Verdacht, für manch ein Bootproblem verantwortlich zu sein!

Eine richtig gute Anleitung zu diesem Thema, die leicht zu realisieren und ressourcenschonend ist, habe ich zuerst nicht gefunden. So habe ich mich auf das Manual gestürzt, aber das war mir dann doch zu kompliziert. Da habe ich lieber Fehlersuche an einem bestehenden Script von helbing.nu betrieben. (Unter gtkdb.de wird man zusätzlich noch fündig.) Durch Nutzung des Pin 5 (IO-Port 3) entfällt die Nutzung des Reset-Tasters! Auf dem Foto ist noch die alte Version mit Pin 24 zu sehen!

Leider habe ich momentan noch nicht die endgültigen Taster. Aber die muss ich dann später ersetzen. Insofern sieht es auf dem Foto nicht schön aus!

Pin 2 ist der äußerste Pin in der Ecke. Daneben folgen die Pins 4, 6, 8 usw. Die ungeraden Pins sind dann unter den geraden, wenn die Steckerleiste nach oben zeigt. Pin 1 ist unter 2, Pin 3 ist unter 4 usw. Wer sich nicht sicher ist, sollte besser nach der Doku der GPIO-Anschlüsse im Internet suchen, bevor etwas kaputt geht!

Der Chip arbeitet mit 3,3 Volt und ich werde den GPIO-Port 3 nutzen. Das ergibt die Nutzung von folgenden Pins des Anschlusses:

1 – 3,3 Volt
6 – Masse
5 – GPIO 3

Von Pin 1 (3,3 Volt) geht zuerst ein 10kOhm- und dann ein 470 Ohm-Widerstand zum Pin 5 (GPIO 3). Der Taster wird mit einer dünnen isolierten Leitung an Pin 6 (Masse) und mit seinem anderen Pol an die Verbindung der beiden Widerstände angeschlossen. Die Reihenfolge der Widerstände ist unbedingt einzuhalten! Und wenn etwas kaputt geht, gibt es keinen Schadensersatz! Also aufpassen!

Kommen wir zum weniger handwerklichen Teil! smile

Ein kleines Python-Programm setzt den GPIO auf “Eingang”, überwacht ihn und führt als Befehl einen Shutdown aus. Den Sourcecode des Pakets bilde ich hier nicht ab. Wenn man bei helbing.nu nicht mehr fündig wird, kann ich die Datei auch gerne mailen. Leider hat sich der Verfasser bisher bei anderen Personen geweigert, das Paket so zu erstellen, dass man es auch gebrauchen kann. Der Shutdown-Befehl funktioniert nämlich nicht, weil die Syntax nicht eingehalten wird! So musste ich es mir als Neuling leider antun, eine C-Datei zu ändern und zu kompilieren! Durch meinen veränderten IO-Port wird es aber ebenfalls nötig! Es folgt die genaue Anleitung. Aber eine Garantie für fehlerfreies Funktionieren oder für Schäden, die dadurch entstehen, übernehme ich nicht! Schließlich habe ich nur wenig am Original geändert!

Von helbing.nu wird die shutkey…bz2 heruntergeladen und mittels Filezilla in das Verzeichnis des angemeldeten Users kopiert. Dann geht es an die Tasten!

$sudo tar -xjvf shutkey-0.0.1.tar.bz2
$cd shutkey-0.0.1/usr/src/shutkey
$sudo nano shutkey.c

Um den IO-Port zu ändern sucht man nach dieser Zeile
int gpionumber=8
und ändert sie in

int gpionumber=3


Das Skript von helbing.nu wurde Ende 2013 / Anfang 2014 verändert. Sollte der Shutdown-Befehl in shutkey.c schon die Option “-h” enthalten, braucht dieser hier abgetrennte Teil nicht mehr beachtet werden!

Jetzt im Editor fast am Dateiende die Zeile mit “…shutdown…” wie folgt schreiben (nämlich “-P” durch “-h” ersetzen):

system(“shutdown -h now”);


Datei abspeichern. Weitermachen mit:

$sudo gcc shutkey.c -o shutkey
$sudo cp shutkey ../../bin/shutkey
$cd ../../..
$sudo cp -r etc /
$sudo cp -r usr /
$sudo chmod 755 /usr/bin/shutkey <— Das hat’s gebracht!
$sudo chmod 755 /etc/init.d/shutkey <— Das hat’s gebracht!
$sudo insserv shutkey

Wenn man den folgenden Befehl eingibt, bekommt man die Info, ob man keine groben Schnitzer bei der Software gemacht hat:

$sudo /etc/init.d/shutkey start

Durch Drücken des Shutdown-Tasters testet man die gesamte Funktionalität. Die Last durch Abfrage des Ports ist kaum zu bemerken, wenn man den Taskmanager laufen lässt. Alles in allem eine akzeptable Lösung! Leider habe ich inzwischen sporadisch Boot-Probleme, die ich auf meine schlecht positionierte Hardware zurückführe.

Da generell alles funktioniert, hört die Anleitung hier auf. Schade! 😥

Nachtrag 25.04.2014:
Die Beschaltung des GPIO-Ports durch die Widerstände habe ich jetzt so umgeschrieben, wie sie von allen genutzt wird, auch wenn es von der Hersteller-Doku abweicht. Außerdem wurde einer der beiden Widerstände von 1kOhm auf 470 Ohm geändert. Ich verspreche mir von beiden Änderungen mehr Stabilität beim Shutdown. Eventuell muss ich noch einmal Tests mit einem anderen Port machen, falls es nicht stabil genug läuft. Auch die Reset-Funktionalität muss noch getestet werden, auch wenn ich sie beim Akkubetrieb nicht benötige.

Nachtrag vom 28.04.2014: Siehe auch Seite USV!

26.07.2014: Weitere Schaltungsvorschläge für eine Shutdownschaltung oder USV auf Seite 5 des HiFi-Players!


Version 2 mit USB-Stick

Auf der Suche nach einer ganz anderen Methode hatte ich die folgende Lösung getestet.

Die Idee war die Stromversorgung eines USB-Sticks einzuschalten auf dem dann eine “Autorun-Datei” mit dem Shutdown-Befehl gestartet werden würde. Wie auch bei vorhergehenden Problemstellungen konnte ich nur mit Hilfe des Internets die Sache realisieren.

Aber wie immer alles auf eigene Gefahr! Ich weiß nicht, ob der USB-Stick dauerhaften Schaden nehmen könnte!

Die Bastelei, wie man den USB-Stick von seiner Stromversorgung trennt, wird nicht mehr genauer beschrieben, außer dass man es mit einem 4-poligen Umschalter erreichen könnte. Momentan ist es nach meiner Modifikation zumindest bei Volumio (Ableger von Raspbian) so, dass beim Stecken eines USB-Sticks (egal welchen Inhalts) der Raspi herunterfährt. Ich habe zwar noch Ungereimtheiten, wenn ich im laufenden Betrieb Geräte am USB-Port wechsle, aber das kommt im Normalbetrieb nicht vor und wird daher vorerst vernachlässigt. Eventuell muss man eine feste Zuweisung für den USB-Stick machen.

Hier die Software, die ich hauptsächlich in einem Forum von “meigrafd” abgeguckt habe:

$sudo bash
$nano /etc/udev/rules.d/90-usbautomount.rules

ACTION==”add”, SUBSYSTEMS==”usb”, KERNEL==”sd*”, RUN+=”/bin/bash /bin/usbmount.sh mount /dev/%k”

$/etc/init.d/udev restart
$nano /bin/usbmount.sh

#!/bin/bash
MountTo=/mnt/usbstick
ACTION=$1
DEVICE=$2
if [ “$ACTION” = “mount” ]; then
[ ! -d $MountTo ] && mkdir -p $MountTo
/bin/mount $DEVICE $MountTo
shutdown -h now
fi
exit 0

$chmod +x /bin/usbmount.sh

Der USB-Stick kann also leer sein! Die Änderungen finden auf der SD-Karte des Raspi statt!

Nachtrag vom 25.04.2014: Nach einiger Internetrecherche bin ich doch wieder bei Version 1 gelandet.

Nachtrag vom 28.04.2014: Siehe auch Seite USV!

Nachtrag vom 05.07.2014: Siehe auch Seite 5 des HiFi-Player “Shutdownschaltung”!