#pragma once // ============================================================================= // settings.h – NVS-Persistenz aller Konfigurationswerte // Projekt: MQTT-Display LaserCutter // // Verwendung: // settings.begin(); // einmalig in setup() // settings.get().mqttBroker; // Wert lesen // settings.saveTotalMinutes(x);// Einzelwert atomar schreiben // settings.save(); // alle Werte auf einmal schreiben // ============================================================================= #include #include #include "config.h" // ----------------------------------------------------------------------------- // Settings-Struktur – alle persistierten Werte // ----------------------------------------------------------------------------- struct Settings { char mqttBroker[64]; // MQTT Broker IP oder Hostname uint16_t mqttPort; // MQTT Port (Standard: 1883) char mqttUser[32]; // MQTT Benutzername (leer = kein Auth) char mqttPassword[32]; // MQTT Passwort uint8_t gratisSeconds; // Gratiszeit in Sekunden (0–120) uint8_t signalPolarity; // SIGNAL_POL_LOW_ACTIVE oder _HIGH_ACTIVE float totalMinutes; // akkumulierte Laserzeit in Minuten }; // ----------------------------------------------------------------------------- // SettingsManager – lädt/speichert Konfiguration via ESP32 Preferences (NVS) // ----------------------------------------------------------------------------- class SettingsManager { public: SettingsManager(); // Öffnet NVS-Namespace und lädt alle Werte (einmalig in setup() aufrufen) void begin(); // Alle Werte aus NVS lesen (mit Defaults für fehlende Einträge + Validierung) void load(); // Alle Werte in NVS schreiben void save(); // NVS-Namespace löschen und Defaults wiederherstellen void reset(); // ---- Einzelne atomare Speicheroperationen -------------------------------- // Für Werte die sich häufig ändern (z. B. totalMinutes nach jeder Session) void saveTotalMinutes(float minutes); void saveGratisSeconds(uint8_t seconds); void saveSignalPolarity(uint8_t polarity); void saveMqttConfig(const char* broker, uint16_t port, const char* user, const char* password); // ---- Zugriff auf Werte -------------------------------------------------- const Settings& get() const { return _s; } Settings& getRef() { return _s; } // für direktes Bearbeiten + save() // Debug-Ausgabe aller Werte auf Serial void printToSerial() const; private: Settings _s; Preferences _prefs; void applyDefaults(); void validateAndClamp(); // Ungültige Werte auf Defaults korrigieren }; // Globale Instanz – in settings.cpp definiert, überall verwendbar extern SettingsManager settings;