156 lines
6.5 KiB
C++
156 lines
6.5 KiB
C++
// =============================================================================
|
||
// settings.cpp – NVS-Persistenz aller Konfigurationswerte
|
||
// =============================================================================
|
||
|
||
#include "settings.h"
|
||
|
||
// Globale Instanz
|
||
SettingsManager settings;
|
||
|
||
// ---------------------------------------------------------------------------
|
||
SettingsManager::SettingsManager() {
|
||
applyDefaults();
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::applyDefaults() {
|
||
strlcpy(_s.mqttBroker, DEFAULT_MQTT_BROKER, sizeof(_s.mqttBroker));
|
||
_s.mqttPort = DEFAULT_MQTT_PORT;
|
||
strlcpy(_s.mqttUser, DEFAULT_MQTT_USER, sizeof(_s.mqttUser));
|
||
strlcpy(_s.mqttPassword, DEFAULT_MQTT_PASSWORD, sizeof(_s.mqttPassword));
|
||
_s.gratisSeconds = DEFAULT_GRATIS_SECONDS;
|
||
_s.signalPolarity = SIGNAL_POL_LOW_ACTIVE;
|
||
_s.totalMinutes = 0.0f;
|
||
strlcpy(_s.webUser, DEFAULT_WEB_USER, sizeof(_s.webUser));
|
||
strlcpy(_s.webPassword, DEFAULT_WEB_PASSWORD, sizeof(_s.webPassword));
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::validateAndClamp() {
|
||
if (_s.gratisSeconds > MAX_GRATIS_SECONDS)
|
||
_s.gratisSeconds = DEFAULT_GRATIS_SECONDS;
|
||
if (_s.signalPolarity > SIGNAL_POL_HIGH_ACTIVE)
|
||
_s.signalPolarity = SIGNAL_POL_LOW_ACTIVE;
|
||
if (_s.mqttPort == 0)
|
||
_s.mqttPort = DEFAULT_MQTT_PORT;
|
||
if (_s.totalMinutes < 0.0f)
|
||
_s.totalMinutes = 0.0f;
|
||
// Broker darf nicht leer sein
|
||
if (_s.mqttBroker[0] == '\0')
|
||
strlcpy(_s.mqttBroker, DEFAULT_MQTT_BROKER, sizeof(_s.mqttBroker));
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::begin() {
|
||
// false = read/write Modus
|
||
_prefs.begin(NVS_NAMESPACE, false);
|
||
load();
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::load() {
|
||
strlcpy(_s.mqttBroker,
|
||
_prefs.getString(NVS_KEY_MQTT_BROKER, DEFAULT_MQTT_BROKER).c_str(),
|
||
sizeof(_s.mqttBroker));
|
||
|
||
_s.mqttPort = _prefs.getUShort(NVS_KEY_MQTT_PORT, DEFAULT_MQTT_PORT);
|
||
|
||
strlcpy(_s.mqttUser,
|
||
_prefs.getString(NVS_KEY_MQTT_USER, DEFAULT_MQTT_USER).c_str(),
|
||
sizeof(_s.mqttUser));
|
||
|
||
strlcpy(_s.mqttPassword,
|
||
_prefs.getString(NVS_KEY_MQTT_PASSWORD, DEFAULT_MQTT_PASSWORD).c_str(),
|
||
sizeof(_s.mqttPassword));
|
||
|
||
_s.gratisSeconds = _prefs.getUChar(NVS_KEY_GRATIS_SEC, DEFAULT_GRATIS_SECONDS);
|
||
_s.signalPolarity = _prefs.getUChar(NVS_KEY_SIGNAL_POL, SIGNAL_POL_LOW_ACTIVE);
|
||
_s.totalMinutes = _prefs.getFloat(NVS_KEY_TOTAL_MINUTES, 0.0f);
|
||
strlcpy(_s.webUser,
|
||
_prefs.getString(NVS_KEY_WEB_USER, DEFAULT_WEB_USER).c_str(),
|
||
sizeof(_s.webUser));
|
||
strlcpy(_s.webPassword,
|
||
_prefs.getString(NVS_KEY_WEB_PASSWORD, DEFAULT_WEB_PASSWORD).c_str(),
|
||
sizeof(_s.webPassword));
|
||
|
||
validateAndClamp();
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::save() {
|
||
_prefs.putString(NVS_KEY_MQTT_BROKER, _s.mqttBroker);
|
||
_prefs.putUShort(NVS_KEY_MQTT_PORT, _s.mqttPort);
|
||
_prefs.putString(NVS_KEY_MQTT_USER, _s.mqttUser);
|
||
_prefs.putString(NVS_KEY_MQTT_PASSWORD, _s.mqttPassword);
|
||
_prefs.putUChar (NVS_KEY_GRATIS_SEC, _s.gratisSeconds);
|
||
_prefs.putUChar (NVS_KEY_SIGNAL_POL, _s.signalPolarity);
|
||
_prefs.putFloat (NVS_KEY_TOTAL_MINUTES, _s.totalMinutes);
|
||
_prefs.putString(NVS_KEY_WEB_USER, _s.webUser);
|
||
_prefs.putString(NVS_KEY_WEB_PASSWORD, _s.webPassword);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::reset() {
|
||
_prefs.clear();
|
||
applyDefaults();
|
||
LOG_I("NVS", "NVS geleert – Defaults wiederhergestellt");
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::saveTotalMinutes(float minutes) {
|
||
if (minutes < 0.0f) minutes = 0.0f;
|
||
_s.totalMinutes = minutes;
|
||
_prefs.putFloat(NVS_KEY_TOTAL_MINUTES, minutes);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::saveGratisSeconds(uint8_t seconds) {
|
||
if (seconds > MAX_GRATIS_SECONDS) seconds = MAX_GRATIS_SECONDS;
|
||
_s.gratisSeconds = seconds;
|
||
_prefs.putUChar(NVS_KEY_GRATIS_SEC, seconds);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::saveSignalPolarity(uint8_t polarity) {
|
||
_s.signalPolarity = polarity;
|
||
_prefs.putUChar(NVS_KEY_SIGNAL_POL, polarity);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::saveMqttConfig(const char* broker, uint16_t port,
|
||
const char* user, const char* password) {
|
||
strlcpy(_s.mqttBroker, broker, sizeof(_s.mqttBroker));
|
||
_s.mqttPort = port;
|
||
strlcpy(_s.mqttUser, user, sizeof(_s.mqttUser));
|
||
strlcpy(_s.mqttPassword, password, sizeof(_s.mqttPassword));
|
||
|
||
_prefs.putString(NVS_KEY_MQTT_BROKER, broker);
|
||
_prefs.putUShort(NVS_KEY_MQTT_PORT, port);
|
||
_prefs.putString(NVS_KEY_MQTT_USER, user);
|
||
_prefs.putString(NVS_KEY_MQTT_PASSWORD, password);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::saveWebCredentials(const char* user, const char* password) {
|
||
strlcpy(_s.webUser, user, sizeof(_s.webUser));
|
||
strlcpy(_s.webPassword, password, sizeof(_s.webPassword));
|
||
_prefs.putString(NVS_KEY_WEB_USER, user);
|
||
_prefs.putString(NVS_KEY_WEB_PASSWORD, password);
|
||
}
|
||
|
||
// ---------------------------------------------------------------------------
|
||
void SettingsManager::printToSerial() const {
|
||
LOG_I("NVS", "=== Geladene Einstellungen ===");
|
||
LOG_I("NVS", " MQTT Broker : %s", _s.mqttBroker);
|
||
LOG_I("NVS", " MQTT Port : %d", _s.mqttPort);
|
||
LOG_I("NVS", " MQTT User : %s", _s.mqttUser[0] ? _s.mqttUser : "(leer)");
|
||
LOG_I("NVS", " MQTT Password : %s", _s.mqttPassword[0] ? "***" : "(leer)");
|
||
LOG_I("NVS", " Gratiszeit : %d s", _s.gratisSeconds);
|
||
LOG_I("NVS", " Signalpolarit : %s",
|
||
_s.signalPolarity == SIGNAL_POL_LOW_ACTIVE ? "LOW_ACTIVE" : "HIGH_ACTIVE");
|
||
LOG_I("NVS", " Laserzeit ges.: %.2f min", _s.totalMinutes);
|
||
LOG_I("NVS", " Web User : %s", _s.webUser);
|
||
LOG_I("NVS", " Web Passwort : %s", _s.webPassword[0] ? "***" : "(kein Schutz)");
|
||
LOG_I("NVS", "==============================");
|
||
}
|