Hm, ich will mal kurz meine Lösung zum Besten geben, die ist eigendlich sehr einfach und zuverlässig:
2 Taster, einer auf dem Kurzschlusspin (zum Wiederhochfahren/Hard-reset), das ist hier schon ausgiebig diskutiert worden...
Der andere Taster (zur Zeit noch ohne angeschlossenen LED, ist ein Conrad-Teil) sitzt zwischen Pin 22 (GPIO25) und Masse. Vom Pin 22 geht ein R nach 3,3V mit 10k (unkritisch).
Meine Lösung funktioniert "out of the box", wenn das GPIO module im RasPi aktiv ist..., kein Python oder C nötig...
2 Scripte:
shutdown.sh
#!/bin/bash
echo 22 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio22/direction
/etc/init.d/shutdown &
shutdown
#!/bin/bash
while true; do
sleep 1
i=`cat /sys/class/gpio/gpio22/value`
if [ $i -eq "0" ]; then
echo "Node wird jetzt runterfahren...." | wall
/sbin/shutdown -h now
fi
done;
Beide Scripte liegen unter /etc/init.d (ausführbar, root).
In das File /etc/rc.local wird vor dem "exit 0" die folgende Zeile eingefügt:
Das wars... !
Nach dem nächsten Neustart wird der "shutdown-Daemon" nun immer gestartet und wartet darauf, dass der Pegel auf Pin 22 auf "0" geht, dann wird runtergefahren...
Das Anschliessen einer LED auf einem beliebigen GPIO Port läuft nach dem gleichen Muster, nur eben dann als Ausgang, ist ja hier auch schon beschrieben worden...
m2c...
Mfg,
die Zentris
Nachtrag:
Man kann natürlich auch einen anderen Pin (als den von mir verwendeten Pin 22) nutzen, die Nutzung der vordefinierten Pins 5 (GPIO 3/SCLI) scheidet für mich aus, da dort ja der I2C Bus und auch "Geräte" dran hängen, dto. Pin 7 (GPIO 4/ 1-wire)...