Some improvements to v2.2

This commit is contained in:
Gunnar Skjold 2022-12-09 20:26:31 +01:00
parent bc4d61098c
commit 27b9058af5
9 changed files with 140 additions and 20 deletions

View File

@ -61,7 +61,8 @@ struct WiFiConfig {
uint8_t power;
uint8_t sleep;
uint8_t mode;
}; // 212
bool autoreboot;
}; // 213
struct MqttConfig86 {
char host[128];

View File

@ -54,6 +54,8 @@ bool AmsConfiguration::setWiFiConfig(WiFiConfig& config) {
wifiChanged |= strcmp(config.hostname, existing.hostname) != 0;
wifiChanged |= config.power != existing.power;
wifiChanged |= config.sleep != existing.sleep;
wifiChanged |= config.mode != existing.mode;
wifiChanged |= config.autoreboot != existing.autoreboot;
} else {
wifiChanged = true;
}
@ -883,6 +885,7 @@ bool AmsConfiguration::relocateConfig96() {
WiFiConfig wifi;
EEPROM.get(CONFIG_WIFI_START, wifi);
wifi.mode = 1; // WIFI_STA
wifi.autoreboot = true;
EEPROM.put(CONFIG_WIFI_START, wifi);
NtpConfig ntp;

View File

@ -23,7 +23,7 @@
e: { e: false, k: '', a: '' },
m: { e: false, w: false, v: false, a: false, c: false }
},
w: { s: '', p: '', w: 0.0, z: 255 },
w: { s: '', p: '', w: 0.0, z: 255, a: true },
n: {
m: '', i: '', s: '', g: '', d1: '', d2: '', d: false, n1: '', n2: '', h: false
},
@ -335,6 +335,9 @@
</div>
</div>
</div>
<div class="my-3">
<label><input type="checkbox" name="wa" value="true" bind:checked={configuration.w.a} class="rounded mb-1"/> Auto reboot on connection problem</label>
</div>
</div>
<div class="cnt">
<strong class="text-sm">Network</strong>

View File

@ -20,11 +20,12 @@ let sysinfo = {
usrcfg: null,
fwconsent: null,
booting: false,
upgrading: false
upgrading: false,
security: 0
};
export const sysinfoStore = writable(sysinfo);
export async function getSysinfo() {
const response = await fetchWithTimeout("/sysinfo.json");
const response = await fetchWithTimeout("/sysinfo.json?t=" + Math.floor(Date.now() / 1000));
sysinfo = (await response.json())
sysinfoStore.set(sysinfo);
};

View File

@ -64,7 +64,7 @@
{#if data.me < 0}
<div class="bd-red">{ 'MQTT: ' + mqttError(data.me) }</div>
{/if}
{#if data.ee != 0}
{#if data.ee > 0 || data.ee < 0}
<div class="bd-red">{ 'PriceAPI: ' + priceError(data.ee) }</div>
{/if}
<div class="flex-auto p-2 flex flex-row-reverse flex-wrap">

View File

@ -2,5 +2,6 @@
"s": "%s",
"p": "%s",
"w": %.1f,
"z": %d
"z": %d,
"a": %s
},

View File

@ -0,0 +1,96 @@
AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/
/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+///////////////////////+/v7/2dG4/4tuIP+E
ZxT/x7mU//7+/v///////////////////////////////////////////////////////v78/4hs
Hv/b07v/6+fa/4VoF//w7eT//v7+////////////////////////////////////////////////
//39+/+BZBL/7+zh//r69/+JbSD/6eXY//7+/v//////////////////////////////////////
///////////+/v7/wbOL/4dqGf+LcCL/qpVd//7+/v/+/v7////////////////////////////+
/v7//v7+//7+/v/+/v7//v7+//7+/v/t6d7/6OLT//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/+/v7/+Pfy/7ysgP/x7ub//v7+//7+/v/39vL/wrOL/+vn2//+/v7//v7+
//7+/v/+/v7//v7+//Dt5P/PxKT/9fTu//n49f+mklf/f2AL/5Z9Nv+ZgDz/gmMP/5mBPP/v6+H/
/v7+//7+/v/+/v7//v7+//7+/v+WfTj/va2B/6KMUP/+/v7//v7+/+/r4f/Uyq3/0cap/+jj1P/+
/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/lXw3/8Cxhv+DZhT/1cuv//39/f/+/v7///////7+
/v/+/v7//v7+/+LbyP+eh0f/6eXX/////v/+/v7//////+7r4P/Lv53/yLuX/4hsHP+PdCj/taJx
/8i7lv/JvZn/uql6/5d+OP+CZBD/vKyA//v7+f/k3sz/p5JY/9HHqP/49/T//v7+///////6+vf/
1Muv/7Sib/+jjU//oYtM/6+cZ//NwaD/9vTu//7+/v/+/v7/nIVF/+Haxf+QdSv/iGwc/7Ceaf/y
7+f//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/49/P/v7CF/4FiDv+Xfzr/ootO/+zo
3P+kj1P/gGIN/6mVW//Qxab/6uXY//f28f/49/P/7ure/9bMsf+yn2v/hWcV/5h/O//h2sb/9PLr
//39/f/+/v7//v7+/+nk1v+6qnz/l345/4BiDf98XAP/fFwD/35fCP+Sdy7/sqBt/+DYxP/+/v7/
/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9/Xw//X07v/8/Pv//v7+//7+/v/+
/v7//v7+//7+/v/+/v7//v7+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA/v7+//7+/v///////v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+///////+/v7/
/v7+//7+/v/+/v7//v7+//7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v//
/////v7+//7+/v/+/v7//v7+//7+/v///////v7+////////////////////////////////////
//////////////7+/v/+/v3//f38//z9/P/+/v3//v7+////////////////////////////////
///////////////////////////////////////+/v7/////////////////////////////////
//////////////////7///7+/v/+/v7/7+zi/6yYYf+GaBf/gGIM/5mBPf/Yz7T//v7+//7+/v//
/////////////////////////////////////////////////////////////////////v7+//7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f7+/+7r4P+JbR//fFsC/31cBP99XQX/fFsD
/3xcBf/JvZr//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/
/v7+//7+/v/+/v7//v7+///////+/v7//v7+//7+/v///////v7+//7+/v/+/v7/qJRb/3xbA/+a
gT7/6OTV//Ty6/+9roL/e1wE/4FjEf/08en//v7+//7+/v/+/v7///////7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v///////v7+//////////////////////////////////////////////7/
//v79/+BZBT/fF0H/+vn2//+/v7//v7+//3+/f+bhEP/fFsD/9DGqf/+/v7//v7+////////////
/////////////////////////////////////////////////v7+//7+/v/+/v7//v7+//7+/v/+
/v7//v7+//7+/v/+/v7/+fjz/3xeCv9+Xwz/+fjx//7+/v/+/v7//v7+/6mWX/98WwP/yb2b//7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+
//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/fz/kHcw/3tbA//Hu5f//f79//3+/f/v6+D/
hWgY/3tbBP/h28n//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+
/v7//v7+//7+/v/+/v7///////7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/Ow6L/e1wE/31d
B/+ljlL/sJ1o/4dqGf97XAL/nYZH//7+/P/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/////
//7+/v/+/v7///////7+/v/+/v7/////////////////////////////////////////////////
/v7+//39/f/AsYj/f2AK/3tbA/97XAP/e1wD/5uEQ//z8Oj//v7+////////////////////////
/////v7+/////////////////////////////////////////////v7+////////////////////
///////////////////+/////v7+//7+/v/u6+D/yr6c/8S3kP/e18H//f38//7+/v///v7/////
//////////////////////////////////////////////////////////////////7+/v/+/v7/
/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+
/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/w7OP/+ffz//7+/v/+/v7//v7+
//7+/v/+/v7//v7+//7+/v/+/v7//v79/+zo3f/8/Pv//v7+//7+/v/+/v7//v7+//7+/v/+/v7/
/v7+//7+/v/+/v7//v7+//7+/v////////////7+/v/////////////////+/v7/5eDP/35fCf+L
biL/z8Sk//r69//+/v7//v7+//7+/v/+/v7//P79/+Xfz/+ijE//e1wE/7amdv/9/v7//v7+////
//////////////////////////////////////////////7+/v/+/v7//v7+//7+/v/+/v7//v7+
//7+/v/r59r/hGYV/3tbA/98WwP/hmoZ/6eSV/+6qnv/va2C/7Ceaf+TejH/fFwF/3xbA/98XAT/
wbOL//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Pz7/8i7l/+c
hEP/o41Q/9vUvf/9/f3//f79//7+/v/u6+H/rZpj/4BgC/97XAP/fFsC/3xcA/98WwL/fFsD/3xb
A/97XAT/lnw2/9jPtf/+/v3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+
//7+/v+/sYj/e1wD/4psHf+CZRH/fl4K/+Daxv/+/v7//v7+//7+/v/+/v3/8vDn/8zBn/+xnmr/
ooxO/6CISf+plVz/wLKI/+Pezf/9/fz//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+///////+
/v7//v7+//7+/v/+/v7//v7+/4pvIv+SejP/+/r3/+zp3P99Xgn/rZtm//7+/v////////7///7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v///////v7+///////+/v7//v7+
///////////////////////+/v7/////////////////iW0f/5V8N//7/Pn/8Ozi/31fC/+YgT7/
+fj0//7+/f/+/v7//v7+///////////////////////////////////////////////////////+
/v7//f79/9fOtf+qlmD/6+fZ//7+/v////////////////////////////////+7rID/fFsE/41z
J/+GaRf/e1sD/3tcAv+Ncib/z8Wl//z7+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+
//7+/v/+/v7//v79/+fh0f+lkFP/fFwE/3xbA/+9roT//v7+//7+/v/+/v7//v7+//7+/v/+/v7/
/v7+//z8+v/Cs4v/lX03/5yEQ/+1pHL/gGIO/3xcA/97XAP/i28i/7moef/g2MP/+Pfz//7+/v/+
/v7//v7+//7+/v/8/Pv/6+bZ/8m8mP+dhUP/fF0G/3xbA/98XAP/ooxQ//Pw6f/+/v7//v7+//z8
+v/Z0bj/zcKi/+/s4v/+/v7//v7+//7+/v/9/v7//f7+//3+/v/t6d7/rJlh/35fCf98WwP/e1sD
/3xcA/9/YAr/jXEj/5d+N/+YgDr/kXct/4NlEv97XAT/fFwD/3xbA/97WwP/lHs1/9bNsv/9/fz/
/v7+//7+/v/5+PT/m4RE/3tbBP97WwP/gGIO/9fOtf/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+
/v7/7+zi/8CxiP+Wfjj/fl8I/3tbA/98WwP/e1wC/3tbA/98WwP/fFsD/3xcA/+LbiH/r5xn/97W
wP/8/fv//v7+//7+/v/+/v7//v7+/8e8mf97XAP/uKd4/9nQt/+JbSD/i3Aj//X07v/w7eT//v7+
//7+/v/+/v7//v7+//7+/v/+/v7//v7+//3+/f/19O7/4NnE/87EpP/GuJT/xLeQ/8q+nP/Z0Lb/
7erf//z8+//+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/tKNz/3lbBf/28+n//f7+/66cZ/97
XAP/jXIm/39gCv+9r4T/+fn2//3+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v39/93Vvv+McSb/e1wD
/6SPVP/CtYz/gmUS/5R6NP+Zgj7/elsD/3xbA/+Ncyn/0MWn//v7+f/9/v7//v7+//7+/v//////
///////////////////////////////////////////////////////+/v/9/v7//v7+/+fi0v+l
kFb/fF0F/3tbAv+AYAv/fFwF/3tbA/+LbyL/5eDP//r69v+7rID/f2EL/3xbA/98XAP/jHEk/7+x
h//t6d3//v7+//7+/v/+/v7//v7+//////////////////////////////////7+/v/9/v7/+Pfz
/9LIqv+giUn/fV0F/3tbA/97WwP/nYdG/+vm2f/w7OL/5N/O//v6+P/+/v7//v7+//7+/v/t6N3/
q5hg/35fCP98WwP/fFwD/3xcBP+SeC//sqBt/83Anv/g2MT/7end//Px6v/08uv/8O3j/+Xgzv/W
yq7/va2C/5+ISP+BYw7/e1sD/3tbA/98WwP/lHs0/9XMsf/9/f3//v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/+/v7/7uvg/7uqff+McCL/fFsD/3tbA/98XAP/e1wD/3tcA/98XAP/fF0E
/3xdBf98XAT/e1sD/3tbA/97WwP/e1wD/3xcAv+BYg3/qJJY/9vTu//9/fz//v7+//7+/v/+/v7/
/v7+//7+/v///////v7+///////////////////////+/v7//v79//z9/P/k3s3/wrOK/6WPU/+N
cib/fl4I/3xcA/97WwP/e1wC/3tcAv98XAP/hmkY/5qCP/+2pHT/1syy//f28f/+/v7/////////
/////////////////////////////////////////v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+
//7+/v/+/v7//f79//7+/f/7+/r/8u/n/+zo2v/r5tn/7uvi//j38//9/f3//v7+//7+/v/+/v7/
/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+
/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+
/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA

View File

@ -185,6 +185,7 @@ void AmsWebServer::githubSvg() {
void AmsWebServer::faviconIco() {
if(debugger->isActive(RemoteDebug::DEBUG)) debugger->printf("Serving /favicon.ico over http...\n");
notFound(); //TODO
}
@ -271,12 +272,22 @@ void AmsWebServer::sysinfoJson() {
ESP.restart();
#endif
performRestart = false;
} else {
time_t now = time(nullptr);
if(now < BUILD_EPOCH && server.hasArg(F("t"))) {
time_t clientTime = server.arg(F("t")).toInt();
if(clientTime > BUILD_EPOCH) {
timeval tv { clientTime, 0};
settimeofday(&tv, nullptr);
if(debugger->isActive(RemoteDebug::INFO)) debugger->printf("Internal clock synchronized with client\n");
}
}
}
}
void AmsWebServer::dataJson() {
if(debugger->isActive(RemoteDebug::DEBUG)) debugger->printf("Serving /data.json over http...\n");
uint64_t now = millis64();
uint64_t millis = millis64();
if(!checkSecurity(2))
return;
@ -311,11 +322,11 @@ void AmsWebServer::dataJson() {
uint8_t hanStatus;
if(meterState->getLastError() < 0) {
hanStatus = 3;
} else if((meterConfig->baud == 0 || meterState->getLastUpdateMillis() == 0) && now < 15000) {
} else if((meterConfig->baud == 0 || meterState->getLastUpdateMillis() == 0) && millis < 15000) {
hanStatus = 0;
} else if(now - meterState->getLastUpdateMillis() < 15000) {
} else if(millis - meterState->getLastUpdateMillis() < 15000) {
hanStatus = 1;
} else if(now - meterState->getLastUpdateMillis() < 30000) {
} else if(millis - meterState->getLastUpdateMillis() < 30000) {
hanStatus = 2;
} else {
hanStatus = 3;
@ -351,6 +362,8 @@ void AmsWebServer::dataJson() {
peaks += String(ea->getPeak(i).value / 100.0);
}
time_t now = time(nullptr);
snprintf_P(buf, BufferSize, DATA_JSON,
maxPwr == 0 ? meterState->isThreePhase() ? 20000 : 10000 : maxPwr,
meterConfig->productionCapacity,
@ -376,7 +389,7 @@ void AmsWebServer::dataJson() {
vcc,
rssi,
hw->getTemperature(),
(uint32_t) (now / 1000),
(uint32_t) (millis / 1000),
ESP.getFreeHeap(),
espStatus,
hanStatus,
@ -404,7 +417,7 @@ void AmsWebServer::dataJson() {
priceRegion.c_str(),
meterState->getLastError(),
eapi == NULL ? 0 : eapi->getLastError(),
(uint32_t) time(nullptr)
(uint32_t) now
);
server.sendHeader(HEADER_CACHE_CONTROL, CACHE_CONTROL_NO_CACHE);
@ -786,7 +799,8 @@ void AmsWebServer::configurationJson() {
wifiConfig.ssid,
strlen(wifiConfig.psk) > 0 ? "***" : "",
wifiConfig.power / 10.0,
wifiConfig.sleep
wifiConfig.sleep,
wifiConfig.autoreboot ? "true" : "false"
);
server.sendContent(buf);
snprintf_P(buf, BufferSize, CONF_NET_JSON,
@ -1081,6 +1095,7 @@ void AmsWebServer::handleSave() {
}
wifi.power = server.arg(F("ww")).toFloat() * 10;
wifi.sleep = server.arg(F("wz")).toInt();
wifi.autoreboot = server.hasArg(F("wa")) && server.arg(F("wa")) == F("true");
config->setWiFiConfig(wifi);
if(server.hasArg(F("nm")) && server.arg(F("nm")) == "static") {

View File

@ -1016,8 +1016,14 @@ void WiFi_connect() {
lastWifiRetry = millis();
if (WiFi.status() != WL_CONNECTED) {
WiFiConfig wifi;
if(!config.getWiFiConfig(wifi) || strlen(wifi.ssid) == 0) {
swapWifiMode();
return;
}
if(WiFi.getMode() != WIFI_OFF) {
if(wifiReconnectCount > 3) {
if(wifiReconnectCount > 3 && wifi.autoreboot) {
ESP.restart();
return;
}
@ -1056,12 +1062,6 @@ void WiFi_connect() {
}
wifiTimeout = WIFI_CONNECTION_TIMEOUT;
WiFiConfig wifi;
if(!config.getWiFiConfig(wifi) || strlen(wifi.ssid) == 0) {
swapWifiMode();
return;
}
if (Debug.isActive(RemoteDebug::INFO)) debugI("Connecting to WiFi network: %s", wifi.ssid);
wifiReconnectCount++;