Compare commits

...

3 commits

Author SHA1 Message Date
5415e7df91 dashboard gauge settings wip 2025-04-07 03:10:45 +02:00
46beff09fe dashboard gauge settings wip 2025-04-07 02:13:44 +02:00
ec71d1b553 dashboard gauge settings wip 2025-04-07 01:46:31 +02:00
3 changed files with 109 additions and 17 deletions

View file

@ -9,6 +9,10 @@
#include "Page_grow_HTML.h"
/* dirty tmpParam hack again */
byte tmpParam_editGaugeId = 255;
/* subnav processor */
const byte WEB_GROW_SUBNAV_GENERAL = 1;
const byte WEB_GROW_SUBNAV_LIGHT = 2;
@ -967,18 +971,24 @@ String Proc_WebPage_grow_dashboard(const String& var) {
html += F("</td><td>");
html += config.system.sensor.name[config.grow.dashboard.gaugeSensor[i]];
html += F("</td><td>");
html += FPSTR(Sensor_Read_descr[config.grow.dashboard.gaugeRead[i]]);
html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
html += F("</td><td>");
// edit button
html += F("<form class='linkForm' action='/grow/dashboard/gaugeAdd' method='get'>");
html += F("<input type='hidden' name='edit' value='");
html += i;
html += F("'>");
html += F("<input type='submit' value='&#x270F;&#xFE0F;' title='Edit'></form> ");
// delete button
html += F("<form class='linkForm' action='/grow/dashboard/' method='post'>");
html += F("<input type='hidden' name='delete_gauge' value='");
html += i;
html += F("'>");
html += F("<input type='submit' value='&#x274C;' onclick=\"return confirmDelete('");
html += F("gauge for");
html += F("gauge for ");
html += config.system.sensor.name[config.grow.dashboard.gaugeSensor[i]];
html += F(" ");
html += FPSTR(Sensor_Read_descr[config.grow.dashboard.gaugeRead[i]]);
html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
html += F("')\" title='Delete'></form>");
html += F("</td></tr>");
}
@ -1042,7 +1052,12 @@ void WebPage_grow_dashboard(AsyncWebServerRequest *request) {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_HTML, Proc_WebPage_grow_dashboard_POST);
} else {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_HTML, Proc_WebPage_grow_dashboard);
if(request->hasParam("success")) {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_HTML, Proc_WebPage_grow_dashboard_POST);
} else {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_HTML, Proc_WebPage_grow_dashboard);
}
}
}
@ -1068,12 +1083,6 @@ String Proc_WebPage_grow_dashboard_gaugeAdd(const String& var) {
return FPSTR(Common_HTML_ACTION_ADD);
} else if(var == "GAUGE_ID") {
return String(Give_Free_Dashboard_GaugeId());
} else if(var == "SENSOR_ID") {
String html;
return html;
} else if(var == "READ_ID") {
String html;
return html;
} else if(var == "SELECT_SENSOR_READ") {
String html;
html += Html_SelectOpt_Sensor_Read();
@ -1083,6 +1092,36 @@ String Proc_WebPage_grow_dashboard_gaugeAdd(const String& var) {
}
}
String Proc_WebPage_grow_dashboard_gaugeAddEdit(const String& var) {
const static char LogLoc[] PROGMEM = "[Webserver:grow:dashboard:gaugeAdd(Proc)]";
if(TestHeaderFooter(var)) {
return AddHeaderFooter(var, 1);
} else if(Test_WebPage_grow_SUBNAV(var)) {
return Proc_WebPage_grow_SUBNAV(var, WEB_GROW_SUBNAV_DASHBOARD);
} else if(var == "ACTION") {
return FPSTR(Common_HTML_ACTION_ADD);
} else if(var == "GAUGE_ID") {
return String(tmpParam_editGaugeId);
} else if(var == "SELECT_SENSOR_READ") {
String html;
html += Html_SelectOpt_Sensor_Read(config.grow.dashboard.gaugeSensor[tmpParam_editGaugeId], config.grow.dashboard.gaugeRead[tmpParam_editGaugeId]);
return html;
} else if(var == "SENSOR_ID") {
return String(config.grow.dashboard.gaugeSensor[tmpParam_editGaugeId]);
} else if(var == "READ_ID") {
return String(config.grow.dashboard.gaugeRead[tmpParam_editGaugeId]);
} else if(var == "MIN") {
return String(config.grow.dashboard.gaugeMin[tmpParam_editGaugeId]);
} else if(var == "MAX") {
return String(config.grow.dashboard.gaugeMax[tmpParam_editGaugeId]);
} else {
return String();
}
}
String Proc_WebPage_grow_dashboard_gaugeAdd_POST(const String& var) {
/* This is the processor for POST
* Its exactly the same, just looking for SAVE_MSG string.
@ -1104,11 +1143,55 @@ void WebPage_grow_dashboard_gaugeAdd(AsyncWebServerRequest *request) {
/* Which kind of Request */
if(request->method() == HTTP_POST) {
byte gaugeId;
if(request->hasParam("gaugeId", true)) {
const AsyncWebParameter* param = request->getParam("gaugeId", true);
gaugeId = param->value().toInt();
/* set gaugeId to configured = true */
config.grow.dashboard.gaugeConfigured[gaugeId] = true;
}
if(request->hasParam("gaugeSensor", true)) {
const AsyncWebParameter* param = request->getParam("gaugeSensor", true);
config.grow.dashboard.gaugeSensor[gaugeId] = param->value().toInt();
}
if(request->hasParam("gaugeRead", true)) {
const AsyncWebParameter* param = request->getParam("gaugeRead", true);
config.grow.dashboard.gaugeRead[gaugeId] = param->value().toInt();
}
if(request->hasParam("gaugeMin", true)) {
const AsyncWebParameter* param = request->getParam("gaugeMin", true);
config.grow.dashboard.gaugeMin[gaugeId] = param->value().toInt();
}
if(request->hasParam("gaugeMax", true)) {
const AsyncWebParameter* param = request->getParam("gaugeMax", true);
config.grow.dashboard.gaugeMax[gaugeId] = param->value().toInt();
}
request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAdd_POST);
SaveConfig();
request->redirect("/grow/dashboard/?success");
//request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAdd_POST);
} else {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAdd);
/* GET REQUEST */
/* when in edit mode */
if(request->hasParam("edit")) {
const AsyncWebParameter* param = request->getParam("edit");
tmpParam_editGaugeId = param->value().toInt();
request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAddEdit);
/* if we want to add new sensor, check if a sensor id is available. if not send error */
} else if(Give_Free_SensorId() > Max_Sensors) {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML_NO_ID_AVAILABLE, Proc_WebPage_grow_dashboard_gaugeAdd);
/* Otherwise let the user create new sensor */
} else {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAdd);
}
//request->send_P(200, TEXT_HTML, Page_grow_dashboard_gaugeAdd_HTML, Proc_WebPage_grow_dashboard_gaugeAdd);
}
}

