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:
@@ -67,6 +67,7 @@ beiden Startprogrammen.
|
||||
| `wifi.py` | WLAN-Anbindung des ESP32 (verbinden, Verbindung halten). | ✓ |
|
||||
| `mqtt.py` | MQTT: Einstellungen empfangen, Zustand veröffentlichen. | ✓ |
|
||||
| `run_esp32.py` | Startprogramm auf dem ESP32: WLAN, Anzeige, Schleife. | ✓ |
|
||||
| `main.py` | Autostart nach jedem Reset, mit Watchdog und Abbruchfenster. | ✓ |
|
||||
| `wifi_config.py` | WLAN-Zugangsdaten, **nicht im Git** (Vorlage `wifi_config_example.py`). | ✓ |
|
||||
| `mqtt_config.py` | MQTT-Zugangsdaten, **nicht im Git** (Vorlage `mqtt_config_example.py`). | ✓ |
|
||||
| `run_display.py` | Startprogramm auf dem Mac: dieselbe Schleife mit Kommandozeile. | |
|
||||
@@ -168,10 +169,46 @@ mpremote repl
|
||||
>>> run_esp32.main(with_mqtt=False) # ohne MQTT (sonst an, sofern konfiguriert)
|
||||
```
|
||||
|
||||
Bewusst **kein** `main.py`: MicroPython startet eine Datei dieses Namens nach
|
||||
jedem Reset von selbst, und solange am Aufbau gearbeitet wird, ist der manuelle
|
||||
Start angenehmer. Für den Dauerbetrieb in der Sternwarte reicht später eine
|
||||
`main.py` mit den zwei Zeilen von oben.
|
||||
### Dauerbetrieb: Autostart und Watchdog
|
||||
|
||||
`main.py` startet die Anzeige nach jedem Reset von selbst — nach Stromausfall
|
||||
oder Watchdog-Neustart läuft sie also ohne Notebook wieder an.
|
||||
|
||||
**Das Abbruchfenster ist die Notbremse.** Ohne es wäre ein Gerät, dessen Programm
|
||||
beim Start hängt, nur noch durch Neuflashen erreichbar: Die Endlosschleife belegt
|
||||
die REPL sofort nach dem Reset. Deshalb wartet `main.py` erst
|
||||
`config.AUTOSTART_DELAY` Sekunden:
|
||||
|
||||
```
|
||||
Grossanzeige startet in 3 s -- Ctrl-C bricht ab.
|
||||
Watchdog: aktiv, 120 s
|
||||
WLAN: verbinde mit Mizar ...
|
||||
```
|
||||
|
||||
In diesen drei Sekunden führt Ctrl-C zurück an die REPL (`Autostart abgebrochen,
|
||||
REPL ist frei`) — dann läuft auch kein Watchdog. Wer das Gerät ganz ohne
|
||||
Autostart will: `mpremote rm :main.py`.
|
||||
|
||||
Der **Watchdog** (`config.WDT_TIMEOUT`, 120 s) startet das Gerät neu, wenn die
|
||||
Poll-Schleife stehenbleibt. Gefüttert wird zu Beginn jedes Durchlaufs — auch nach
|
||||
einem Fehler, denn „KEIN LINK" ist kein Stillstand: Die Schleife läuft ja weiter.
|
||||
Der Watchdog greift nur, wenn gar nichts mehr geht.
|
||||
|
||||
Die 120 s müssen über allem liegen, was regulär blockieren darf: WLAN-Aufbau bis
|
||||
20 s, Montierung 3 s, dazu ein MQTT-Verbindungsversuch. Ein knapper Wert wäre
|
||||
eine Neustart-Schleife. **Ein gestarteter Watchdog lässt sich nicht mehr
|
||||
abschalten** — deshalb legt ihn nur `main.py` an, nicht der Handbetrieb über die
|
||||
REPL; sonst startete das Gerät neu, während man an der REPL nachdenkt.
|
||||
|
||||
Nach einem Watchdog-Neustart meldet `main.py` das beim Start
|
||||
(`Vorheriger Lauf wurde vom Watchdog beendet`, über `machine.reset_cause()`) —
|
||||
sonst sähe der Neustart aus wie ein gewöhnlicher Stromausfall. Eine **Ausnahme**
|
||||
fängt `main.py` ab und startet nach `config.RESTART_DELAY` neu, statt in die REPL
|
||||
zu fallen und die Anzeige einzufrieren.
|
||||
|
||||
Am Gerät bestätigt (2026-07-27): Autostart nach Reset, Watchdog löst bei
|
||||
absichtlichem Stillstand aus und das Gerät kommt von allein wieder hoch, Ctrl-C
|
||||
im Startfenster gibt die REPL frei.
|
||||
|
||||
### Was auf beiden Seiten gleich läuft
|
||||
|
||||
@@ -264,7 +301,6 @@ Mac:
|
||||
- **Netzwerk zur echten Montierung.** Die GM4000 steht in `192.168.1.115`, das
|
||||
Heimnetz des ESP32 ist `192.168.178.x` — der Mac erreicht sie per VPN, der
|
||||
ESP32 so nicht. Muss geklärt werden, bevor es an die echte Montierung geht.
|
||||
- **Dauerbetrieb:** Autostart (`main.py`) und ein Watchdog fehlen noch bewusst.
|
||||
|
||||
## Gradzeichen
|
||||
|
||||
|
||||
Reference in New Issue
Block a user