#include "app_config.h" #include "config.h" #include AppConfig appConfig; static Preferences preferences; void loadDefaultConfig() { appConfig.deviceName = DEVICE_NAME; appConfig.relays[0] = { "relay_1", "Relay 1", RELAY_STARLINK_PIN, true }; appConfig.relays[1] = { "relay_2", "Relay 2", RELAY_FRIDGE_PIN, true }; appConfig.tempSensorCount = 4; for (int i = 0; i < MAX_TEMP_SENSORS; i++) { appConfig.tempSensors[i] = { "temp_" + String(i + 1), "Temperature " + String(i + 1), "", i < appConfig.tempSensorCount }; } appConfig.bms.enabled = true; appConfig.bms.name = "BMS"; appConfig.bms.address = "a5:c2:37:2c:05:dc"; appConfig.bms.addressType = "public"; } void loadConfig() { loadDefaultConfig(); preferences.begin("xterra", true); bool configured = preferences.getBool("configured", false); if (configured) { appConfig.deviceName = preferences.getString("device", appConfig.deviceName); for (int i = 0; i < MAX_RELAYS; i++) { String prefix = "r" + String(i + 1) + "_"; appConfig.relays[i].name = preferences.getString( (prefix + "name").c_str(), appConfig.relays[i].name ); appConfig.relays[i].enabled = preferences.getBool( (prefix + "enabled").c_str(), appConfig.relays[i].enabled ); } appConfig.tempSensorCount = preferences.getInt( "temp_count", appConfig.tempSensorCount ); if (appConfig.tempSensorCount < 0) { appConfig.tempSensorCount = 0; } if (appConfig.tempSensorCount > MAX_TEMP_SENSORS) { appConfig.tempSensorCount = MAX_TEMP_SENSORS; } for (int i = 0; i < MAX_TEMP_SENSORS; i++) { String prefix = "t" + String(i + 1) + "_"; appConfig.tempSensors[i].name = preferences.getString( (prefix + "name").c_str(), appConfig.tempSensors[i].name ); appConfig.tempSensors[i].address = preferences.getString( (prefix + "addr").c_str(), appConfig.tempSensors[i].address ); appConfig.tempSensors[i].enabled = preferences.getBool( (prefix + "enabled").c_str(), appConfig.tempSensors[i].enabled ); } appConfig.bms.enabled = preferences.getBool("bms_enabled", appConfig.bms.enabled); appConfig.bms.name = preferences.getString("bms_name", appConfig.bms.name); appConfig.bms.address = preferences.getString("bms_addr", appConfig.bms.address); appConfig.bms.addressType = preferences.getString("bms_type", appConfig.bms.addressType); } preferences.end(); if (!configured) { saveConfig(); } } void saveConfig() { preferences.begin("xterra", false); preferences.putBool("configured", true); preferences.putString("device", appConfig.deviceName); for (int i = 0; i < MAX_RELAYS; i++) { String prefix = "r" + String(i + 1) + "_"; preferences.putString((prefix + "name").c_str(), appConfig.relays[i].name); preferences.putBool((prefix + "enabled").c_str(), appConfig.relays[i].enabled); } preferences.putInt("temp_count", appConfig.tempSensorCount); for (int i = 0; i < MAX_TEMP_SENSORS; i++) { String prefix = "t" + String(i + 1) + "_"; preferences.putString((prefix + "name").c_str(), appConfig.tempSensors[i].name); preferences.putString((prefix + "addr").c_str(), appConfig.tempSensors[i].address); preferences.putBool((prefix + "enabled").c_str(), appConfig.tempSensors[i].enabled); } preferences.putBool("bms_enabled", appConfig.bms.enabled); preferences.putString("bms_name", appConfig.bms.name); preferences.putString("bms_addr", appConfig.bms.address); preferences.putString("bms_type", appConfig.bms.addressType); preferences.end(); } void factoryResetConfig() { preferences.begin("xterra", false); preferences.clear(); preferences.end(); loadDefaultConfig(); saveConfig(); } void printConfig() { Serial.println("Config:"); Serial.print(" Device: "); Serial.println(appConfig.deviceName); Serial.println(" Relays:"); for (int i = 0; i < MAX_RELAYS; i++) { Serial.print(" "); Serial.print(appConfig.relays[i].id); Serial.print(" / "); Serial.print(appConfig.relays[i].name); Serial.print(" / GPIO "); Serial.print(appConfig.relays[i].pin); Serial.print(" / enabled "); Serial.println(appConfig.relays[i].enabled ? "true" : "false"); } Serial.println(" Temperature Sensors:"); for (int i = 0; i < MAX_TEMP_SENSORS; i++) { Serial.print(" "); Serial.print(appConfig.tempSensors[i].id); Serial.print(" / "); Serial.print(appConfig.tempSensors[i].name); Serial.print(" / enabled "); Serial.print(appConfig.tempSensors[i].enabled ? "true" : "false"); Serial.print(" / address "); Serial.println(appConfig.tempSensors[i].address); } Serial.println(" BMS:"); Serial.print(" Enabled: "); Serial.println(appConfig.bms.enabled ? "true" : "false"); Serial.print(" Name: "); Serial.println(appConfig.bms.name); Serial.print(" Address: "); Serial.println(appConfig.bms.address); Serial.print(" Address Type: "); Serial.println(appConfig.bms.addressType); }