235 lines
7.8 KiB
C++
235 lines
7.8 KiB
C++
#include "app_config.h"
|
|
#include "config.h"
|
|
|
|
#include <Preferences.h>
|
|
|
|
AppConfig appConfig;
|
|
|
|
static Preferences preferences;
|
|
|
|
void loadDefaultConfig() {
|
|
appConfig.deviceName = "Overland Controller";
|
|
|
|
appConfig.relays[0] = {
|
|
"relay_1",
|
|
"Relay 1",
|
|
"aux",
|
|
1,
|
|
RELAY_1_PIN,
|
|
true,
|
|
true
|
|
};
|
|
|
|
appConfig.relays[1] = {
|
|
"relay_2",
|
|
"Relay 2",
|
|
"fridge",
|
|
2,
|
|
RELAY_2_PIN,
|
|
true,
|
|
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,
|
|
false,
|
|
"cabin",
|
|
i + 1,
|
|
false,
|
|
90.0
|
|
};
|
|
}
|
|
|
|
appConfig.bms.enabled = false;
|
|
appConfig.bms.name = "";
|
|
appConfig.bms.address = "";
|
|
appConfig.bms.addressType = "public";
|
|
}
|
|
|
|
void loadConfig() {
|
|
loadDefaultConfig();
|
|
|
|
preferences.begin("overland", 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.tempSensors[i].weather = preferences.getBool(
|
|
(prefix + "weather").c_str(),
|
|
appConfig.tempSensors[i].weather
|
|
);
|
|
appConfig.tempSensors[i].group = preferences.getString(
|
|
(prefix + "group").c_str(),
|
|
appConfig.tempSensors[i].group
|
|
);
|
|
appConfig.tempSensors[i].priority = preferences.getInt(
|
|
(prefix + "priority").c_str(),
|
|
appConfig.tempSensors[i].priority
|
|
);
|
|
appConfig.tempSensors[i].highAlertEnabled = preferences.getBool(
|
|
(prefix + "hi_alert_en").c_str(),
|
|
appConfig.tempSensors[i].highAlertEnabled
|
|
);
|
|
appConfig.tempSensors[i].highAlertF = preferences.getFloat(
|
|
(prefix + "high_alert_f").c_str(),
|
|
appConfig.tempSensors[i].highAlertF
|
|
);
|
|
}
|
|
|
|
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("overland", 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((prefix + "weather").c_str(), appConfig.tempSensors[i].weather);
|
|
preferences.putString((prefix + "group").c_str(), appConfig.tempSensors[i].group);
|
|
preferences.putInt((prefix + "priority").c_str(), appConfig.tempSensors[i].priority);
|
|
preferences.putBool((prefix + "hi_alert_en").c_str(), appConfig.tempSensors[i].highAlertEnabled);
|
|
preferences.putFloat((prefix + "high_alert_f").c_str(), appConfig.tempSensors[i].highAlertF);
|
|
}
|
|
|
|
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("overland", 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(" / role ");
|
|
Serial.print(appConfig.relays[i].role);
|
|
Serial.print(" / channel ");
|
|
Serial.print(appConfig.relays[i].hardwareChannel);
|
|
Serial.print(" / GPIO ");
|
|
Serial.print(appConfig.relays[i].pin);
|
|
Serial.print(" / available ");
|
|
Serial.print(appConfig.relays[i].available ? "true" : "false");
|
|
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.print(appConfig.tempSensors[i].address);
|
|
Serial.print(" / group ");
|
|
Serial.print(appConfig.tempSensors[i].group);
|
|
Serial.print(" / priority ");
|
|
Serial.print(appConfig.tempSensors[i].priority);
|
|
Serial.print(" / high alert ");
|
|
Serial.print(appConfig.tempSensors[i].highAlertEnabled ? "on" : "off");
|
|
Serial.print(" @ ");
|
|
Serial.println(appConfig.tempSensors[i].highAlertF);
|
|
}
|
|
|
|
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);
|
|
}
|