From c46ac1a4b2bc295a432b73243faeb8dcc5731525 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Thu, 30 Nov 2023 15:33:28 +0900 Subject: [PATCH 01/13] adopt EmbUI 3.1 API changes --- espem/espem.cpp | 4 +- espem/interface.cpp | 202 ++++++++++++++++++------------------- espem/interface.h | 22 ++-- espem/main.cpp | 10 +- espem/main.h | 1 + resources/html/index.html | 18 ++-- resources/html/js/espem.js | 64 ++++++------ 7 files changed, 162 insertions(+), 159 deletions(-) diff --git a/espem/espem.cpp b/espem/espem.cpp index dae9ed9..2f912aa 100644 --- a/espem/espem.cpp +++ b/espem/espem.cpp @@ -225,12 +225,12 @@ void ESPEM::wsamples(AsyncWebServerRequest *request) { // publish meter data via WebSocket (a periodic Task) void ESPEM::wspublish(){ - if (!embui.ws.count() || !pz) // exit, if there are no clients connected + if (!embui.feeders.available() || !pz) // exit, if there are no clients connected return; const auto m = pz->getMetricsPZ004(); - Interface interf(&embui, &embui.ws, PUB_JSSIZE); + Interface interf(&embui.feeders, PUB_JSSIZE); interf.json_frame("rawdata"); interf.value("stale", pz->getState()->dataStale(), false); diff --git a/espem/interface.cpp b/espem/interface.cpp index 899ee1a..0a5ea56 100644 --- a/espem/interface.cpp +++ b/espem/interface.cpp @@ -12,63 +12,8 @@ extern ESPEM *espem; static const char* chart_css = "graphwide"; -/** - * Define configuration variables and controls handlers - * variables has literal names and are kept within json-configuration file on flash - * - * Control handlers are bound by literal name with a particular method. This method is invoked - * by manipulating controls - * - */ -void create_parameters(){ - LOG(println, "UI: Creating application vars"); - - /** - * регистрируем свои переменные - */ - embui.var_create(V_UI_UPDRT, DEFAULT_WS_UPD_RATE); // WebUI update rate - embui.var_create(V_SMPL_PERIOD, 1); // - embui.var_create(V_EPOOLSIZE, ESPEM_MEMPOOL); // metrics collector mem pool size, KiB - embui.var_create(V_UART, 0x1); // default UART port UART_NUM_1 - embui.var_create(V_RX, -1); // RX pin (default) - embui.var_create(V_TX, -1); // TX pin (default) - embui.var_create(V_TX, -1); // TX pin (default) - embui.var_create(V_EOFFSET, 0.0); // Energy counter offset - - - //Metrics collector run/pause - //embui.var_create(V_ECOLLECTORSTATE, 1); // Collector state - - /** - * обработчики действий - */ - // вывод WebUI секций - embui.section_handle_add(B_ESPEM, block_page_main); // generate "main" info page - embui.section_handle_add(B_ESPEMSET, block_page_espemset); // generate "ESPEM settings" page - - - /** - * регистрируем статические секции для web-интерфейса с системными настройками - */ - basicui::add_sections(); - - - // активности - embui.section_handle_add(A_SET_ESPEM, set_sampler_opts); - embui.section_handle_add(A_SET_UART, set_uart_opts); - embui.section_handle_add(A_SET_PZOPTS, set_pzopts); - - // direct controls - embui.section_handle_add(A_DIRECT_CTL, set_directctrls); // process direct update controls - - -} - - -/** - * Sync all UI params - */ -void sync_parameters(){} +// forward declarations +void ui_page_espem(Interface *interf, const JsonObject *data, const char* action); /** * Headlile section @@ -78,43 +23,38 @@ void sync_parameters(){} * переопределенный метод фреймфорка, который начинает строить корень нашего WebUI * */ -void section_main_frame(Interface *interf, JsonObject *data){ - if (!interf) return; +void ui_page_main(Interface *interf, const JsonObject *data, const char* action){ interf->json_frame_interface(); // application manifest - interf->json_section_manifest(C_DICT[lang][CD::ESPEM_H], 0, FW_VERSION_STRING); // HEADLINE for WebUI + interf->json_section_manifest(C_DICT[lang][CD::ESPEM_H], embui.macid(), ESPEM_JSAPI_VERSION, FW_VERSION_STRING); // HEADLINE for WebUI interf->json_section_end(); // json_section_manifest - block_menu(interf, data); // Строим UI блок с меню выбора других секций - interf->json_frame_flush(); // send frame + block_menu(interf); // Строим UI блок с меню выбора других секций + interf->json_frame_flush(); // send frame - if(!(WiFi.getMode() & WIFI_MODE_STA)){ // если контроллер не подключен к внешней AP, сразу открываем вкладку с настройками WiFi - LOG(println, "UI: Opening network setup section"); - basicui::block_settings_netw(interf, data); + if((WiFi.getMode() & WIFI_MODE_STA)){ // если контроллер не подключен к внешней AP, сразу открываем вкладку с настройками WiFi + ui_page_espem(interf, nullptr, action); // construct main page } else { - block_page_main(interf, data); // Строим основной блок + basicui::page_settings_netw(interf, nullptr, NULL); } - } /** * This code builds UI section with menu block on the left * */ -void block_menu(Interface *interf, JsonObject *data){ - if (!interf) return; +void block_menu(Interface *interf){ // создаем меню interf->json_section_menu(); // открываем секцию "меню" - interf->option(B_ESPEM, C_DICT[lang][CD::ESPEM_DB]); // пункт меню "ESPEM Info" + interf->option(B_ESPEM, C_DICT[lang][CD::ESPEM_DB]); // пункт меню "ESPEM Info" interf->option(B_ESPEMSET, C_DICT[lang][CD::ESPEMSet]); // пункт меню "ESPEM Setup" /** * добавляем в меню пункт - настройки, */ - basicui::opt_setup(interf, data); // пункт меню "настройки" - + basicui::menuitem_settings(interf); interf->json_section_end(); } @@ -123,39 +63,37 @@ void block_menu(Interface *interf, JsonObject *data){ * This code builds UI section with dashboard * */ -void block_page_main(Interface *interf, JsonObject *data){ - if (!interf) return; +void ui_page_espem(Interface *interf, const JsonObject *data, const char* action){ interf->json_frame_interface(); interf->json_section_main(B_ESPEM, C_DICT[lang][CD::ESPEM_H]); interf->json_section_line(); // "Live controls" - - interf->checkbox(V_EPOLLENA, (bool)espem->get_uirate(), "Live update", true); // Meter poller status - // UI update rate range slider - interf->range(V_UI_UPDRT, embui.paramVariant(V_UI_UPDRT).as(), 0, MAX_UI_UPDATE_RATE, 1, "UI update rate, sec", true); - interf->json_section_end(); // end of line + interf->checkbox(V_EPOLLENA, (bool)espem->get_uirate(), "Live update", true); // Meter poller status + // UI update rate range slider + interf->range(V_UI_UPDRT, embui.paramVariant(V_UI_UPDRT).as(), 0, MAX_UI_UPDATE_RATE, 1, "UI update rate, sec", true); + interf->json_section_end(); // end of line // Plain values display interf->json_section_line(); // "Live controls" - auto *m = espem->pz->getMetricsPZ004(); - // Widgets & left side menu - // id, type, value, label, param - interf->display("pwr", m->power/10 ); // Power - interf->display("cur", m->asFloat(pzmbus::meter_t::cur)); // Current - interf->display("enrg", m->energy/1000); // Energy + auto *m = espem->pz->getMetricsPZ004(); + // Widgets & left side menu + // id, type, value, label, param + interf->display("pwr", m->power/10 ); // Power + interf->display("cur", m->asFloat(pzmbus::meter_t::cur)); // Current + interf->display("enrg", m->energy/1000); // Energy interf->json_section_end(); // end of line - StaticJsonDocument<64> doc; - JsonObject params = doc.to(); // parameters for charts - interf->json_section_line(); - // id, type, value, label, param - interf->jscall("gaugeV", C_mkchart, C_DICT[lang][CD::Voltage], chart_css); // Voltage gauge - interf->jscall("gaugePF", C_mkchart, C_DICT[lang][CD::PowerF], chart_css); // Power Factor + // id, type, value, label, param + interf->jscall("gaugeV", C_mkchart, C_DICT[lang][CD::Voltage], chart_css); // Voltage gauge + interf->jscall("gaugePF", C_mkchart, C_DICT[lang][CD::PowerF], chart_css); // Power Factor interf->json_section_end(); // end of line - params["arg1"] = embui.paramVariant(V_SMPLCNT); // samples counter + StaticJsonDocument<64> doc; + JsonObject params = doc.to(); // parameters for charts + + params["arg1"] = embui.paramVariant(V_SMPLCNT); // samples counter interf->jscall("gsmini", C_mkchart, "Power chart", chart_css, params); // Power chart // slider for the amount of metric samples to be plotted on a chart @@ -164,17 +102,21 @@ void block_page_main(Interface *interf, JsonObject *data){ interf->json_frame_flush(); // flush frame } +// Create Additional buttons on "Settings" page +void user_settings_frame(Interface *interf, const JsonObject *data, const char* action){ + interf->button(button_t::generic, B_ESPEMSET, "ESPEM"); +} + /** * ESPEM options setup * */ -void block_page_espemset(Interface *interf, JsonObject *data){ +void block_page_espemset(Interface *interf, const JsonObject *data, const char* action){ if (!interf) return; interf->json_frame_interface(); // replacing page with a new one with settings - //interf->json_section_main(A_SET_ESPEM, C_DICT[lang][CD::ESPEMSet]); - interf->json_section_main("", C_DICT[lang][CD::ESPEMSet]); + interf->json_section_main(B_ESPEMSET, C_DICT[lang][CD::ESPEMSet]); // Poller Line block /* @@ -187,7 +129,6 @@ void block_page_espemset(Interface *interf, JsonObject *data){ */ interf->json_section_begin(A_SET_UART); - interf->json_section_line(); interf->number_constrained(V_UART, embui.paramVariant(V_UART).as(), "Uart port", 1, 0, SOC_UART_NUM); interf->number_constrained(V_RX, embui.paramVariant(V_RX).as(), "RX pin (-1 default)", 1, -1, NUM_OUPUT_PINS); @@ -240,10 +181,10 @@ void block_page_espemset(Interface *interf, JsonObject *data){ /** * обработчик статуса (периодического опроса контроллера веб-приложением) - */ -void pubCallback(Interface *interf){ +void pubCallback(Interface *interf, const JsonObject *data, const char* action){ basicui::embuistatus(interf); } + */ // Callback ACTIONS @@ -251,7 +192,7 @@ void pubCallback(Interface *interf){ /** * Apply espem options values */ -void set_sampler_opts(Interface *interf, JsonObject *data){ +void set_sampler_opts(Interface *interf, const JsonObject *data, const char* action){ if (!data) return; SETPARAM(V_EPOOLSIZE); @@ -259,7 +200,7 @@ void set_sampler_opts(Interface *interf, JsonObject *data){ espem->tsSet((*data)[V_EPOOLSIZE].as(), (*data)[V_SMPL_PERIOD].as()); // display main page - if (interf) block_page_main(interf, nullptr); + if (interf) ui_page_espem(interf, nullptr, NULL); } @@ -267,7 +208,7 @@ void set_sampler_opts(Interface *interf, JsonObject *data){ * обработка "живых" переключателей * */ -void set_directctrls(Interface *interf, JsonObject *data){ +void set_directctrls(Interface *interf, const JsonObject *data, const char* action){ if (!data) return; for (JsonPair kv : (*data)) { @@ -328,7 +269,7 @@ void set_directctrls(Interface *interf, JsonObject *data){ /** * Apply uart options values */ -void set_uart_opts(Interface *interf, JsonObject *data){ +void set_uart_opts(Interface *interf, const JsonObject *data, const char* action){ if (!data) return; uint8_t p = (*data)[V_UART].as(); @@ -348,7 +289,7 @@ void set_uart_opts(Interface *interf, JsonObject *data){ espem->begin(embui.paramVariant(V_UART), embui.paramVariant(V_RX), embui.paramVariant(V_TX)); // display main page - if (interf) block_page_main(interf, nullptr); + if (interf) ui_page_espem(interf, nullptr, NULL); } /** @@ -357,12 +298,63 @@ void set_uart_opts(Interface *interf, JsonObject *data){ * @param interf * @param data */ -void set_pzopts(Interface *interf, JsonObject *data){ +void set_pzopts(Interface *interf, const JsonObject *data, const char* action){ if (!data) return; SETPARAM(V_EOFFSET); espem->setEnergyOffset(embui.paramVariant(V_EOFFSET)); // display main page - if (interf) block_page_main(interf, nullptr); + if (interf) ui_page_espem(interf, nullptr, NULL); +} + + +/** + * Define configuration variables and controls handlers + * variables has literal names and are kept within json-configuration file on flash + * + * Control handlers are bound by literal name with a particular method. This method is invoked + * by manipulating controls + * + */ +void embui_actions_register(){ + LOG(println, "UI: Creating application vars"); + + /** + * регистрируем свои переменные + */ + embui.var_create(V_UI_UPDRT, DEFAULT_WS_UPD_RATE); // WebUI update rate + embui.var_create(V_SMPL_PERIOD, 1); // + embui.var_create(V_EPOOLSIZE, ESPEM_MEMPOOL); // metrics collector mem pool size, KiB + embui.var_create(V_UART, 0x1); // default UART port UART_NUM_1 + embui.var_create(V_RX, -1); // RX pin (default) + embui.var_create(V_TX, -1); // TX pin (default) + embui.var_create(V_TX, -1); // TX pin (default) + embui.var_create(V_EOFFSET, 0.0); // Energy counter offset + + + //Metrics collector run/pause + //embui.var_create(V_ECOLLECTORSTATE, 1); // Collector state + + /** + * обработчики действий + */ + + // UI page callback handlers + embui.action.set_mainpage_cb(ui_page_main); // index page callback + embui.action.set_settings_cb(user_settings_frame); // "settings" page options callback + //embui.action.set_publish_cb(pubCallback); // Publish callback + + // вывод WebUI секций + embui.action.add(B_ESPEM, ui_page_espem); // generate "main" info page + embui.action.add(B_ESPEMSET, block_page_espemset); // generate "ESPEM settings" page + + + // активности + embui.action.add(A_SET_ESPEM, set_sampler_opts); // set options for espem + embui.action.add(A_SET_UART, set_uart_opts); // set UART gpios + embui.action.add(A_SET_PZOPTS, set_pzopts); // set options for PZEM + + // direct controls + embui.action.add(A_DIRECT_CTL, set_directctrls); // process direct update controls } diff --git a/espem/interface.h b/espem/interface.h index 15ea38d..1a469bc 100644 --- a/espem/interface.h +++ b/espem/interface.h @@ -1,19 +1,19 @@ #pragma once -// Interface blocks -void block_menu(Interface *interf, JsonObject *data); -void block_page_main(Interface *interf, JsonObject *data); -void block_page_espemset(Interface *interf, JsonObject *data); +// register config params and action callbacks +void embui_actions_register(); -//void remote_action(RA action, ...); -//void uploadProgress(size_t len, size_t total); +// Interface blocks +void block_menu(Interface *interf); +void block_page_main(Interface *interf, const JsonObject *data, const char* action); +void block_page_espemset(Interface *interf, const JsonObject *data, const char* action); // ACTIONS -void action_demopage(Interface *interf, JsonObject *data); -void set_sampler_opts(Interface *interf, JsonObject *data); -void set_directctrls(Interface *interf, JsonObject *data); -void set_uart_opts(Interface *interf, JsonObject *data); -void set_pzopts(Interface *interf, JsonObject *data); +void action_demopage(Interface *interf, const JsonObject *data, const char* action); +void set_sampler_opts(Interface *interf, const JsonObject *data, const char* action); +void set_directctrls(Interface *interf, const JsonObject *data, const char* action); +void set_uart_opts(Interface *interf, const JsonObject *data, const char* action); +void set_pzopts(Interface *interf, const JsonObject *data, const char* action); // Callbacks void pubCallback(Interface *interf); diff --git a/espem/main.cpp b/espem/main.cpp index 8ea8893..bd545cd 100644 --- a/espem/main.cpp +++ b/espem/main.cpp @@ -11,6 +11,7 @@ #include "espem.h" #include +#include "interface.h" extern "C" int clock_gettime(clockid_t unused, struct timespec *tp); @@ -34,11 +35,16 @@ void setup() { // Start framework, load config and connect WiFi embui.begin(); + embui_actions_register(); // create and run ESPEM object espem = new ESPEM(); - if (espem && espem->begin(embui.paramVariant(FPSTR(V_UART)), embui.paramVariant(FPSTR(V_RX)), embui.paramVariant(FPSTR(V_TX))) ){ + if (espem && espem->begin( embui.paramVariant(FPSTR(V_UART)), + embui.paramVariant(FPSTR(V_RX)), + embui.paramVariant(FPSTR(V_TX))) + ) + { if ( espem->tsSet( embui.paramVariant(FPSTR(V_EPOOLSIZE)), embui.paramVariant(FPSTR(V_SMPL_PERIOD)) ) ){ espem->set_collector_state(mcstate_t::MC_RUN); } @@ -50,8 +56,6 @@ void setup() { }); - //sync_parameters(); // sync UI params - embui.setPubInterval(WEBUI_PUBLISH_INTERVAL); } diff --git a/espem/main.h b/espem/main.h index 4d0cbed..0a8872b 100644 --- a/espem/main.h +++ b/espem/main.h @@ -20,6 +20,7 @@ /* make version as string*/ #define FW_VERSION_STRING TOSTRING(FW_VERSION_MAJOR) "." TOSTRING(FW_VERSION_MINOR) "." TOSTRING(FW_VERSION_REVISION) +#define ESPEM_JSAPI_VERSION 1 #define BAUD_RATE 115200 // serial debug port baud rate diff --git a/resources/html/index.html b/resources/html/index.html index d7d8310..262f648 100644 --- a/resources/html/index.html +++ b/resources/html/index.html @@ -19,6 +19,9 @@ +
@@ -48,6 +51,7 @@
Time:{{value.pTime}}
Memory:{{value.pMem}}
Uptime:{{value.pUptime}}
+
RSSI 📶:{{value.pRSSI}}
ChipID:{{macid}}
EmbUI ver:{{uiver}}
FirmWare ver:{{appver}}
@@ -100,13 +104,12 @@ {{/if}} {{#if type == "checkbox"}}
- +
{{/if}} {{#if html == "const"}} -
{{label}}
- {{#if2 value}}{{/if2}} +
{{label}}{{#if2 value}}{{/if2}}
{{/if}} {{#if html == "comment"}}
{{label}}
@@ -162,14 +165,14 @@ {{#if2 (step || step === 0)}}step="{{step}}"{{/if2}} {{#if2 placeholder}}placeholder="{{placeholder}}"{{/if2}} {{#if2 type == "color"}}style="height: 50px"{{/if2}} - {{#if2 directly}}{{onevent "change", "on_change", id}}{{/if2}} + {{#if2 onChange}}{{onevent "change", "on_change", id}}{{/if2}} {{onevent "input", "on_input", id}} > {{/if}} {{#if html == "select"}} {{label}} + {{/if}} + - {{#if2 label}}{{label}}{{/if2}} -
+ {{#if2 label}}{{label}}{{/if2}} +
{{/if}} {{#if html == "div" && type == "html"}} - {{#if2 label}}{{label}}{{/if2}} -
{{value}}
+ {{#if2 label}}{{label}}{{/if2}} +
{{value}}
{{/if}} {{#if html == "div" && type == "pbar"}} diff --git a/resources/html/js/espem.js b/resources/html/js/espem.js index e7e7ee2..606e895 100644 --- a/resources/html/js/espem.js +++ b/resources/html/js/espem.js @@ -73,6 +73,8 @@ unknown_pkg_callback = function (obj) { // overwrite with new vals obj.block = vals; + + if (Gsminichart == null) return; // Power metrics graph if (Gsminichart.dataProvider.length > samples_len) Gsminichart.dataProvider.shift(); Gsminichart.dataProvider.push( { "t": Math.floor(Date.now()), "U": U, "I": I, "P": P, "W": W, "pF": Pf } ); @@ -86,17 +88,15 @@ unknown_pkg_callback = function (obj) { var GVchart = null; var GPFchart = null; var Gsminichart = null; +var minichart_tier = 1; // chart tier level - -function mkchart(id, param){ - var element = document.getElementById(id); - +function mkgauge(id, param){ + let element = document.getElementById(id); if (!element){ console.log('Element with id', id, ' not found!'); return } - console.log('Building chart id:', id); - + console.log('Building gauge id:', id); switch (id) { case "gaugeV" : GVchart = AmCharts.makeChart(element, { "type": "gauge", @@ -159,7 +159,7 @@ function mkchart(id, param){ ], "allLabels": [], "balloon": {}, "titles": [] }); - console.log('Created chart ', element); + console.log('Created chart ', id); break; case "gaugePF" : @@ -225,94 +225,110 @@ function mkchart(id, param){ "balloon": {}, "titles": [] }); - console.log('Created chart ', element); + console.log('Created chart ', id); break; + default : + } +} - case "gsmini" : Gsminichart = AmCharts.makeChart(element, { - "type": "serial", - "categoryField": "t", - "sequencedAnimation": false, - "backgroundColor": "#000000", - "borderColor": "#111111", - "theme": "black", - "creditsPosition": "top-right", - "dataLoader": { - "url" : "/samples.json?scntr=" + param, - "showErrors": false, - "load": function( options, Gsminichart ) { - var pwrGraph = new AmCharts.AmGraph(); - pwrGraph.valueField = "P"; - pwrGraph.type = "step"; - pwrGraph.title = "Power"; - pwrGraph.lineColor = "#FF0000"; - pwrGraph.lineThickness = 2; - Gsminichart.addGraph( pwrGraph ); +function mkchart(obj){ + let id = obj.block[0].id; + let scnt = obj.block[0].scnt; + let element = document.getElementById(id); + + if (obj.block[0].tier) minichart_tier = obj.block[0].tier; - var pfGraph = new AmCharts.AmGraph(); - pfGraph.valueField = "pF"; - pfGraph.type = "smoothedLine"; - pfGraph.valueAxis = "vaPF"; - pfGraph.type = "step"; - pfGraph.title = "Power"; - pfGraph.lineColor = "#12DE12"; - pfGraph.lineThickness = 2; - Gsminichart.addGraph( pfGraph ); - }, - }, - "categoryAxis": { - "gridPosition": "start", - "minPeriod": "ss", - "parseDates": true}, -/* - "graphs": [ - { - "id": "gPWR", - "lineColor": "#FF0000", - "lineThickness": 2, - "title": "Power", - "type": "step", - "valueAxis": "vaP", - "valueField": "P" - }, - { - "id": "gPF", - "lineColor": "#23EF23", - "lineThickness": 2, - "title": "Power Factor}", - "type": "smoothedLine", - "valueAxis": "vaPF", - "valueField": "pF" - } - ], -*/ - "valueAxes": [ - { - "id": "vaP", - "unit": "W", - "position": "right", - "axisColor": "#FF0000", - "axisThickness": 2, - "color": "#FF0000", - "dashLength": 0 - }, - { - "id": "vaPF", - "maximum": 1, - "minimum": 0, - "position": "left", - "strictMinMax": true, - "color": "#23EF23" - } - ], - "legend": { - "enabled": false - }, - "export": { - "enabled": false - } }); - console.log("created gsmini"); // this will output an array - default : + if (!element){ + console.log('Element id:', id, ' not found!'); + return } + console.log('Building chart id:', id); + + Gsminichart = AmCharts.makeChart(element, + { + "type": "serial", + "categoryField": "t", + "sequencedAnimation": false, + "backgroundColor": "#000000", + "borderColor": "#111111", + "theme": "black", + "creditsPosition": "top-right", + "dataLoader": { + "url" : "/samples.json?tsid=" + minichart_tier + "&scnt=" + scnt, + "showErrors": false, + "load": function( options, Gsminichart ) { + var pwrGraph = new AmCharts.AmGraph(); + pwrGraph.valueField = "P"; + pwrGraph.type = "step"; + pwrGraph.title = "Power"; + pwrGraph.lineColor = "#FF0000"; + pwrGraph.lineThickness = 2; + Gsminichart.addGraph( pwrGraph ); + + var pfGraph = new AmCharts.AmGraph(); + pfGraph.valueField = "pF"; + pfGraph.type = "smoothedLine"; + pfGraph.valueAxis = "vaPF"; + pfGraph.type = "step"; + pfGraph.title = "Power"; + pfGraph.lineColor = "#12DE12"; + pfGraph.lineThickness = 2; + Gsminichart.addGraph( pfGraph ); + }, + }, + "categoryAxis": { + "gridPosition": "start", + "minPeriod": "ss", + "parseDates": true}, +/* + "graphs": [ + { + "id": "gPWR", + "lineColor": "#FF0000", + "lineThickness": 2, + "title": "Power", + "type": "step", + "valueAxis": "vaP", + "valueField": "P" + }, + { + "id": "gPF", + "lineColor": "#23EF23", + "lineThickness": 2, + "title": "Power Factor}", + "type": "smoothedLine", + "valueAxis": "vaPF", + "valueField": "pF" + } + ], +*/ + "valueAxes": [ + { + "id": "vaP", + "unit": "W", + "position": "right", + "axisColor": "#FF0000", + "axisThickness": 2, + "color": "#FF0000", + "dashLength": 0 + }, + { + "id": "vaPF", + "maximum": 1, + "minimum": 0, + "position": "left", + "strictMinMax": true, + "color": "#23EF23" + } + ], + "legend": { + "enabled": false + }, + "export": { + "enabled": false + } } + ); + console.log("created gsmini", element); } From 7d839eb6755b41d31247ca7a84a7312b1a4e3d07 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Wed, 6 Dec 2023 15:58:22 +0900 Subject: [PATCH 08/13] update web resources --- data/index.html.gz | Bin 2536 -> 2833 bytes data/js/embui.js.gz | Bin 10730 -> 12002 bytes data/js/espem.js.gz | Bin 2630 -> 2812 bytes data/js/espem.ui.json.gz | Bin 0 -> 822 bytes data/js/lodash.custom.js.gz | Bin 0 -> 4830 bytes data/js/tz.json.gz | Bin 5432 -> 5453 bytes data/js/ui_sys.json.gz | Bin 0 -> 1846 bytes resources/html/js/espem.ui.json | 234 ++++++++++++++++++++++++++++++++ resources/respack.sh | 3 +- 9 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 data/js/espem.ui.json.gz create mode 100644 data/js/lodash.custom.js.gz create mode 100644 data/js/ui_sys.json.gz create mode 100644 resources/html/js/espem.ui.json diff --git a/data/index.html.gz b/data/index.html.gz index c5c5ddf905fee70a21b6c88ee51478b5f8c63799..31304b1a75041b3bd0280a839a04a4065fa190e0 100644 GIT binary patch literal 2833 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 literal 2536 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 diff --git a/data/js/embui.js.gz b/data/js/embui.js.gz index 623f75c58d2164e8177ebd063aa51951284b6998..5075287b72e0cfe2418bffd4336554a8294f94e5 100644 GIT binary patch literal 12002 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

{F!=g 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 diff --git a/data/js/espem.js.gz b/data/js/espem.js.gz index 4d5cb0b064b189b6b1674fa3c8dc5ed51de56b67..d995a171cf7399376994745c49ed584e18cb10d3 100644 GIT binary patch literal 2812 zcmV(=Rewelq^%SB-`m-F#(Bf z^1Vm$ef^MBt3~`v#<^oLa!I*E`z|9BM-0i~8{_b}8j^kEhyX?C_+Etu!TS#(4IHvZ z+PjrXt3@nk)3GZ^NJoLoLShan7sO>=1;ou--@|WUd8+FX6Q>hmQ9+66j~s76Z0?VU z7&3A=>Yp5uA@wYmS!BpKtBk!1&!2ejgNwm?le%u7nin9;9($&MIgy&*|4=746#|dT z1jwQz1_aRD?7O~su`9bAo75g8ZS{yAAJg|j-(^kLAJnSHEDY&@!3;v;`OzFD!-Hyl zH(}vSjJX&6zLo!5t&|vp`zACS zoYYW-sB3)}J|65vGMb>wffz#5LKSoSG6V?jNY0YFe#uR;G(FZF_ZJLoG@_dH8`p@U?R*gSPb;b5_P2IMJf!&;jnh2 zIhNMd%rVy*M3d6BF415p_+1@}kz4Jea&GI(LEae|N

  • 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 diff --git a/data/js/espem.ui.json.gz b/data/js/espem.ui.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..ecc3701f9ece5bd9e4586c5524e0b933b29c8f7e GIT binary patch literal 822 zcmV-61Ihd!iwFqE)oo=017&k?Wo<5XX)bDWZ*BnPSzAxrFcg08udwn25^PPf@vt|< z(8L3y;-XEPrpk3sgSYr1+d))_|Gtx?DQR;l^hObHjeYF%`8!v;4;?~0H`d^NAs&|w z%!o4Z4$|Q}FqSKcGk*3x1j|e+cWU+NIk`C_YVa4Bv$?nh=eUe4N<82k1G?MZIa2wbO3Rt=c?mABrqKt#ESjH!QYbsGF3XS z7*+KXYTR_cS&cWxm)GQ5@9bhuYbJHeheMdx-JpLSLxlju(2q1%Gb(a0TtbbK7DaW+ zGI2gEbXC;kCvqar4X=|1kvkeEP`E&4w(uO8hyj@T9iGTV97L-oFoNErR9HJ_9q1H9 zW$y9dB}|z6m3cT^0}+=$iRO~*9s0y6GUS#HV%TqBCG++MtvO|%jyB1e+YQdHUzxMH zkw2XlMk|4zGg+H^X1E+A&S8G2%ukr|tGS|}=UD4_>~)$TKfx_QZOf6;L~1m`Uk!<} z_X{)gg-(~)HD}3!46Csc8L#=wrxHvwCQK!1-6Cp&W(mtc%~_w})oZuh+!e z?h6p@MV+AsEW&gSLYXnv*^h_bn(O6^CD0-57P@3Kxm>`*0V-{;2iTN8OD*)re=@&|dK( zJ$c(L9@1^~A$<|jT9l=iiF-cx`h$e1><@s*&=U3ncaAyzdh9&@2ldrPXIU5k06G|r ADF6Tf literal 0 HcmV?d00001 diff --git a/data/js/lodash.custom.js.gz b/data/js/lodash.custom.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..342fda6e626926575c727e49e13a7e20f6cd2e49 GIT binary patch literal 4830 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 literal 0 HcmV?d00001 diff --git a/data/js/tz.json.gz b/data/js/tz.json.gz index 1b2ae4d434a9a60767bdba5cc92be0906a57ead1..b66da3636ebaca03ce40676c2405c56e50f062d0 100644 GIT binary patch literal 5453 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 D>2GQI literal 5432 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 literal 0 HcmV?d00001 diff --git a/resources/html/js/espem.ui.json b/resources/html/js/espem.ui.json new file mode 100644 index 0000000..f220993 --- /dev/null +++ b/resources/html/js/espem.ui.json @@ -0,0 +1,234 @@ +{ + "type": "interface", + "version": 1, + "descr": "EspEM UI objects", + "settings": { + "cfg": { + "section": "ui_page_empem_setup", + "label": "ESPEM Setup", + "main": true, + "block": [ + { + "section": "set_uart", + "label": "UART GPIO Setup", + "hidden": true, + "block": [ + { + "section": "uart_gpio", + "line": true, + "block": [ + { + "id": "uart", + "html": "input", + "value": 1, + "type": "number", + "label": "Uart port", + "max": 3, + "step": 1 + }, + { + "id": "rx", + "html": "input", + "value": -1, + "type": "number", + "label": "RX pin (-1 to disable)", + "min": -1, + "max": 46, + "step": 1 + }, + { + "id": "tx", + "html": "input", + "value": -1, + "type": "number", + "label": "TX pin (-1 to disable)", + "min": -1, + "max": 46, + "step": 1 + } + ] + }, + { + "id": "set_uart", + "html": "button", + "type": 1, + "label": "Apply" + } + ] + }, + { + "section": "set_nrgoffset", + "label": "PZEM Options", + "hidden": true, + "block": [ + { + "html": "spacer", + "label": "Energy counter options" + }, + { + "id": "eoffset", + "html": "input", + "value": 0, + "type": "number", + "label": "Energy counter offset (Wh)" + }, + { + "id": "set_nrgoffset", + "html": "button", + "type": 1, + "label": "Apply" + } + ] + }, + { + "section": "set_mcollector", + "label": "Time Series Collector", + "hidden": true, + "block": [ + { + "html": "spacer", + "label": "Pool capacity setup" + }, + { + "id": "dctl_collector", + "html": "select", + "label": "Metrics collector state", + "onChange": true, + "section": "options", + "block": [ + { "value": 0, "label": "Disabled" }, + { "value": 1, "label": "Running" }, + { "value": 2, "label": "Paused" } + ] + }, + { + "section": "t1cmt", + "line": true, + "block": [ + { + "html": "comment", + "label": "Tier 1 series" + }, + { + "id": "t1mem", + "html": "const", + "label": "Memory: -/-" + } + ] + }, + { + "section": "t1opts", + "line": true, + "block": [ + { + "id": "t1cnt", + "html": "input", + "type": "number", + "label": "Num of samples", + "min": 100, + "step": 100 + }, + { + "id": "t1int", + "html": "input", + "value": 1, + "type": "number", + "label": "interval (sec.)", + "min": 1, + "step": 1 + } + ] + }, + { + "section": "t2cmt", + "line": true, + "block": [ + { + "html": "comment", + "label": "Tier 2 series" + }, + { + "id": "t2mem", + "html": "const", + "label": "Memory: -/-" + } + ] + }, + { + "section": "t2opts", + "line": true, + "block": [ + { + "id": "t2cnt", + "html": "input", + "type": "number", + "label": "Num of samples", + "min": 100, + "step": 100 + }, + { + "id": "t2int", + "html": "input", + "type": "number", + "label": "interval (sec.)", + "min": 5, + "step": 5 + } + ] + }, + { + "section": "t3cmt", + "line": true, + "block": [ + { + "html": "comment", + "label": "Tier 3 series" + }, + { + "id": "t3mem", + "html": "const", + "label": "Memory: -/-" + } + ] + }, + { + "section": "t3opts", + "line": true, + "block": [ + { + "id": "t3cnt", + "html": "input", + "type": "number", + "label": "Num of samples", + "min": 100, + "step": 100 + }, + { + "id": "t3int", + "html": "input", + "type": "number", + "label": "interval (sec.)", + "min": 60, + "step": 60 + } + ] + }, + { + "id": "set_mcollector", + "html": "button", + "type": 1, + "label": "Apply" + } + ] + }, + { + "id": "ui_page_espem_setup", + "html": "button", + "type": 1, + "label": "Exit", + "color": "gray" + } + ] + } + } +} \ No newline at end of file diff --git a/resources/respack.sh b/resources/respack.sh index 80c354c..d6677c8 100755 --- a/resources/respack.sh +++ b/resources/respack.sh @@ -4,7 +4,7 @@ USAGE="Usage: `basename $0` [-h] [-t embuitag] [-f]" # embui branch/tag name to fetch embuirepo='https://github.com/vortigont/EmbUI' -embuitag="v2.8.1" +embuitag="v3.1" ##### # no changes below this point! @@ -155,6 +155,7 @@ mv -f newetags.txt $tags ## update local js/css if newer updlocalgz 'js/espem.js' +updlocalgz 'js/espem.ui.json' updlocalgz 'css/espem.css' updlocalgz 'manifest.json' From 84980b0895b1c9f924d1fa5f46d1e29a946472e1 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Thu, 7 Dec 2023 00:53:22 +0900 Subject: [PATCH 09/13] update readme --- README.md | 98 ++++++++++++++++++++++++++++++++++-------- examples/mqtt.png | Bin 0 -> 74656 bytes examples/ts_setup.png | Bin 0 -> 87302 bytes 3 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 examples/mqtt.png create mode 100644 examples/ts_setup.png diff --git a/README.md b/README.md index fc9c02d..5f599c9 100644 --- a/README.md +++ b/README.md @@ -8,37 +8,97 @@ for [Peacefair](https://peacefair.aliexpress.com/store/1773456/) PZEM-004Tv30 Po ## Features - WebUI via self-hosted HTTP/WebSocket server - Real-time gauges and power charts -- metrics collector in controller's memory pool +- MQTT publishing metrics data in json format +- 3 level Tiered TimeSeries metrics collector in controller's memory pool - data/metrics export via json - compressed OTA updating via [esp32-flashz](https://github.com/vortigont/esp32-flashz) lib - espem could be build to run via DummyPZEM emulator for prototyping and firmware testing without connecting to a real PZEM device +## ESPEM WebUI Dashboard -## Legacy v2.x version -An older ESPEM version 2 was based on 3rd party lib. It's code still available under [2.x branch](https://github.com/vortigont/espem/tree/v2). -ESPEM Ver 3 switched to it's own library [pzem-edl](https://github.com/vortigont/pzem-edl). I wrote this lib to overcome limitations of the classic [olehs](https://github.com/olehs/PZEM004T)'s and [mandulaj](https://github.com/mandulaj/PZEM-004T-v30)'s libs. Being versatile those libs provided only basic functions talking to PZEM's using Arduino's blocking IO via serial port. New lib uses event-driven approach and provides extendable design API for multiple PZEM communication over single port. +espem ui -### Feature comparison -| |[Version 2.x](https://github.com/vortigont/espem/tree/v2) |Version 3.0| -|----------------|--------------|---------------| -|ESP8266 |YES |NO | -|ESP32 |YES |YES | -|PZEM004v30 |YES |YES | -|old PZEMv30 |YES |NO (planned) | -|PZEM017 (DC version) |NO|NO (planned)| -|3 phase option |NO|YES (in progress)| -|Time Series Charts |YES (Basic)|YES (extendable)| -|TS in PSRAM |NO|YES| +## MQTT +MQTT server publishing and connection could be configured via "Settings" - "MQTT". +It will publish pzem metrics to topic `~/pub/pzem/jmetrics` on each update cycle. Where `~` is topic prefix, default is `EmbUI/[DeviceID]/`. +Message structure is a dictionary with PZEM metrics in an integer format in a way PZEM sends it via MODBUS. +`[{"stale":false,"age":999,"U":2180,"I":503,"P":778,"W":560,"Pf":71,"freq":505}]` +I.e.
    +`U` - denoted voltage in decivolts
    +`I` - current im mA
    +`P` - power in deciwatts
    +`W` - energy in Wh
    +`Pg` - power factor in percents
    +`freq` - is frequency in dHz
    +`stale` - denotes if data is stale, i.e. has not been updated recently
    +`age` - data age in ms
    -### ESPEM WebUI Dashboard +espem mqtt -espem ui +## Tiered TimeSeries data Sampling +Controller will keep a history of previous data received from PZEM in it's memory in a tiered memory pool. It is commonly used for time series data where the longer the data age then less frequent is sampling rate of the data to keep. All data resides in volatale `memory`, so it will be lost on power cycle or reset. +By defaul there are 3 levels of TimeSeries in a pool + + + +| Level | Samples count | Sampling interval | Time range | +| ----- | ------------- | ----------------- | ------------------- | +| L1 | 900 | 1 sec | 15 min | +| L2 | 1000 | 15 sec | 250 min (abt 4 hrs) | +| L3 | 1000 | 300 sec | ~83 hrs | + +Number of samples and interval could be adjusted per each level via "Espem setup" - "TimeSeries collector" configuration. + +#### ESPEM TS Options + +espem ts opts + + + +#### Averaging +For levels with sampling interval more that 1 second an averaging function is used to calculate mean value between intervals. I.e. if sampling interval is set to 60 sec and you power level was about 5 watt for 55 seconds and became 100 watts for the last 5 sec when sampling was taken, then resulting power value would be slightly over 5 watts, but not 100 W. + +#### Memory consumption +1000 samples takes about 25 KiB of RAM memory (one sample takes 28 bytes), so plan you pool accordingly. If your board has SPI-RAM then you can have a huge pool worth monthes of data to be kept :) + +#### Data export +TimeSeries Data could be exported in json format per each tier level + +Tier 1 URL - [http://espem/samples.json?tsid=1](http://espem/samples.json?tsid=1)
    +Tier 2 URL - [http://espem/samples.json?tsid=2](http://espem/samples.json?tsid=2)
    +Tier 3 URL - [http://espem/samples.json?tsid=3](http://espem/samples.json?tsid=3)
    + +An example of exported data: +``` +[ + {"t":1701876803000,"U":216.60,"I":0.51,"P":88,"W":7,"hz":49.7,"pF":0.79}, + {"t":1701877103000,"U":225.00,"I":0.52,"P":90,"W":14,"hz":50.1,"pF":0.77} +] +``` +where:
    +`t` - is a unix timestamp in milliseconds (prefered for js processing) +other keys are PZEM metrics in float format + + +## Legacy v2.x version +An older ESPEM version 2 was based on 3rd party lib. It's code still available under [2.x branch](https://github.com/vortigont/espem/tree/v2). +ESPEM Ver 3 switched to it's own library [pzem-edl](https://github.com/vortigont/pzem-edl). I wrote this lib to overcome limitations of the classic [olehs](https://github.com/olehs/PZEM004T)'s and [mandulaj](https://github.com/mandulaj/PZEM-004T-v30)'s libs. Being versatile those libs provided only basic functions talking to PZEM's using Arduino's blocking IO via serial port. New lib uses event-driven approach and provides extendable design API for multiple PZEM communication over single port. + +### Feature comparison +| | [Version 2.x](https://github.com/vortigont/espem/tree/v2) | Version 3.0 | +| -------------------- | --------------------------------------------------------- | ----------------- | +| ESP8266 | YES | NO | +| ESP32 | YES | YES | +| PZEM004v30 | YES | YES | +| old PZEMv30 | YES | NO | +| PZEM017 (DC version) | NO | NO (planned) | +| 3 phase option | NO | YES (in progress) | +| Time Series Charts | YES (Basic) | YES (extendable) | +| TS in PSRAM | NO | YES | -### ESPEM WebUI Options -espem opts ### Additional tools Under /www there is a set of php/sql scripts that could be hosted undel LAMP to gather and calculate stats over long-term periods. Little bit outdated but still usable. diff --git a/examples/mqtt.png b/examples/mqtt.png new file mode 100644 index 0000000000000000000000000000000000000000..7cb6274789322f6015419c70faa7c0dea35946cb GIT binary patch literal 74656 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 _TgZGX9~KEV@P{66EA@K2Y5>*3GO4$ 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 literal 0 HcmV?d00001 diff --git a/examples/ts_setup.png b/examples/ts_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..c07fda89be15901e58d0f1aaea62170fd4d6a8de GIT binary patch literal 87302 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 literal 0 HcmV?d00001 From a1013aa5e1f6808b1cf87995a500183af1108b9f Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Fri, 8 Dec 2023 01:03:30 +0900 Subject: [PATCH 10/13] Implement WebUI controls for TS - TimeSeries power chart could be switched via WebUI - Added Data export page to get links to download sampling data in json format --- espem/espem.cpp | 4 +- espem/interface.cpp | 107 ++++++++++++++++++++++++-------- espem/main.h | 4 +- espem/uistrings.h | 9 ++- resources/html/index.html | 4 +- resources/html/js/espem.js | 60 +++++++++++------- resources/html/js/espem.ui.json | 36 ++++++++++- 7 files changed, 165 insertions(+), 59 deletions(-) diff --git a/espem/espem.cpp b/espem/espem.cpp index e811c2b..35c48ef 100644 --- a/espem/espem.cpp +++ b/espem/espem.cpp @@ -171,8 +171,8 @@ void DataStorage::wsamples(AsyncWebServerRequest *request) { size_t cnt = 0; // cnt - return last 'cnt' samples, 0 - all samples - if (request->hasParam("scntr")){ - AsyncWebParameter* p = request->getParam("scntr"); + if (request->hasParam(C_scnt)){ + AsyncWebParameter* p = request->getParam(C_scnt); if (!p->value().isEmpty()) cnt = p->value().toInt(); } diff --git a/espem/interface.cpp b/espem/interface.cpp index 5d3cd26..27446dc 100644 --- a/espem/interface.cpp +++ b/espem/interface.cpp @@ -12,6 +12,9 @@ extern Espem *espem; static const char* chart_css = "graphwide"; +// variable that holds TS id which is currently displayed at Web UI +unsigned power_chart_id{1}; + // forward declarations void ui_page_espem(Interface *interf, const JsonObject *data, const char* action); @@ -54,7 +57,8 @@ void block_menu(Interface *interf){ // создаем меню interf->json_section_menu(); // открываем секцию "меню" interf->option(A_ui_page_espem, C_DICT[lang][CD::ESPEM_DB]); // пункт меню "ESPEM Info" - interf->option(A_ui_page_espem_setup, C_DICT[lang][CD::ESPEMSet]); // пункт меню "ESPEM Setup" + interf->option(A_ui_page_espem_setup, C_DICT[lang][CD::ESPEMSet]); // пункт меню "ESPEM Setup" + interf->option(A_ui_page_dataexport, "ESPEM DataExport"); // пункт меню "ESPEM Data Export" /** * добавляем в меню пункт - настройки, @@ -64,6 +68,43 @@ void block_menu(Interface *interf){ } +/** + * @brief create and send jscall frame thet will trigger building power-chart on WebUI + * + * @param interf + */ +void ui_frame_mkchart(Interface *interf){ + interf->json_frame_jscall(C_mkchart); + StaticJsonDocument<128> doc; + JsonObject params = doc.to(); // parameters for charts + params[P_id] = C_gsmini; + params[C_tier] = power_chart_id; + params["interval"] = espem->ds.getTS(power_chart_id)->getInterval(); + params[C_scnt] = embui.paramVariant(V_SMPLCNT).as(); // espem->ds.getTScap(power_chart_id); // samples counter + interf->jobject(params, true); + interf->json_frame_flush(); // flush frame +} + +/** + * @brief create/replace UI section with power chart controls + * + * @param interf + */ +void ui_block_chart_ctrls(Interface *interf){ + interf->json_section_line(C_lchart); // chart Live controls + interf->select(A_TS_TIER, power_chart_id, "TimeSeries Interval", true); + for (unsigned i = 0; i != espem->ds.getTScnt(); ++i){ + String lbl(espem->ds.getTS(i+1)->getInterval()); + lbl += " sec."; + interf->option(i+1, lbl); // ids are starting from 1 + } + interf->json_section_end(); // end select drop-down + + // slider for the amount of metric samples to be plotted on a chart + interf->range(A_SMPLCNT, embui.paramVariant(V_SMPLCNT).as(), 0, (int)espem->ds.getTScap(power_chart_id), 10, C_DICT[lang][CD::MScale], true); + interf->json_section_end(); // end of line +} + /** * This code builds UI section with dashboard * @@ -90,31 +131,21 @@ void ui_page_espem(Interface *interf, const JsonObject *data, const char* action interf->json_section_line(); - // id, type, value, label, param + // id, value, label, param interf->jscall("gaugeV", C_mkgauge, C_DICT[lang][CD::Voltage], chart_css); // Voltage gauge interf->jscall("gaugePF", C_mkgauge, C_DICT[lang][CD::PowerF], chart_css); // Power Factor interf->json_section_end(); // end of line interf->spacer("Power chart"); + ui_block_chart_ctrls(interf); - // div placeholder for TimeSeries Power chart + // empty div placeholder for TimeSeries Power chart interf->jscall(C_gsmini, P_EMPTY, P_EMPTY, chart_css); - // slider for the amount of metric samples to be plotted on a chart - interf->range(A_SMPLCNT, embui.paramVariant(V_SMPLCNT).as(), 0, (int)espem->ds.getTScap(1), 10, C_DICT[lang][CD::MScale], true); - interf->json_frame_flush(); // flush frame // call js function to build power chart - interf->json_frame_jscall(C_mkchart); - StaticJsonDocument<128> doc; - JsonObject params = doc.to(); // parameters for charts - params[P_id] = C_gsmini; - params["scnt"] = espem->ds.getTScap(1); // samples counter - interf->jobject(params, true); - interf->json_frame_flush(); // flush frame - - + ui_frame_mkchart(interf); } // Create Additional buttons on "Settings" page @@ -214,6 +245,16 @@ void block_page_espemset(Interface *interf, const JsonObject *data, const char* */ } +/** + * ESPEM data export page + * + */ +void ui_page_dataexport(Interface *interf, const JsonObject *data, const char* action){ + interf->json_frame_interface(); + interf->json_section_uidata(); + interf->uidata_pick("espem.ui.export"); + interf->json_frame_flush(); +} // Callback ACTIONS @@ -248,14 +289,14 @@ void set_directctrls(Interface *interf, const JsonObject *data, const char* acti // ena/disable polling if (sv.compare(V_EPOLLENA) == 0){ - espem->set_uirate( (*data)[A_EPOLLENA] ? embui.paramVariant(V_UI_UPDRT) : 0); + espem->set_uirate( (*data)[action] ? embui.paramVariant(V_UI_UPDRT) : 0); LOG(printf_P, PSTR("ESPEM: UI refresh state: %d\n"), (*data)[A_EPOLLENA].as() ); return; } // UI update rate if (sv.compare(V_UI_UPDRT) == 0){ - espem->set_uirate((*data)[A_UI_UPDRT]); + espem->set_uirate((*data)[action]); embui.var(V_UI_UPDRT, espem->get_uirate()); LOG( printf_P, PSTR("ESPEM: Set UI update rate to: %d\n"), espem->get_uirate() ); return; @@ -263,7 +304,7 @@ void set_directctrls(Interface *interf, const JsonObject *data, const char* acti // Metrics collector run/pause if (sv.compare(V_ECOLLECTORSTATE) == 0){ - uint8_t new_state = (*data)[A_ECOLLECTORSTATE]; + uint8_t new_state = (*data)[action]; // reset TS Container if empty and we need to start it //if (espem->get_collector_state() == mcstate_t::MC_DISABLE && new_state >0) // espem->ds.tsSet(embui.paramVariant(V_EPOOLSIZE), embui.paramVariant(V_SMPL_PERIOD)); @@ -274,14 +315,30 @@ void set_directctrls(Interface *interf, const JsonObject *data, const char* acti } // Metrics graph - number of samples to draw in a small power chart - if (sv.compare(V_SMPLCNT) == 0){ - embui.var(V_SMPLCNT, (*data)[A_SMPLCNT]); + if (sv.compare(C_scnt) == 0){ + embui.var(V_SMPLCNT, (*data)[action]); // send update command to AmCharts block if (interf){ - interf->json_frame("rawdata"); - interf->value("scntr", (*data)[A_SMPLCNT]); + interf->json_frame("espem"); + interf->value(C_scnt, (*data)[action]); interf->json_frame_flush(); } + return; + } + + if (sv.compare(C_tier) == 0){ + // save new TS id + power_chart_id = (*data)[action]; + if (!interf) return; + + // call js function to build power chart + ui_frame_mkchart(interf); + + // send update command to AmCharts block + interf->json_frame_interface(); + ui_block_chart_ctrls(interf); + interf->json_frame_flush(); + return; } } @@ -366,9 +423,9 @@ void embui_actions_register(){ //embui.action.set_publish_cb(pubCallback); // Publish callback // вывод WebUI секций - embui.action.add(A_ui_page_espem, ui_page_espem); // generate "main" info page - embui.action.add(A_ui_page_espem_setup, block_page_espemset); // generate "ESPEM settings" page - + embui.action.add(A_ui_page_espem, ui_page_espem); // generate "main" info page + embui.action.add(A_ui_page_espem_setup, block_page_espemset); // generate "ESPEM settings" page + embui.action.add(A_ui_page_dataexport, ui_page_dataexport); // generate "Data export" page // активности embui.action.add(A_SET_MCOLLECTOR, set_sampler_opts); // set options for TimeSeries collector diff --git a/espem/main.h b/espem/main.h index 79394f0..8c6702c 100644 --- a/espem/main.h +++ b/espem/main.h @@ -20,8 +20,8 @@ /* make version as string*/ #define FW_VERSION_STRING TOSTRING(FW_VERSION_MAJOR) "." TOSTRING(FW_VERSION_MINOR) "." TOSTRING(FW_VERSION_REVISION) -#define ESPEM_JSAPI_VERSION 1 -#define ESPEM_UI_VERSION 1 +#define ESPEM_JSAPI_VERSION 2 +#define ESPEM_UI_VERSION 2 #define BAUD_RATE 115200 // serial debug port baud rate diff --git a/espem/uistrings.h b/espem/uistrings.h index 0b84bf3..1a5ef73 100644 --- a/espem/uistrings.h +++ b/espem/uistrings.h @@ -9,6 +9,10 @@ static constexpr const char C_mkchart[] = "mkchart"; static constexpr const char C_mkgauge[] = "mkgauge"; static constexpr const char C_gsmini[] = "gsmini"; static constexpr const char C_mqtt_pzem_jmetrics[] = "pub/pzem/jmetrics"; +static constexpr const char C_scnt[] = "scnt"; // samle counter +static constexpr const char C_tier[] = "tier"; +static constexpr const char C_lchart[] = "lchart"; + ////////////////////// // Configuration variables names - V_ prefix for 'Variable' @@ -34,6 +38,7 @@ static constexpr const char V_SMPLCNT[] = "smplcnt"; // Metrics graph - // UI blocks - B_ prefix for 'web Block' static constexpr const char A_ui_page_espem[] = "ui_page_espem"; static constexpr const char A_ui_page_espem_setup[] = "ui_page_espem_setup"; +static constexpr const char A_ui_page_dataexport[] = "ui_page_dataexport"; // direct control elements static constexpr const char A_DIRECT_CTL[] = "dctl_*"; // checkboxes/controls that should be processed onChange @@ -49,6 +54,6 @@ static constexpr const char A_EPOLLENA[] = "dctl_poll"; // Enable/di static constexpr const char A_EPFFIX[] = "dctl_pffix"; // PowerFactor value correction static constexpr const char A_UI_UPDRT[] = "dctl_updaterate"; // UI update rate static constexpr const char A_ECOLLECTORSTATE[] = "dctl_collector"; // Metrics collector run/pause -static constexpr const char A_SMPLCNT[] = "dctl_smplcnt"; // Metrics graph - number of samples to draw in a small power chart - +static constexpr const char A_SMPLCNT[] = "dctl_scnt"; // Metrics graph - number of samples to draw in a small power chart +static constexpr const char A_TS_TIER[] = "dctl_tier"; // drop-down selector for power chart TS id // other constants diff --git a/resources/html/index.html b/resources/html/index.html index e9866e4..518f727 100644 --- a/resources/html/index.html +++ b/resources/html/index.html @@ -157,9 +157,9 @@
    {{/if}} {{#if html == "input" && type != "checkbox"}} - {{label}} + {{label}} {{#if2 type == "range" || type == "color"}}: {{value}}{{/if2}} - {{#if2 type == "text" || type == "password"}} ({{calc value.length || 0}}){{/if2}} + {{#if2 type == "text" || type == "password"}} ({{calc value.length || 0}}){{/if2}} Generic URI to get the data:
    http://[espem]/samples.json?tsid=X&scnt=YY
    Where X is TS id (1-3)
    YY - num of samples to receive" + }, + { + "html": "button", + "type": 3, + "label": "Download TimeSeries #1", + "color": "green", + "value": "/samples.json?tsid=1" + }, + { + "html": "button", + "type": 3, + "label": "Download TimeSeries #2", + "color": "green", + "value": "/samples.json?tsid=2" + }, + { + "html": "button", + "type": 3, + "label": "Download TimeSeries #3", + "color": "green", + "value": "/samples.json?tsid=3" + } + ] } } \ No newline at end of file From d25bfd287cbc230a3efbfea6190e75231247ce95 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Fri, 8 Dec 2023 01:14:52 +0900 Subject: [PATCH 11/13] res upd --- resources/html/js/espem.js | 61 +++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/resources/html/js/espem.js b/resources/html/js/espem.js index 78ac37a..71d3e8a 100644 --- a/resources/html/js/espem.js +++ b/resources/html/js/espem.js @@ -1,29 +1,38 @@ // override variable with ESPEM's API version -app_jsapi = 1; +app_jsapi = 2; const min_chart_refresh_interval = 15; var GVchart = null; var GPFchart = null; -var Gsminichart = null; -var minichart = {"tier": 1, "scnt": 900, "interval": 1 }; +var minichart = { + "chart": null, + "tier": 1, + "scnt": 900, + "interval": 1, + "timer": null, + "loader": function(){ + AmCharts.loadFile("/samples.json?tsid=" + minichart.tier + "&scnt=" + minichart.scnt, + {async: true}, + function(data) { minichart.chart.dataProvider = AmCharts.parseJSON(data); minichart.chart.validateData(); } + ); } + }; // raw data coming from the EmbUI handled here unknown_pkg_callback = function (obj) { let frame = obj.block; if (!obj.block){ - console.log('Message has no data block!'); + console.log('ESPEM Message has no data block!'); return; } - //console.log('Process raw data:', frame); + let U, I, Pf, P, W, vals = []; for (var i = 0; i != frame.length; i++) if (typeof frame[i] == "object") { // обновить график с новым значением шкалы if (frame[i].scnt){ - console.log('Set chart scale to:'); - minichart.scnt = frame[i].scntr; - AmCharts.loadFile("/samples.json?tsid=" + minichart.tier + "&scnt=" + minichart.scnt, {async: true}, function(data) { Gsminichart.dataProvider = AmCharts.parseJSON(data); } ); - Gsminichart.validateData(); + console.log('Set chart scale to:', frame[i].scnt); + minichart.scnt = frame[i].scnt; + minichart.loader(); return; } @@ -83,12 +92,11 @@ unknown_pkg_callback = function (obj) { // pass data to the renderer to make it available under Menu/display area rdr.value(obj); - if (Gsminichart == null || minichart.interval >= min_chart_refresh_interval) return; - console.log('periodic:', minichart.interval); + if (minichart.chart == null || minichart.interval >= min_chart_refresh_interval) return; // Power metrics graph - if (Gsminichart.dataProvider.length > minichart.scnt) Gsminichart.dataProvider.shift(); - Gsminichart.dataProvider.push( { "t": Math.floor(Date.now()), "U": U, "I": I, "P": P, "W": W, "pF": Pf } ); - Gsminichart.validateData(); + if (minichart.chart.dataProvider.length > minichart.scnt) minichart.chart.dataProvider.shift(); + minichart.chart.dataProvider.push( { "t": Math.floor(Date.now()), "U": U, "I": I, "P": P, "W": W, "pF": Pf } ); + minichart.chart.validateData(); } @@ -248,15 +256,7 @@ function mkchart(obj){ console.log('Building chart id:', id); - if (Gsminichart) { - console.log('BDestroy:', AmCharts.charts); - Gsminichart.clear(); - Gsminichart.destroy(); - Gsminichart = null; - console.log('ADestroy:', AmCharts.charts); - } - - Gsminichart = AmCharts.makeChart(element, + minichart.chart = AmCharts.makeChart(element, { "type": "serial", "categoryField": "t", @@ -268,15 +268,15 @@ function mkchart(obj){ "dataLoader": { "url" : "/samples.json?tsid=" + minichart.tier + "&scnt=" + minichart.scnt, "showErrors": false, - "reload": (minichart.interval < min_chart_refresh_interval) ? 0 : minichart.interval, - "load": function( options, Gsminichart ) { + //"reload": (minichart.interval < min_chart_refresh_interval) ? 0 : minichart.interval, + "load": function( options, chart ) { var pwrGraph = new AmCharts.AmGraph(); pwrGraph.valueField = "P"; pwrGraph.type = "step"; pwrGraph.title = "Power"; pwrGraph.lineColor = "#FF0000"; pwrGraph.lineThickness = 2; - Gsminichart.addGraph( pwrGraph ); + chart.addGraph( pwrGraph ); var pfGraph = new AmCharts.AmGraph(); pfGraph.valueField = "pF"; @@ -286,7 +286,7 @@ function mkchart(obj){ pfGraph.title = "Power"; pfGraph.lineColor = "#12DE12"; pfGraph.lineThickness = 2; - Gsminichart.addGraph( pfGraph ); + chart.addGraph( pfGraph ); }, }, "categoryAxis": { @@ -342,5 +342,10 @@ function mkchart(obj){ } } ); - console.log("created gsmini", Gsminichart); + if (minichart.interval >= min_chart_refresh_interval) { + minichart.timer = setInterval( minichart.loader, minichart.interval*1000); + } else + clearInterval(minichart.timer); + + console.log("created gsmini"); } From 92cc85aea778a57ea3d4677d9cb6edded7d84f39 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Fri, 8 Dec 2023 01:15:27 +0900 Subject: [PATCH 12/13] update web resources --- data/index.html.gz | Bin 2833 -> 2837 bytes data/js/embui.js.gz | Bin 12002 -> 12002 bytes data/js/espem.js.gz | Bin 2812 -> 2927 bytes data/js/espem.ui.json.gz | Bin 822 -> 1055 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/index.html.gz b/data/index.html.gz index 31304b1a75041b3bd0280a839a04a4065fa190e0..b0619d52f8787d5441f41573661c7dd199b94ffa 100644 GIT binary patch delta 484 zcmVU*>dba`K8JTj4v$LJs58-XWP(S*M9-0lp08pOlBJ4&3!j!v zec)vhJXbJ6rS@2mguc2rt$Zl9+FUDl!}jJJ958inxlbP4OV3*w+m9*sXtMI0Vjv0* z?ctiizAJh>2zG^rxgV%RL95pfHQhRCqj9_OiPUbpt{OuAR~>G15zB{6eFtNvYrkUE z*C>VR8gblq1TiDSDNEU{D+;^?2=mchHHX5&(rmjK#9w&C4SQ3LWYrXYk-b zNBly@v?x{4*W7tyo_-F@Q6ArM!+ zyDYI+FZCMe8O>+xGvLDUfYb0Z0OKEQi9Y`Jlg$bmDh+g)s0;hbYYz(3&6d;R_4o%* abw}MC_Vu4U4g2~p`2G+6z%ggpCjbDcZ{@lG delta 480 zcmV<60U!RA7LgVQABzYGOdD^p2Pp}EYkqyWoD*8wawo&CQMI9E>x{q3Zb`hLlQZ5Y zmBiO5n9K00RMgQ`M{<^A{z?Jl4rE^%dfIaKWC{>)GP>JVqpSXKd8wXi->>c5i%wHr zsx-W$8q#+nD0Z*_^%$um+THma-W54KDn+8sM9+~49t9IUM<#l{ib+V8DlU9~S~m58 zcSrDC!3c%fV?h%7>YB9jq1bA3t=tXMn`3Xl)HUTkd2la1Z)I#hmDrQW%43OvC^)o3 zYXhaoj?w}J%#Xp5Ji^a0v&ATE93LWYrXYk-bNBly9 zv?x{4*IaR9T7Dt=Vd7H}^gQg5dvN9&m(&en7EN-#M5M}a3oM^p2NuznEL$Q{WqMOr zb{c_CWfBff^pslGB+oo36j;q`c+xGvLB$fYb0Z0OQ|hi9Y_alhFzqD*bYpsQdZKYYz(3&6d;R_4xNqbw}MC W_Vr&l4g2~J_WlpPXt7(!CjbDy>h6F5 diff --git a/data/js/embui.js.gz b/data/js/embui.js.gz index 5075287b72e0cfe2418bffd4336554a8294f94e5..b191ed55ecea5dfb4930fc532b93c1f7ffc8839a 100644 GIT binary patch delta 16 XcmaD9`zV%OzMF&N_`AZ5?6>s*K28TG delta 16 XcmaD9`zV%OzMF$XL8@RQ`)xe{G{6O` diff --git a/data/js/espem.js.gz b/data/js/espem.js.gz index d995a171cf7399376994745c49ed584e18cb10d3..b01e328aa99e58f45d8d025f144be0ab87073f77 100644 GIT binary patch literal 2927 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
  • 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 Zp}Gas^!J_lVKQ*%$N%6T9{t!G000oi0S5p8 literal 822 zcmV-61Ihd!iwFqE)oo=017&k?Wo<5XX)bDWZ*BnPSzAxrFcg08udwn25^PPf@vt|< z(8L3y;-XEPrpk3sgSYr1+d))_|Gtx?DQR;l^hObHjeYF%`8!v;4;?~0H`d^NAs&|w z%!o4Z4$|Q}FqSKcGk*3x1j|e+cWU+NIk`C_YVa4Bv$?nh=eUe4N<82k1G?MZIa2wbO3Rt=c?mABrqKt#ESjH!QYbsGF3XS z7*+KXYTR_cS&cWxm)GQ5@9bhuYbJHeheMdx-JpLSLxlju(2q1%Gb(a0TtbbK7DaW+ zGI2gEbXC;kCvqar4X=|1kvkeEP`E&4w(uO8hyj@T9iGTV97L-oFoNErR9HJ_9q1H9 zW$y9dB}|z6m3cT^0}+=$iRO~*9s0y6GUS#HV%TqBCG++MtvO|%jyB1e+YQdHUzxMH zkw2XlMk|4zGg+H^X1E+A&S8G2%ukr|tGS|}=UD4_>~)$TKfx_QZOf6;L~1m`Uk!<} z_X{)gg-(~)HD}3!46Csc8L#=wrxHvwCQK!1-6Cp&W(mtc%~_w})oZuh+!e z?h6p@MV+AsEW&gSLYXnv*^h_bn(O6^CD0-57P@3Kxm>`*0V-{;2iTN8OD*)re=@&|dK( zJ$c(L9@1^~A$<|jT9l=iiF-cx`h$e1><@s*&=U3ncaAyzdh9&@2ldrPXIU5k06G|r ADF6Tf From 3185fdf516710cd9c05b94b9795104ce052adb23 Mon Sep 17 00:00:00 2001 From: Emil Muratov Date: Fri, 8 Dec 2023 01:24:35 +0900 Subject: [PATCH 13/13] Version update to 3.2.0 --- README.md | 4 ++-- espem/main.h | 4 ++-- platformio.ini | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5f599c9..a86573b 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ I.e.
    ## Tiered TimeSeries data Sampling Controller will keep a history of previous data received from PZEM in it's memory in a tiered memory pool. It is commonly used for time series data where the longer the data age then less frequent is sampling rate of the data to keep. All data resides in volatale `memory`, so it will be lost on power cycle or reset. -By defaul there are 3 levels of TimeSeries in a pool +By default there are 3 levels of TimeSeries in a pool @@ -53,7 +53,7 @@ Number of samples and interval could be adjusted per each level via "Espem setup #### ESPEM TS Options -espem ts opts +espem ts opts diff --git a/espem/main.h b/espem/main.h index 8c6702c..49227e0 100644 --- a/espem/main.h +++ b/espem/main.h @@ -2,7 +2,7 @@ * A code for ESP32 based boards to interface with PeaceFair PZEM PowerMeters * It can poll/collect PowerMeter data and provide it for futher processing in text/json format * - * (c) Emil Muratov 2018 - 2022 + * (c) Emil Muratov 2018 - 2023 * */ @@ -11,7 +11,7 @@ #define FW_NAME "espem" #define FW_VERSION_MAJOR 3 -#define FW_VERSION_MINOR 1 +#define FW_VERSION_MINOR 2 #define FW_VERSION_REVISION 0 /* make version as integer*/ diff --git a/platformio.ini b/platformio.ini index dc65ec5..d782dce 100644 --- a/platformio.ini +++ b/platformio.ini @@ -52,7 +52,7 @@ all_serial1 = extends = common platform = espressif32 board = wemos_d1_mini32 -upload_speed = 460800 +;upload_speed = 460800 monitor_filters = esp32_exception_decoder ;build_flags = lib_ignore =