Zustandsspeicherung und Systemüberwachung
Zustandsspeicherung und Systemüberwachung
Übersicht
Der Pool Controller verfügt über eine umfassende Zustandsspeicherung und Systemzustandsüberwachung für zuverlässigen 24/7-Betrieb.
Zustandsspeicherung
Was gespeichert wird
Alle Controller-Zustände werden automatisch im nichtflüchtigen Speicher (NVS) gespeichert und nach Neustarts oder Stromausfällen wiederhergestellt:
Betriebseinstellungen
- Betriebsmodus: auto, manual, boost, timer
- Pool-Maximaltemperatur: Ziel-Pooltemperatur
- Solar-Minimaltemperatur: Minimale Solartemperatur für Aktivierung
- Temperatur-Hysterese: Temperaturdifferenz für die Regelung
- Timer-Einstellungen: Start- und Endzeiten für den Timer-Modus
Relaiszustände
- Pool-Pumpe: Ein/Aus-Zustand
- Solar-Pumpe: Ein/Aus-Zustand
Funktionsweise
Verwendet die Preferences-Bibliothek für dauerhaften Speicher in NVS (Non-Volatile Storage). Jeder Wert wird mit einem typspezifischen Schlüssel gespeichert.
Relaiszustände werden einzeln pro Relais über einen eigenen Namespace
in NVS gespeichert und speichern den Ein/Aus-Zustand unter dem Schlüssel
"switch".
Automatische Wiederherstellung
Beim Neustart des Controllers:
- State Manager lädt alle gespeicherten Werte
- Konfigurationseinstellungen aus der LittleFS config.json können den gespeicherten Zustand überschreiben
- Letzter bekannter Zustand wird verwendet, wenn keine Konfigurationsüberschreibung existiert
Dadurch wird sichergestellt:
- Nach einem Stromausfall kehren die Pumpen in ihren vorherigen Zustand zurück
- Benutzerkonfigurierte Temperaturen und Timer bleiben erhalten
- Der Betriebsmodus bleibt über Neustarts hinweg erhalten
Beispielszenario
Benutzer stellt ein:
- Betriebsmodus: auto
- Pool max. Temp.: 28,5°C
- Timer: 10:30 - 17:30
Stromausfall um 14:00
Controller startet neu:
- Lädt gespeicherten Zustand
- Stellt Betriebsmodus auto wieder her
- Stellt Temperaturen und Timer wieder her
- Setzt Betrieb nahtlos fortSystemzustandsüberwachung
Speicherüberwachung
Das System überwacht kontinuierlich den freien Heap-Speicher, um Abstürze durch Speichererschöpfung zu verhindern.
Schwellwerte
ESP32:
- Speicherwarnung (niedrig): < 16 KB (16.384 Bytes)
- Kritischer Speicher: < 8 KB (8.192 Bytes) → Automatischer Neustart
Verhalten
- Alle 10 Sekunden: Speicherprüfung wird durchgeführt
- Niedriger Speicher: Warnung wird an Seriell und MQTT protokolliert
- Kritischer Speicher: Controller startet automatisch neu
- Minimum-Tracking: Zeichnet den niedrigsten Speicherstand seit Boot auf
Watchdog-Timer
Verhindert Systemhänger und stellt die Wiederherstellung nach Softwarefehlern sicher.
ESP32
- Hardware-Watchdog: 30-Sekunden-Timeout
- Automatischer Panic: Neustart, wenn Watchdog nicht gefüttert wird
- Wird in der Hauptschleife gefüttert: Jeder Zyklus
Health-Status-API
SystemMonitor bietet Methoden zur Überprüfung des Systemzustands:
// Aktuellen freien Heap abrufen
uint32_t heap = SystemMonitor::getFreeHeap();
// Minimalen Heap seit Boot abrufen
uint32_t minHeap = SystemMonitor::getMinFreeHeap();
// Prüfen, ob das System gesund ist
bool healthy = SystemMonitor::isHealthy();
// Betriebszeit in Sekunden abrufen
uint32_t uptime = SystemMonitor::getUptimeSeconds();
uint8_t fragmentation = SystemMonitor::getHeapFragmentation();Konfiguration
Funktionen aktivieren
Zustandsspeicherung und Systemüberwachung sind automatisch aktiviert. Keine Konfiguration erforderlich.
Schwellwerte anpassen
Zum Anpassen der Speicherschwellwerte src/SystemMonitor.hpp ändern:
// Speicherschwelle (niedrig) — nur Warnung
static constexpr uint32_t LOW_MEMORY_THRESHOLD = 8192; // 8 KB
// Kritische Speicherschwelle (automatischer Neustart)
static constexpr uint32_t CRITICAL_MEMORY_THRESHOLD = 4096; // 4 KB
Auto-Neustart deaktivieren
Wenn Sie niedrigen Speicher manuell behandeln möchten (nicht empfohlen für 24/7-Betrieb):
Den Auto-Neustart-Abschnitt in src/SystemMonitor.hpp auskommentieren:
// Kritischer Speicher - sofort neu starten
if (freeHeap < criticalThreshold) {
Serial.printf("CRITICAL: Free heap %d bytes < %d bytes. Rebooting...\n",
freeHeap, criticalThreshold);
// Serial.flush();
// delay(1000);
// ESP.restart(); // Diese Zeile auskommentieren, um Auto-Neustart zu deaktivieren
}Überwachung und Logs
Serielle Ausgabe
Normaler Betrieb:
✓ State loaded from persistent storage
State persistence and system monitoring initialized
Free heap: 28,456 bytesSpeicherwarnung (niedrig):
WARNING: Low memory detected. Free heap: 7,892 bytes (min: 7,456)Kritischer Speicher (vor Neustart):
CRITICAL: Free heap 3,842 bytes < 4,096 bytes. Rebooting...MQTT-Logs
Der Systemstatus wird über LoggerNode an das MQTT-Topic veröffentlicht:
pool-controller/logBeispielnachrichten:
"State persistence and system monitoring initialized""WARNING: Low memory detected. Free heap: 7892 bytes (min: 7456)"
Vorteile für den 24/7-Betrieb
Zuverlässigkeit
- ✅ Übersteht Stromausfälle
- ✅ Erholt sich automatisch von Speicherproblemen
- ✅ Erkennt und behebt Systemhänger
- ✅ Kein manueller Eingriff erforderlich
Benutzererfahrung
- ✅ Einstellungen bleiben über Neustarts erhalten
- ✅ Keine Neukonfiguration nach Stromausfall
- ✅ Nahtlose Betriebskontinuität
- ✅ Vorhersagbares Verhalten
Wartung
- ✅ Erkennung von Speicherlecks
- ✅ Automatische Problembehebung
- ✅ Health-Status-Überwachung
- ✅ Diagnoseinformationen verfügbar
Fehlerbehebung
Zustände werden nicht gespeichert
- Serielle Ausgabe auf “State loaded from persistent storage” prüfen
- Prüfen, ob die NVS-Partition verfügbar ist
- Auf Preferences-Fehler in den Logs prüfen
Häufige Neustarts
Wenn der Controller häufig neu startet:
Speichernutzung prüfen: Logs auf Speicherwarnungen durchsuchen
Speicherleck identifizieren: Muster erkennen, wann Neustarts auftreten
Speichernutzung reduzieren:
- Messintervalle erhöhen
- MQTT-Nachrichtenhäufigkeit reduzieren
- Funktionen nach Möglichkeit deaktivieren
Schwellwert senken: Kritischen Schwellwert vorübergehend senken, um Neustarts zu verhindern
(der Controller startet dann trotzdem neu, aber die Betriebszeit kann während der Fehlersuche verlängert werden)
Watchdog-Timeouts
Wenn der Watchdog auslöst (ESP32):
- Lange blockierende Operationen: Auf Verzögerungen oder lange Operationen im Code prüfen
- Timeout erhöhen: Timeout in
SystemMonitor::begin()anpassen - Häufiger füttern:
SystemMonitor::feedWatchdog()in langen Operationen einfügen
Technische Details
Speichernutzung
ESP32 NVS:
- Betriebsmodus: ~10 Bytes
- Gleitkommawerte (3): 12 Bytes
- Integer-Werte (4): 16 Bytes
- Gesamt: ~40 Bytes
Leistungsauswirkung
- Zustand speichern: < 10ms (nur bei Änderungen)
- Zustand laden: < 20ms (einmal beim Boot)
- Speicherprüfung: < 1ms (alle 10 Sekunden)
- Watchdog füttern: < 0,1ms (jeder Schleifendurchlauf)
Gesamtauswirkung: Vernachlässigbar (< 0,1 % CPU-Auslastung)
Zukünftige Erweiterungen
- 🔜 Konfigurierbare Schwellwerte: MQTT-basierte Schwellwertkonfiguration
- 🔜 Health-Dashboard: Web-UI für Zustandsüberwachung
Version: 3.3.0 Status: Produktionsbereit Plattform: ESP32