mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-03-08 03:59:39 +00:00
Fixed config export and import
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user