Wenn der Mikrocontroller (in meinem Fall ein NodeMCU V2 Amica) allmählich in den Routinebetrieb übergeht, dann ist es entscheidend, dass man nicht alle paar Tage das Board durch harten Reset neu starten muss, weil sich der Code festgefressen hat. Leider ist die Komplexität durch die vielen eingebundenen Libraries so groß, dass man sich nicht mehr auf sauberen Code verlassen kann.
Hier greift das Konzept des "Watchdog". Ein sehr guter Artikel dazu ist hier zu finden. Die Funktion scheint nicht so gut dokumentiert, so dass andere Leute das einfach ausprobieren.
Neben dem standardmäßigen Harware Watchdog (ca. 7s timeout) und Software Watchdog (ca. 3s timeout) ist es sehr sinnvoll, noch selber einen "Loop Watchdog" zu ergänzen, falls der Code in einer Lib hängen bleibt und von dort die Hard- und Software Watchdogs gut gefüttert werden. Hierzu auf Github ein guter Post im orginalen ESP für Arduino Repository. Ein - inzwischen sehr gut funktionierendes - Code-Beispiel gibt es auf meinem Github,
Ähnlich wichtig ist es, im Code immer wieder die Konnektivität zu prüfen - WiFi und MQTT Verbindungen gehen oft genug einfach verloren. Ein regelmäßiger Check hilft, hier z.B. in der loop Hauptschleife:
if (WiFi.status() != WL_CONNECTED) {
connect_WiFi();
return;
}
if (!mqtt_client.connected()) {
connect_MQTT();
}
mqtt_client.loop();
mqtt_send_data();
Eine weitere gute Idee ist es, selber Timeouts, z.B. für Sensorabfragen zu definieren, und sinnlose Werte abzufangen, bevor man damit rechnet!