Helpdesk

Hallo Joy-IT-Team,


Sie haben mir schon einmal bei dem Ticket "587" geholfen. Mein Serialless-Modus mit dem Eintrag von "python3 /home/pi/strompi/powershutdown_serialless.py &python3 /home/pi/strompi/powershutdown_serialless.py &" in der rc.local funktioniert wie erwartet: (1) Sicherer Shutdown nach der eingestellten ShutdownTimer-Zeit in der Datei "powershutdown_serialless.py" wenn die Spannung nicht wieder kommt. (2) Automatisches Hochfahren bei Spannungswiederkehr, wenn der Raspi nach obiger Prozedur herunter gefahren wurde und die eingestellte Zeit "Shutdown-Timer" aus der Konfiguration (über den Befehl "python3 strompi_config.py" eingestellt) abgelaufen ist. (3) Hochfahren des Raspi mit dem Power-ON-Knopf nach Shutdown über "pthyon3 shutdown.py", nachdem die "Shutdown-Timer" Zeit aus der Konfiguration abgelaufen ist. Das alles läuft bei mir mit dem GPIO22 (nicht 21).


Nun finde ich keine Möglichkeit mich in diesem Modus per E-Mail über den Power-Loss / Power-Back / Shutdown / Power-On nach Shutdown informieren zu lassen.
Oder habe ich ein von Ihnen bereits zur Verfügung gestelltes Script übersehen?


Freundliche Grüße


Klaus-Peter Urban

Pit

14.11.24 00:29

Hallo Pit,


ich habe die beiden Skripte kombiniert und das Skriptverzeichnis in unseren Downloads aktualisiert.


Das Skript liegt im Serialless-Ordner und heißt powershutdown_Email_serialless.py
Die Variablen müssen Sie natürlich noch auf Ihre Bedürfnisse anpassen.


Mit freundlichen Grüßen


Tim (Joy-IT)

Tim

14.11.24 09:55

Hallo Tim,


vielen Dank für diese Erweiterung. Sie haben mir damit einen großen Gefallen getan.


Die Variablen im Script habe ich angepasst., Beim Starten des Scriptes über die Konsole mit sudo python3 powershutdown_Email_serialless.py wird nun die erste E-Mail mit "System gestartet" gesendet. Die zweite E-Mail erhalte ich, wenn das erste Mal die 5V-Versorgung ausfällt. Außerdem sehe ich auf der Konsole den runterzählenden Timer. Die dritte E-Mail erhalte ich, wenn die Spannung innerhalb der Shutdown-Timer-Zeit wiederkommt.


pi@Raspi:~/strompi $ sudo python3 powershutdown_Email_serialless.py
Monitoring for power failure events...
Power failure detected!
Shutting down in 10 seconds if power is not restored.
Shutting down in 9 seconds if power is not restored.
Shutting down in 8 seconds if power is not restored.
Shutting down in 7 seconds if power is not restored.
Power restored during countdown.
Monitoring for power failure events...


Nun bin ich am Verzweifeln: Wenn das zweite Mal 5V ausfällt, dann passiert nichts mehr auf der Konsole und es wird auch keine E-Mail gesendet. 
Testweise habe ich in der Scriptzeile 73 die Zeile "GPIO.remove_event_detect(GPIO_TPIN)GPIO.remove_event_detect(GPIO_TPIN)" eingefügt. Das ändert jedoch nichts.
Die Spannung am zugehörigen GPIO-Pin habe ich mit einem Voltmeter gemessen: Tatsächlich fällt beim Abziehen der 5V der Level dort immer von 3,3 Volt auf etwa 0 Volt.
Der Abbruch der Routine mit CTRL-C an der Tastatur funktioniert:


^CKeyboard Interrupt detected. Cleaning up GPIO...
GPIO cleanup completed.
pi@Raspi:~/strompi $



Aus vorherigen Versuchen war ich der Meinung, dass auch der wiederholte Spannungsaufall erkannt wird. Ich bin mir aber nicht mehr sicher.
Ich habe den Versuch mit dem vorherigen Script "powershutdown_serialless.py" ohne E-Mail-Funktion wiederholt und sehe jetzt aber das gleiche unerwartete (zweiter 5V Power-Loss wird nicht erkannt) Ergebnis:


pi@Raspi:~/strompi $ sudo python3 powershutdown_serialless.py
Safe Shutdown in the case of Powerfailure (CTRL-C for exit)
Raspberry Pi Powerfail detected
Raspberry Pi Power Back Detected!
^C
Keyboard Interrupt
Cleaned up Pins
pi@Raspi:~/strompi $


