Dauerbetrieb: Autostart (main.py) und Watchdog
MicroPython fuehrt main.py nach jedem Reset selbst aus -- nach Stromausfall oder Watchdog-Neustart laeuft die Anzeige damit ohne Notebook wieder an. Bisher gab es die Datei bewusst nicht, weil am Aufbau gearbeitet wurde. **Das Abbruchfenster ist kein Komfort, sondern die Notbremse.** Ohne es waere ein Geraet, dessen Programm beim Start haengt, nur noch durch Neuflashen erreichbar: Die Endlosschleife belegt die REPL sofort nach dem Reset. main.py wartet deshalb erst AUTOSTART_DELAY (3 s), in denen Ctrl-C zurueck an die REPL fuehrt -- dann laeuft auch kein Watchdog. Watchdog (WDT_TIMEOUT = 120 s): startet das Geraet neu, wenn die Poll-Schleife stehenbleibt. Gefuettert wird zu Beginn *jedes* Durchlaufs, auch nach einem Fehler -- "KEIN LINK" ist kein Stillstand, die Schleife laeuft ja weiter. Der Wert muss ueber allem liegen, was regulaer blockieren darf (WLAN 20 s, Montierung 3 s, dazu ein MQTT-Versuch); knapper waere er eine Neustart-Schleife. Ein gestarteter Watchdog laesst sich nicht mehr abschalten. Deshalb legt ihn nur main.py an -- im Handbetrieb ueber die REPL startete das Geraet sonst neu, waehrend man nachdenkt. Weiteres: - Nach einem Watchdog-Neustart meldet main.py das beim Start (machine.reset_cause()), sonst saehe er aus wie ein Stromausfall. - Eine Ausnahme faengt main.py ab und startet nach RESTART_DELAY (10 s) neu, statt in die REPL zu fallen und die Anzeige einzufrieren. Die Pause verhindert eine Neustart-Schleife im Sekundentakt. - Autostart faehrt mit Helligkeitsregelung (with_ldr=True, Nutzerentscheidung). Am Geraet bestaetigt: Autostart nach Reset laeuft durch (Watchdog aktiv, WLAN, MQTT), ein absichtlich herbeigefuehrter Stillstand loest den Watchdog aus und das Geraet kommt von allein wieder hoch -- mit der Meldung "Vorheriger Lauf wurde vom Watchdog beendet". Ctrl-C im Startfenster gibt die REPL frei. Beim Geraetetest aufgefallen: make_watchdog wurde ohne log aufgerufen, im Startprotokoll stand also nichts vom Watchdog. Behoben und durch einen Test festgehalten. 178 Tests gruen (neu: test_main.py). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -156,6 +156,28 @@ LABEL_DEC = "DE "
|
||||
# "MONTIERUNG" stand hier zuerst und erschien am Geraet als "MONTIERUN".
|
||||
NOLINK_LINES = ("KEIN LINK", "TELESKOP")
|
||||
|
||||
# -- Dauerbetrieb (nur ESP32-C3) ------------------------------------------
|
||||
# Watchdog: Kommt die Poll-Schleife so lange nicht mehr durch, startet die
|
||||
# Hardware das Geraet neu. 120 s sind reichlich bemessen -- im Normalbetrieb
|
||||
# wird jede Sekunde gefuettert. Der Wert muss ueber allem liegen, was regulaer
|
||||
# blockieren darf: WLAN-Aufbau bis WIFI_TIMEOUT (20 s), Montierung
|
||||
# MOUNT_TIMEOUT (3 s), dazu ein MQTT-Verbindungsversuch. Sonst startet das
|
||||
# Geraet mitten im normalen Betrieb neu.
|
||||
#
|
||||
# Achtung: Ein einmal gestarteter Watchdog laesst sich nicht mehr abschalten.
|
||||
# Deshalb legt ihn nur main.py an, nicht der Handbetrieb ueber die REPL.
|
||||
WDT_TIMEOUT = 120.0 # Sekunden
|
||||
|
||||
# Wartezeit beim Autostart, bevor main.py die Schleife startet. In diesem
|
||||
# Fenster bricht Ctrl-C ab und man kommt an die REPL -- ohne das waere ein
|
||||
# Geraet mit fehlerhaftem main.py nur noch ueber ein Neuflashen erreichbar.
|
||||
AUTOSTART_DELAY = 3.0 # Sekunden
|
||||
|
||||
# Nach einem Absturz in main.py: so lange warten, dann neu starten. Die Pause
|
||||
# verhindert eine Neustart-Schleife im Sekundentakt, wenn etwas dauerhaft
|
||||
# kaputt ist (und gibt Zeit, mit Ctrl-C einzugreifen).
|
||||
RESTART_DELAY = 10.0 # Sekunden
|
||||
|
||||
# -- WLAN (nur ESP32-C3) --------------------------------------------------
|
||||
# Zugangsdaten stehen in wifi_config.py (nicht im Git, siehe
|
||||
# wifi_config_example.py). Hier nur das Zeitverhalten.
|
||||
|
||||
Reference in New Issue
Block a user