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