185 lines
5.6 KiB
C++
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 = 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);
|
|
}
|