View file

@ -138,7 +138,7 @@ const char Page_grow_dashboard_gaugeAdd_HTML[] PROGMEM = R"(%HEADER%
%SUBNAV%
%SAVE_MSG%
<h3>%ACTION% Gauge Id %GAUGE_ID%</h3>
<h3>%ACTION% Gauge ID %GAUGE_ID%</h3>
<p>Select which Sensor Reading to use for the gauge<br></p>
<form method='post' action='/grow/dashboard/gaugeAdd'>
@ -155,12 +155,21 @@ const char Page_grow_dashboard_gaugeAdd_HTML[] PROGMEM = R"(%HEADER%
</select><br>
<u>Min</u><br>
<input type='number' name='min' step='1' value='%MIN%' required><br>
<input type='number' name='gaugeMin' step='1' value='%MIN%' required><br>
<u>Max</u><br>
<input type='number' name='min' step='1' value='%MAX%' required><br>
<input type='number' name='gaugeMax' step='1' value='%MAX%' required><br>
</div>
<br>
<input type='submit' value='&#x1F4BE; Save settings'>
%FOOTER% )";
const char Page_grow_dashboard_gaugeAdd_HTML_NO_ID_AVAILABLE[] PROGMEM = R"(%HEADER%
%SUBNAV%
%SAVE_MSG%
<h3>You cannot create more gauges, limit reached.</h3>
%FOOTER% )";

View file

@ -1389,7 +1389,7 @@ void WebPage_system_sensor_add(AsyncWebServerRequest *request) {
// I like it more when user gets redirected to the output overview after saving
request->redirect("/system/sensor/?success");
} else {
/* GET REQUEST */
/* when in edit mode */
if(request->hasParam("edit")) {
const AsyncWebParameter* param = request->getParam("edit");