Ich habe ein Pi Model B Rev 2.0 (glaube ich) und beabsichtige, es für ein Hausautomationssystem zu verwenden. Da ich einen Vorauszahlungszähler an meiner Stromversorgung habe, gehen mir gelegentlich die Elektronen aus, um die Netzversorgung meines Hauses zu umgehen!
Um Probleme zu vermeiden, habe ich eine USV in Form eines UPis Basic von PiModules erhalten . Ich habe es so konfiguriert, dass ich die Versorgungsspannungen über die serielle Schnittstelle des Pi abfragen kann (nicht die Standardkonfiguration, sondern eine im Handbuch dokumentierte unterstützte Einrichtung ).
Gegenwärtig wird ein dedizierter GPIO-Pin verwendet (Pin 13 im Header, GPIO27, glaube ich), und der eingebaute Mikrocontroller verwendet diesen und ein Python-Skript, das von rc.local ausgeführt wird, um dem Pi mitzuteilen, shutdown -h now
wann der Pin niedrig genommen wird. Dies geschieht, wenn die Taste "Shutdown" der USV gedrückt wird oder wenn die Batterieversorgung bei einem Ausfall der Hauptversorgung zu niedrig wird. Für die Aufzeichnung lautet das Skript:
#!/usr/bin/python
# import the libraries to use time delays, send os commands and access GPIO pins
import PRi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM) # Set pin numbering to board numbering
GPIO.setup(27, GPIO.IN, pull_up_don=GPIO.PUD_UP) # Setup pin 27 as an input
while True: # Setup a whille loopto wait for a button press
if(GPIO.input(27)==0): # Setup an if loop to run a shutdown command when button press sensed
os.system("sudo shutdown -h now") # Send shutdown command to os
break
time.sleep(1) # Allow a sleep time of 1 second to reduce CPU usage
Dies scheint mir ein wenig unelegant zu sein, da init
es die eingebaute Fähigkeit hat, Energieereignisse zu verarbeiten. Ich möchte wiederholen , dass ich verwende sysvinit auf Raspbian Jessie nicht die Standard systemd für diese Version (für persönliche Präferenz und Vertrautheit Gründen).
Ich möchte zunächst das obige Skript durch etwas ersetzen, das init anweist, es zu tun, powerfailnow
wenn der Pin niedrig wird - und ein, powerokwait
wenn es anschließend hoch zurückgibt. Schließlich auch die serielle Schnittstelle abzufragen ich will , und halte ein Auge auf den Antworten auf @rpi
, @bat
und @ups
welche Rück die aktuellen Spannungen an dem 5V - Schiene von Pi, der LiPo - Akku und die Upis besitzen microUSB Eingang bzw. - so dass das Pi kann eine Warnung geben auf powerfail
Ich behandle einen Stromausfall (dies sollte zu einer Initiierungsaktion führen und den Pi den Stromausfallstatus an mich, den Benutzer, melden lassen - vorausgesetzt, ich habe es noch nicht bemerkt!)
Ich habe jedoch Schwierigkeiten herauszufinden, wie Linux-USV-Geräte signalisieren, init
dass die in definierten powerfail
\ powerwait
\ powerfailnow
\ powerokwait
Befehle ausgeführt \etc\inittab
werden sollen.
Kann mir zum Beispiel jemand raten, wie "erwachsene" USV einem Linux-Kernel auf einem normalen PC mitteilt, dass "Power" -Ereignisse auftreten, und wie ich dasselbe in diesem System auf einem Pi reproduzieren könnte?