From 4fe5c8eef86688fd4a61800f022ad26995d27cbf Mon Sep 17 00:00:00 2001 From: lumapu Date: Tue, 30 Apr 2024 00:05:43 +0200 Subject: [PATCH] 0.8.114 * fix ESP8266 compile * fix history graph * fix close button color of modal windows in dark mode #1598 * fix only one total field in `/live` #1579 --- src/CHANGES.md | 6 ++++++ src/config/settings.h | 4 ++-- src/defines.h | 2 +- src/web/html/history.html | 30 +++++++++++++++--------------- src/web/html/style.css | 1 + src/web/html/visualization.html | 15 ++++++++------- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/CHANGES.md b/src/CHANGES.md index 35fbc3cc..a023fbe5 100644 --- a/src/CHANGES.md +++ b/src/CHANGES.md @@ -1,5 +1,11 @@ # Development Changes +## 0.8.114 - 2024-04-29 +* fix ESP8266 compile +* fix history graph +* fix close button color of modal windows in dark mode #1598 +* fix only one total field in `/live` #1579 + ## 0.8.113 - 2024-04-25 * code cleanup * fix ESP32-C3 compile diff --git a/src/config/settings.h b/src/config/settings.h index 4f5ba4c0..19579359 100644 --- a/src/config/settings.h +++ b/src/config/settings.h @@ -239,9 +239,9 @@ class settings { std::fill(reinterpret_cast(&mCfg), reinterpret_cast(&mCfg) + sizeof(mCfg), 0); } - void setup(settings_t *&cfg) { + void setup(settings_t *&c) { DPRINTLN(DBG_INFO, F("Initializing FS ..")); - cfg = &mCfg; + c = &mCfg; mCfg.valid = false; #if !defined(ESP32) diff --git a/src/defines.h b/src/defines.h index 36919b21..c0e459a5 100644 --- a/src/defines.h +++ b/src/defines.h @@ -13,7 +13,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 8 -#define VERSION_PATCH 113 +#define VERSION_PATCH 114 //------------------------------------- typedef struct { uint8_t ch; diff --git a/src/web/html/history.html b/src/web/html/history.html index d21e6b96..2a13f572 100644 --- a/src/web/html/history.html +++ b/src/web/html/history.html @@ -45,12 +45,11 @@ s.x_mul = 60 s.ts_start = obj.lastValueTs - (obj.refresh * obj.value.length) s.ts_dur = obj.lastValueTs - s.ts_start - s.ts_pad = (s.ts_dur < 1800) ? s.ts_start % 300 : s.ts_start % 1800 - s.ts_dur -= s.ts_pad + s.ts_pad = (s.ts_dur < 1800) ? 0 : s.ts_start % 1800 + s.ts_dur += s.ts_pad while(s.x_mul * 10 <= s.ts_dur) s.x_mul += (s.x_mul == 60) ? 240 : ((s.x_mul < 1800) ? 300 : 1800) s.x_step = Math.ceil(s.ts_dur / s.x_mul) - s.x_max = s.x_mul * s.x_step s.y_mul = 10 while(s.y_mul * 10 <= obj.max) @@ -79,7 +78,7 @@ ...gridText(n*2, scale), mlNs("g", {transform: "translate(30, 5)"}, [ ...grid(n*2, scale), - ...poly(obj, scale) + ...poly(n*2, obj, scale) ]) ]) } @@ -90,10 +89,10 @@ for(let i = 0; i <= scale.y_max; i += scale.y_mul) { g.push(mlNs("text", {x: 0, y: height-(i*div)+9}, String(i))) } - div = x2 / scale.x_max - for(let i = 0; i < scale.x_max; i++) { - if((i + scale.ts_pad) % scale.x_mul == 0) { - let d = new Date((scale.ts_start + i) * 1000) + div = x2 / scale.ts_dur + for(let i = 0; i < scale.ts_dur; i++) { + if(i % scale.x_mul == 0) { + let d = new Date((scale.ts_start - scale.ts_pad + i) * 1000) g.push(mlNs("text", {x: (i*div)+17, y: height+20}, ("0"+d.getHours()).slice(-2) + ":" + ("0"+d.getMinutes()).slice(-2))) } } @@ -106,28 +105,29 @@ for(let i = 0; i <= scale.y_max; i += scale.y_mul) { g.push(mlNs("line", {x1: 0, x2: x2, y1: height-i*div, y2: height-i*div, "stroke-width": 1, "stroke-dasharray": "1,3", stroke: "#aaa"})) } - div = x2 / scale.x_max - for(let i = 0; i <= scale.x_max; i++) { - if((i + scale.ts_pad) % scale.x_mul == 0) { + div = x2 / scale.ts_dur + for(let i = 0; i <= scale.ts_dur; i++) { + if(i % scale.x_mul == 0) { g.push(mlNs("line", {x1: (i*div), x2: (i*div), y1: 0, y2: height, "stroke-width": 1, "stroke-dasharray": "1,3", stroke: "#aaa"})) } } return g } - function poly(obj, scale) { + function poly(x2, obj, scale) { let pts = "" let i = 0, first = -1, last = -1, lastVal = 0 let div = scale.y_max / height + let xOff = x2 / scale.ts_dur * scale.ts_pad if(div == 0) div = 1 for (val of obj.value) { if(val > 0) { lastVal = val - pts += " " + String(i) + "," + String(height - val / div) + pts += " " + String(i + xOff) + "," + String(height - val / div) if(first < 0) - first = i - last = i + first = i + xOff + last = i + xOff } i += 2 } diff --git a/src/web/html/style.css b/src/web/html/style.css index 2866dda1..2e83078f 100644 --- a/src/web/html/style.css +++ b/src/web/html/style.css @@ -758,6 +758,7 @@ div.hr { font-family: inherit; cursor: pointer; padding: 0; + color: var(--fg); } button.close { diff --git a/src/web/html/visualization.html b/src/web/html/visualization.html index cfc84e72..f0f96112 100644 --- a/src/web/html/visualization.html +++ b/src/web/html/visualization.html @@ -21,6 +21,7 @@ var mNum = 0; var total = Array(6).fill(0); var tPwrAck; + var totalsRendered = false function getErrStr(code) { if("ERR_AUTH") return "{#ERR_AUTH}" @@ -74,6 +75,7 @@ for(var i = 0; i < 6; i++) { total[i] = Math.round(total[i] * 100) / 100; } + totalsRendered = true return ml("div", {class: "row mt-3 mb-5"}, ml("div", {class: "col"}, [ @@ -240,20 +242,18 @@ ]) ); - - var last = true; for(var i = obj.id + 1; i < ivEn.length; i++) { if((i != ivEn.length) && ivEn[i]) { - last = false; getAjax("/api/inverter/id/" + i, parseIv); - break; + return } } - if(last) { - if(mNum > 1) + + if(mNum > 1) { + if(!totalsRendered) mIvHtml.unshift(totals()); - document.getElementById("live").replaceChildren(...mIvHtml); } + document.getElementById("live").replaceChildren(...mIvHtml); } function parseIvAlarm(obj) { @@ -514,6 +514,7 @@ ivEn = Object.values(Object.assign({}, obj["iv"])); mIvHtml = []; mNum = 0; + totalsRendered = false total.fill(0); for(var i = 0; i < obj.iv.length; i++) { if(obj.iv[i]) {