Code:
#!/usr/bin/python
# Initialisierung
import RPi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM)
# Hier den entsprechden GPIO-PIN auswaehlen
GPIO_TPIN = 21
print "Sicheres Herunterfahren bei Stromausfall (CTRL-C zum Schliessen)"
# Set pin as input
GPIO.setup(GPIO_TPIN,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)
Current_State = 0
Previous_State = 0
try:
print "Warte auf Initialisierung der Spannungsversorgung..."
while GPIO.input(GPIO_TPIN)==1:
Current_State = 0
print " Bereit"
while True :
Current_State = GPIO.input(GPIO_TPIN)
if Current_State==1 and Previous_State==0:
Previous_State=1
if(Previous_State==1):
counter = 60 #60sek. warten bis zum shutdown
ic = 0
while ic <= counter:
sleep(1)
ic += 1
if ic >= counter:
if(Current_State==0 and Previous_State==1): #wenn USB IN wieder versorgt wird, shutdown abbrechen
Previous_State=0
sleep(0.01)
break
if(Current_State==1 and Previous_State==1): #liegt nach Ablauf des counters keine Spannung an USB IN an, RPi shutdown
os.system("sudo shutdown -h now")
elif Current_State==0 and Previous_State==1:
Previous_State=0
time.sleep(0.01)
except KeyboardInterrupt:
print " Quit"
GPIO.cleanup()
Ob der Script so funktioniert habe ich nicht getestet und ist wahrscheinlich, falls er denn funktioniert, nicht die eleganteste Lösung.
Kannst ihn ja mal testen, ich komme erst die Tage dazu.