Helpdesk

Mein RPi fährt gelegentlich ohne erkennbaren Grund herunter. Der Grund scheint das serialShutdown Script zu sein.[nbsp]
Ich habe ein paar Debug-Anweisungen eingebaut, die im Syslog protokolliert werden. Hier ist zu sehen, dass sehr oft[nbsp] der Text


"xxxxxShutdownRaspberryPi"


empfangen wird, oft gefolgt von


"xxx--StromPiPowerBack--xxx"


Das führt dann zu Timeouts und gelegentlich zum Herunterfahren des RPi.


Der RPi wird über den MicroUSB Stecker des StromPi mit 5 V versorgt.[nbsp]


Wie kann der StromPi dazu gebracht werden, diese Meldungen nur bei echten Unterbrechungen der Stromversorgung zu schicken? Wie kann das Script so geändert werden, dass es weniger empfindlich reagiert?

eehmke

15.06.21 14:04

Hallo eehmke,


danke für die Nachricht.


Das Problem kann verschiedene Ursachen haben. Es ist wichtig, dass ein USB-Netzteil verwendet wird, das die benötigte Menge an Strom bereitstellen kann. Zudem kann ein Adapter (z.B. Micro USB auf Typ-C) zu einem Spannungsabfall führen.


Das Skript kann natürlich so bearbeitet werden, dass der Shutdown-Befehl erst zu einem späteren Zeitpunkt gesendet wird (wait_for_shutdowntimer). Hierbei sollte darauf geachtet werden, dass die Zeit, die im Configskript des StromPis festgelegt ist, höher eingestellt ist. Ansonsten wird unter Umständen der Strom abgeschaltet, bevor der Raspberry heruntergefahren ist.


Wir empfehlen bei Problemen dieser Art auch, die Firmware neu auf den StromPi zu flashen. Eine Anleitung dafür, ist in der Downloadsektion dieser Seite zu finden,


Mit freundlichen Grüßen


Niklas Tritschler

Niklas

16.06.21 09:35

Sollte ich die Firmware neu flashen, auch wenn ich die aktuelle Version installiert habe?

eehmke

17.06.21 23:33

Hallo,


möglicherweise ist die Firmware beschädigt. Über den Flashvorgang kann der StromPi dahingehend zurückgesetzt werden.

Niklas

18.06.21 09:38

Ich habe jetzt festgestellt, dass der String xxx--StromPiPowerBack--xxx in einigen Fällen nicht erkannt wird! D.h. die Anweisung


[nbsp]if line == 'xxxShutdownRaspberryPixxx':
[nbsp][nbsp]print ("PowerFail - Raspberry Pi Shutdown")
[nbsp][nbsp]t = wait_for_shutdowntimer + 1
[nbsp]elif line == 'xxx--StromPiPowerBack--xxx':
[nbsp][nbsp]print ("PowerBack - Raspberry Pi Shutdown aborted")
[nbsp][nbsp]t = 0
[nbsp]elif line:
[nbsp][nbsp][nbsp]print ("other message: \"%s\"" % line)


schlägt fehl, und es wird "other message" ausgegeben. Somit wird der Shutdown nicht abgebrochen. Andere Debug-Anweisungen zeigen aber eindeutig, dass der Text 'xxx--StromPiPowerBack--xxx' von der seriellen Schnittstelle gelesen wurde. Mir ist noch nicht klar, warum der Stringvergleich fehlschlagen kann.

eehmke

18.06.21 17:38

Ich denke, ich habe die Ursache gefunden. Der String, der mittels readline von der seriellen Schnittstelle des StromPi gelesen wird, enthält ein Null-Byte an erster Position! Dieses wird von der Methode strip() nicht entfernt. Ich habe das Statement ergänzt:
[nbsp]rawline = ser.readline()
[nbsp]line = rawline.decode(encoding='UTF-8',errors='strict').strip().strip('\x00')
Damit funktioniert das Programm fehlerfrei, und der Shutdown wird rechtzeitig unterbrochen. Das ganze ist übrigens in Python3, falls das eine Rolle spielt.

eehmke

18.06.21 20:03

Hallo eehmke,[nbsp]


vielen Dank für den Hinweis.


Wir werden es hier noch einmal überprüfen und die Skripte dann entsprechend anpassen.


Mit freundlichen Grüßen


Tim (Joy-IT)

Tim

22.06.21 16:09