Fixed config export and import

This commit is contained in:
Gunnar Skjold
2024-04-04 19:31:16 +02:00
parent 2bfd863882
commit c22bca3130
3 changed files with 60 additions and 51 deletions

View File

@@ -67,6 +67,7 @@ bool AmsConfiguration::getNetworkConfig(NetworkConfig& config) {
bool AmsConfiguration::setNetworkConfig(NetworkConfig& config) {
NetworkConfig existing;
if(config.sleep > 2) config.sleep = 1;
if(config.mode < 1 || config.mode > 4) config.mode = 1;
if(getNetworkConfig(existing)) {
networkChanged |= strcmp(config.ssid, existing.ssid) != 0;
networkChanged |= strcmp(config.psk, existing.psk) != 0;

View File

@@ -1220,38 +1220,40 @@ void AmsWebServer::handleSave() {
}
if(server.hasArg(F("w")) && server.arg(F("w")) == F("true")) {
NetworkConfig network;
config->getNetworkConfig(network);
strcpy(network.ssid, server.arg(F("ws")).c_str());
String psk = server.arg(F("wp"));
if(!psk.equals("***")) {
strcpy(network.psk, psk.c_str());
}
network.power = server.arg(F("ww")).toFloat() * 10;
network.sleep = server.arg(F("wz")).toInt();
network.use11b = server.hasArg(F("wb")) && server.arg(F("wb")) == F("true");
network.mode = server.arg(F("nc")).toInt();
if(network.mode > 3) network.mode = 1; // WiFi Client
config->setNetworkConfig(network);
if(server.hasArg(F("nm"))) {
if(server.arg(F("nm")) == "static") {
strcpy(network.ip, server.arg(F("ni")).c_str());
strcpy(network.gateway, server.arg(F("ng")).c_str());
strcpy(network.subnet, server.arg(F("ns")).c_str());
strcpy(network.dns1, server.arg(F("nd1")).c_str());
strcpy(network.dns2, server.arg(F("nd2")).c_str());
} else if(server.arg(F("nm")) == "dhcp") {
strcpy(network.ip, "");
strcpy(network.gateway, "");
strcpy(network.subnet, "");
strcpy(network.dns1, "");
strcpy(network.dns2, "");
long mode = server.arg(F("nc")).toInt();
if(mode > 0 && mode < 3) {
NetworkConfig network;
config->getNetworkConfig(network);
network.mode = mode;
strcpy(network.ssid, server.arg(F("ws")).c_str());
String psk = server.arg(F("wp"));
if(!psk.equals("***")) {
strcpy(network.psk, psk.c_str());
}
}
network.ipv6 = server.hasArg(F("nx")) && server.arg(F("nx")) == F("true");
network.mdns = server.hasArg(F("nd")) && server.arg(F("nd")) == F("true");
config->setNetworkConfig(network);
network.power = server.arg(F("ww")).toFloat() * 10;
network.sleep = server.arg(F("wz")).toInt();
network.use11b = server.hasArg(F("wb")) && server.arg(F("wb")) == F("true");
if(server.hasArg(F("nm"))) {
if(server.arg(F("nm")) == "static") {
strcpy(network.ip, server.arg(F("ni")).c_str());
strcpy(network.gateway, server.arg(F("ng")).c_str());
strcpy(network.subnet, server.arg(F("ns")).c_str());
strcpy(network.dns1, server.arg(F("nd1")).c_str());
strcpy(network.dns2, server.arg(F("nd2")).c_str());
} else if(server.arg(F("nm")) == "dhcp") {
strcpy(network.ip, "");
strcpy(network.gateway, "");
strcpy(network.subnet, "");
strcpy(network.dns1, "");
strcpy(network.dns2, "");
}
}
network.ipv6 = server.hasArg(F("nx")) && server.arg(F("nx")) == F("true");
network.mdns = server.hasArg(F("nd")) && server.arg(F("nd")) == F("true");
config->setNetworkConfig(network);
}
}
if(server.hasArg(F("ntp")) && server.arg(F("ntp")) == F("true")) {
@@ -2188,6 +2190,7 @@ void AmsWebServer::configFileDownload() {
if(includePrice) {
PriceServiceConfig price;
config->getPriceServiceConfig(price);
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("priceEnabled %s\n"), price.enabled ? 1 : 0));
if(strlen(price.entsoeToken) == 36 && includeSecrets) server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("priceEntsoeToken %s\n"), price.entsoeToken));
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("priceArea %s\n"), price.area));
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("priceCurrency %s\n"), price.currency));
@@ -2215,10 +2218,10 @@ void AmsWebServer::configFileDownload() {
if(ds != NULL) {
DayDataPoints day = ds->getDayData();
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("dayplot %d %lu %lu %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"),
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("dayplot %d %lu %.3f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"),
day.version,
(int32_t) day.lastMeterReadTime,
day.activeImport,
day.activeImport / 1000.0,
day.accuracy,
ds->getHourImport(0),
ds->getHourImport(1),
@@ -2246,8 +2249,8 @@ void AmsWebServer::configFileDownload() {
ds->getHourImport(23)
));
if(day.activeExport > 0) {
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR(" %u %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n"),
day.activeExport,
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR(" %.3f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n"),
day.activeExport / 1000.0,
ds->getHourExport(0),
ds->getHourExport(1),
ds->getHourExport(2),
@@ -2278,10 +2281,10 @@ void AmsWebServer::configFileDownload() {
}
MonthDataPoints month = ds->getMonthData();
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("monthplot %d %lu %lu %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"),
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR("monthplot %d %lu %.3f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d"),
month.version,
(int32_t) month.lastMeterReadTime,
month.activeImport,
month.activeImport / 1000.0,
month.accuracy,
ds->getDayImport(1),
ds->getDayImport(2),
@@ -2316,8 +2319,8 @@ void AmsWebServer::configFileDownload() {
ds->getDayImport(31)
));
if(month.activeExport > 0) {
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR(" %u %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n"),
month.activeExport,
server.sendContent(buf, snprintf_P(buf, BufferSize, PSTR(" %.3f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n"),
month.activeExport / 1000.0,
ds->getDayExport(1),
ds->getDayExport(2),
ds->getDayExport(3),

View File

@@ -282,6 +282,8 @@ void setup() {
if(sysConfig.boardType < 20) {
config.clearGpio(gpioConfig);
hw.applyBoardConfig(sysConfig.boardType, gpioConfig, meterConfig, 0);
config.setMeterConfig(meterConfig);
config.setGpioConfig(gpioConfig);
}
} else {
config.clearMeter(meterConfig);
@@ -1511,7 +1513,7 @@ void configFileParse() {
sys.boardType = String(buf+10).toInt();
} else if(strncmp_P(buf, PSTR("netmode "), 8) == 0) {
if(!lNetwork) { config.getNetworkConfig(network); lNetwork = true; };
network.mode = String(buf+5).toInt();
network.mode = String(buf+8).toInt();
} else if(strncmp_P(buf, PSTR("ssid "), 5) == 0) {
if(!lNetwork) { config.getNetworkConfig(network); lNetwork = true; };
strcpy(network.ssid, buf+5);
@@ -1705,21 +1707,24 @@ void configFileParse() {
} else if(strncmp_P(buf, PSTR("entsoeFixedPrice "), 17) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
price.unused2 = String(buf+17).toFloat() * 1000;
} else if(strncmp_P(buf, PSTR("priceEnabled "), 13) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
price.enabled = String(buf+13).toInt() == 1;
} else if(strncmp_P(buf, PSTR("priceEntsoeToken "), 17) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
strcpy(price.entsoeToken, buf+12);
strcpy(price.entsoeToken, buf+17);
} else if(strncmp_P(buf, PSTR("priceArea "), 10) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
strcpy(price.area, buf+11);
strcpy(price.area, buf+10);
} else if(strncmp_P(buf, PSTR("priceCurrency "), 14) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
strcpy(price.currency, buf+15);
strcpy(price.currency, buf+14);
} else if(strncmp_P(buf, PSTR("priceMultiplier "), 16) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
price.unused1 = String(buf+17).toFloat() * 1000;
price.unused1 = String(buf+16).toFloat() * 1000;
} else if(strncmp_P(buf, PSTR("priceFixedPrice "), 16) == 0) {
if(!lPrice) { config.getPriceServiceConfig(price); lPrice = true; };
price.unused2 = String(buf+17).toFloat() * 1000;
price.unused2 = String(buf+16).toFloat() * 1000;
} else if(strncmp_P(buf, PSTR("thresholds "), 11) == 0) {
if(!lEac) { config.getEnergyAccountingConfig(eac); lEac = true; };
int i = 0;
@@ -1734,7 +1739,7 @@ void configFileParse() {
DayDataPoints day = { 0 };
char * pch = strtok (buf+8," ");
while (pch != NULL) {
int64_t val = String(pch).toInt();
double val = String(pch).toDouble();
if(day.version < 5) {
if(i == 0) {
day.version = val;
@@ -1753,13 +1758,13 @@ void configFileParse() {
if(i == 1) {
day.lastMeterReadTime = val;
} else if(i == 2) {
day.activeImport = val;
day.activeImport = day.version > 5 ? val * 1000 : val;
} else if(i == 3) {
day.accuracy = val;
} else if(i > 3 && i < 28) {
day.hImport[i-4] = val / pow(10, day.accuracy);
} else if(i == 28) {
day.activeExport = val;
day.activeExport = day.version > 5 ? val * 1000 : val;
} else if(i > 28 && i < 53) {
day.hExport[i-29] = val / pow(10, day.accuracy);
}
@@ -1775,7 +1780,7 @@ void configFileParse() {
MonthDataPoints month = { 0 };
char * pch = strtok (buf+10," ");
while (pch != NULL) {
int64_t val = String(pch).toInt();
double val = String(pch).toDouble();
if(month.version < 6) {
if(i == 0) {
month.version = val;
@@ -1794,13 +1799,13 @@ void configFileParse() {
if(i == 1) {
month.lastMeterReadTime = val;
} else if(i == 2) {
month.activeImport = val;
month.activeImport = month.version > 6 ? val * 1000 : val;
} else if(i == 3) {
month.accuracy = val;
} else if(i > 3 && i < 35) {
month.dImport[i-4] = val / pow(10, month.accuracy);
} else if(i == 35) {
month.activeExport = val;
month.activeExport = month.version > 6 ? val * 1000 : val;
} else if(i > 35 && i < 67) {
month.dExport[i-36] = val / pow(10, month.accuracy);
}