MQTT-Display-LaserCutter/src/settings.cpp

156 lines
6.5 KiB
C++
Raw 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.

// =============================================================================
// 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", "==============================");
}