MQTT-Display-LaserCutter/include/settings.h
MaPaLo76 fde1f12315 fix(auth): HTTP Basic Auth funktioniert korrekt
- requestAuthentication() auf Basic Auth umgestellt (false = kein Digest)
- webPassword/webUser Buffer von 32 auf 64 Byte vergroessert
- POST /config: leeres Passwortfeld laesst bestehendes Passwort unveraendert
- Checkbox 'clear_auth' zum expliziten Deaktivieren des Schutzes
- Temporaere Debug-Ausgaben entfernt
2026-02-23 22:09:28 +01:00

78 lines
3.1 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 (0120)
uint8_t signalPolarity; // SIGNAL_POL_LOW_ACTIVE oder _HIGH_ACTIVE
float totalMinutes; // akkumulierte Laserzeit in Minuten
char webUser[64]; // Webinterface Benutzername (Standard: "admin")
char webPassword[64]; // 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;