Die RTC-Zeit ist gesetzt. Die Konfiguration ist: StromPi-Output: mUSB, StromPi-Mode: mUSB -> Battery, Raspberry Pi Shutdown: Enabled, Shutdown-Timer: 20 seconds, Powerfail Warning: Disabled, Serial-Less Mode: Enabled, Power Save Mode: Disabled, PowerOn-Button: Enabled, PowerOn-Button-Timer: 30 seconds, Battery-Level Shutdown: 50%, Powerfail-Counter: 3, PowerOff Mode: Disabled, Alarm-Configuration: WakeUp-Alarm: Disabled, Alarm-Mode: Time-Alarm, Alarm-Time: 00:00, Alarm-Date: 01.11, WakeUp-Alarm: Monday, Weekend Wakeup: Disabled, Minute Wakeup Timer: 30 minutes, PowerOff-Alarm: Disabled, PowerOff-Alarm-Time: 00:00, Interval-Alarm: Disabled, Interval-On-Time: 00 minutes, Interval-Off-Time: 00 minutes, Voltage-Levels: Wide-Range-Inputvoltage:  not connected, LifePo4-Batteryvoltage: 3.36V [100%] [charging], microUSB-Inputvoltage: 5.045V, Output-Voltage: 4.971V


Leider bin ich kein Python-Experte und kann den Python-Code nicht richtig analysieren. Geben Sie mir bitte einen Hinweis was bei mir falsch laufen könnte?


Freundliche Grüße


Klaus-Peter Urban

Pit

19.11.24 09:35

Hallo Pit,


vielen Dank für den Hinweis.


Ich habe das Skriptverzeichnis nochmal aktualisiert hochgeladen. 
Der Fehler sollte nun beseitigt sein.


Mit freundlichen Grüßen 


Tim (Joy-IT)

Tim

19.11.24 17:52

Guten Abend Tim,


vielen Dank - die entscheidende Wende ist damit erreicht. Jetzt bin ich fast am Ziel.
Ich könnte auch akzeptieren, dass nach der Rückkehr der Spannung das System "bounct". Aber es stört mich etwas.
So kommt nach der Rückkehr der Spannung ein- oder zweimal immer nochmal ein erkannter Spannungseinbruch, obwohl da keiner mehr war:


pi@Raspi:~ $ sudo python3 /opt/strompi/powershutdown_Email_start_serialless.py
Enabled Serialless   <----- das habe ich hier mit eingebaut als direkte Kopie aus der Datei "Start_serialless.py" von Euch
Monitoring for power failure events...
Power failure detected!  <---- das ist der erste Spannungsausfall. Das folgende Verhalten ist wie erwartet. Ich erhalte eine EMail.
Shutting down in 10 seconds if power is not restored.
Shutting down in 9 seconds if power is not restored.
Shutting down in 8 seconds if power is not restored.
Shutting down in 7 seconds if power is not restored.
Power restored during countdown.  <---- Hier kommt die Spannung wieder. Ich erhalte eine EMail.
Power failure detected! <---- Ca 3 Sekunden danach kommt diese Meldung, obwohl die Spannungsversorgung stabil ist. Ich erhalte eine weitere EMail.
Power restored during countdown. <---- Diese Meldung kommt automatisch, ohne dass ich an der Versorgungsspannung etwas geändert habe. Ich bekomme eine weitere unnötige EMail. 
Power failure detected!  <----- Das hier habe ich zum Test selber ausgelöst. Das Verhalten ist wie erwartet.
Shutting down in 10 seconds if power is not restored.
Shutting down in 9 seconds if power is not restored.
Shutting down in 8 seconds if power is not restored.
Shutting down in 7 seconds if power is not restored.
Shutting down in 6 seconds if power is not restored.
Shutting down in 5 seconds if power is not restored.
Power restored during countdown. <---- Dann habe ich die Spannugnsversorgung wieder dran gestöpselt. Meldung und EMail wie erwartet.
Power failure detected! <---- Das hier ist wieder "gebounct" mit unnötiger EMail
Power restored during countdown. <---- Wieder gut erkannt ohne mein Zutun. Unnötige EMail.
Power failure detected! <---- und ein weiteres Mal ohne mein Zutun mit unnötiger EMail.
Shutting down in 10 seconds if power is not restored.
Shutting down in 9 seconds if power is not restored.
Shutting down in 8 seconds if power is not restored.
Shutting down in 7 seconds if power is not restored.
Shutting down in 6 seconds if power is not restored.
Power restored during countdown.
Power failure detected!
Power restored during countdown.
Power failure detected!
Power restored during countdown. <---- und hier hat das Script doppelt gebounct...
^CKeyboard Interrupt detected. Cleaning up GPIO...
GPIO cleanup completed.
pi@Raspi:~ $


Das Verhalten der dopelten und unnötigen gebouncten EMails ist bei dem Einbinden dieses Scriptes in der rc.local gleich. 
Vielleicht ist mein System nicht richtig konfiguriert, da ich auch beim Aufruf in der rc.local ein "sudo" zum Aurufen davor setzen muss?


Gibt es evtl für das Bouncen eine Lösung?


Freundliche Grüße


Klaus-Peter Urban

Pit

19.11.24 21:46

Hallo Pit,


ich habe das Skript nochmal auf Ihre wünsche entsprechend angepasst und einen debounce hinzugefügt.
Es befindet sich nun als neue Datei im Skriptverzeichnis.


Über die Variable DebounceTimer können Sie die Zeit in Sekunden einstellen, wie lange ein weiteres Senden der Email unterbunden werden soll.
Sollte in dieser Zeit die Spannung dennoch länger ausfallen, wird die Powerfail Email doch noch vor dem herunterfahren des Raspberry Pi gesendet.


Mit freundlichen Grüßen


Tim (Joy-IT)

Tim

20.11.24 10:23