Helpdesk

Guten Tag


Ich habe ein Problem einem System, welches ohne Benutzerintervention nach einem Stromausfall beliebiger Dauer sicher anlaufen sollte (in einem Schaltschrank). Den StromPi habe ich für "Shutdown" konfiguriert und fange die Messages am Serialport ab (via NodeRed anstatt Python, aber das tut nichts zur Sache). "Normal kurze" und "überaus lange" Stromausfälle funktionieren perfekt.


Beiläufig fällt mir auf, dass nach dem Wiederanlegen der Eingangsspannung oft Meldungen "xxxShutdownRaspberryPixxx", unmittelbar darauf gefolgt von "xxx--StromPiPowerBack--xxx" ausgegeben werden. Soweit kein Problem - dies kann auch auf Spannungsschwankungen am Eingang beim Nachladen des Akkus verursacht sein - mein Shutdown Script (wie auch SerialShutdown.py) fängt dies ab und führt einen "effektiven Shutdown" erst nach 10 Sekunden ohne "powerback" aus.


All das klappt aber nur solange, als zwischen dem tatsächlichen Herunterfahren nach Ablauf dieser 10 Sekunden und dem definitiven PowerOff innerhalb des StromPi kein "Powerback" mehr erfolgt. Bei einem "Powerback" in dieser Zeitspanne liegen die 5V am Raspberry Pi dauernd an, dieser bekommt aber vom "powerback" nichts mit und verharrt im "softwaremässig mit ACPI ausgeschalteten" Zustand. Ich interpretiere dies auch anhand des Firmware-Quellcodes so. Ohne Intervention vor Ort (z.B. durch einen neuerlichen längeren Stromausfall) lässt sich das System nicht mehr starten.


Das müsste nicht sein, denn bei einem Shutdown aufgrund eines Alarms stellt der StromPi ohne Probleme den Ausgang auch bei anliegendem Eingang ab. Demgegenüber liegt hier das Problem darin, dass der Strompi nicht weiss, ob sich nun das angeschlossene Script bereits für ein Herunterfahren entschieden hat oder nicht. Das sollte man ihm mitteilen können.


Mein Vorschlag: Ein neuer Befehl via Serialport wird eingeführt (z.B. "powerbackoverride"). Trifft dieser ein, kann wie bisher der Zustand shutdown_flag bestätigt und aber neu ein zusätzlicher neuer Zustand powerback_override_flag im StromPi gesetzt werden. Mit gesetztem powerback_override_flag werden nachfolgende "powerback" Ereignisse ignoriert, also läuft ab diesem Zeitpunkt ein Shutdown genau gleich ab, wie wenn dieser von einem Alarm ausgelöst worden wäre - mit definitivem PowerOff() am Ende. Nach durchgeführtem PowerOff() wird das Flag rückgesetzt und, wenn jetzt inzwischen ein powerback erfolgt war, wieder ein PowerOn nach einem Timeout veranlasst (ähnlich wie bei einem Einschalten nach Timer). Damit geht die 5V Speisung des Pi kurz aus und wieder ein.


Nach meiner Einschätzung könnte dies mit nur wenigen zusätzlichen Ressourcen und Anpassungen am Quellcode erreicht werden und vielleicht deshalb noch auf den Chip passen. Ich fühle mich selbst mit Microcontrollern, C++ und Firmwareflashen nicht sattelfest genug - aber vielleicht haben andere Benutzer dasselbe Problem und Sie ein Interesse an einer Verbesserung?


Herzliche Grüsse aus der Schweiz


Marcel


PS: Falls Interesse besteht, überlasse ich gerne meine node-red flows zur allgemeinen Verwendung, geben Sie mir ggf. eine E-Mail Adresse bekannt.


[nbsp]

marcel

12.12.21 17:08

Hallo Marcel,


vielen Dank für Ihre Vorschläge.


Wir werden sie hier im Team besprechen und eventuell im nächsten Funktionsupdate mit integrieren.


Mit freundlichen Grüßen


Tim (Joy-IT)

Tim

13.12.21 13:48