Files
overland-controller/firmware/esp32/xterra-controller/app_config.cpp
T

185 lines
5.6 KiB
C++

#include "app_config.h"
#include "config.h"
#include <Preferences.h>
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 = false;
appConfig.bms.name = "";
appConfig.bms.address = "";
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);
}