78 lines
3.1 KiB
C++
78 lines
3.1 KiB
C++
#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 <Arduino.h>
|
||
#include <Preferences.h>
|
||
#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
|
||
char webUser[32]; // Webinterface Benutzername (Standard: "admin")
|
||
char webPassword[32]; // Webinterface Passwort (leer = kein Schutz)
|
||
};
|
||
|
||
// -----------------------------------------------------------------------------
|
||
// 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);
|
||
void saveWebCredentials(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;
|