Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
strompi2
#11
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()


 
Bezüglich ShutDown Wartezeit...
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.
Zitieren
#12
Vielen Dank für die Mühe mit dem Script!
Ich konnte es jetzt mal kurz testen. bei mir verhält es sich derzeit so das er bei Wegnahme der USB-Stromversorgung zwar in den USV-Mode wechselt, dann aber gar nicht abschaltet. 

Dieses Script benutze ich derzeit für meinen manuellen Taster und die LED welche ich noch zusätzlich verbaut habe. Nach dem Drücken des Tasters legt es auch eine Pause ein und zeigt diese durch ein Blinken der LED an. Eventuell könnte man es auch umschreiben das es auf den GPIO21 ansspricht. 

Code:
# shutdown script for Raspberry Pi
# watch LOW level on pin 5 to enter sleep mode
# status led on pin 7: ON = ready, BLINK = confirm button

import RPi.GPIO as GPIO
import os
import time

# use the pin number as on the raspi board

GPIO.setmode(GPIO.BOARD)

# set pin 7 as output and HIGH, pin 5 is input

GPIO.setup(7, GPIO.OUT)
GPIO.output(7, True)
GPIO.setup(5, GPIO.IN)

# start the loop for every .5 seconds, waiting for LOW on pin 5
# then 2 short flashes with led to confirm and shutdown to sleep mode

while True:
       if not (GPIO.input(5)):
               GPIO.output(7, False)
               time.sleep(.1)
               GPIO.output(7, True)
               time.sleep(.1)
               GPIO.output(7, False)
               time.sleep(.1)
               GPIO.output(7, True)
               os.system("sudo shutdown -h now")
       time.sleep(.5)
Dein Script wäre aber genau das wonach ich gesucht hatte um einen kurzzeitigen Versorgungswegfall zu überbrücken.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
RasPiCarProjekt