dashboard gauge settings wip

This commit is contained in:
DeltaLima 2025-04-07 04:33:29 +02:00
parent 55c5dad2ee
commit 393812cf85
2 changed files with 196 additions and 6 deletions

View file

@ -12,6 +12,7 @@
/* dirty tmpParam hack again */
byte tmpParam_editGaugeId = 255;
byte tmpParam_editChartId = 255;
byte tmpParam_editDataId = 255;
/* subnav processor */
const byte WEB_GROW_SUBNAV_GENERAL = 1;
@ -972,16 +973,20 @@ String Proc_WebPage_grow_dashboard(const String& var) {
html += config.system.sensor.name[config.grow.dashboard.gaugeSensor[i]];
html += F("</td><td>");
//html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
String unit;
/* when RAW convert is set, use this for description. Otherwise use RAW*/
if((SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]] == SENSOR_READ_TYPE_RAW) && (config.system.sensor.rawConvert[config.grow.dashboard.gaugeSensor[i]][config.grow.dashboard.gaugeRead[i]] > 0)) {
html += FPSTR(Sensor_Convert_Raw_descr[config.system.sensor.rawConvert[config.grow.dashboard.gaugeSensor[i]][config.grow.dashboard.gaugeRead[i]]]);
unit = FPSTR(Sensor_Convert_Raw_unit[config.system.sensor.rawConvert[config.grow.dashboard.gaugeSensor[i]][config.grow.dashboard.gaugeRead[i]]]); //FPSTR(Sensor_Read_unit[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
} else {
html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
unit = FPSTR(Sensor_Read_unit[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
}
html += F("</td><td>");
html += Sensor_getCalibratedValue(config.grow.dashboard.gaugeSensor[i], config.grow.dashboard.gaugeRead[i]);
html += " ";
String unit = FPSTR(Sensor_Read_unit[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
unit.replace(F("%"), F("&#37;"));
html += unit;
html += F("</td><td>");
@ -1026,12 +1031,16 @@ String html;
html += F("</td><td>");
html += config.system.sensor.name[config.grow.dashboard.chartSensor[i]];
html += F("</td><td>");
String unit;
//html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.gaugeSensor[i]]].read[config.grow.dashboard.gaugeRead[i]]]);
/* when RAW convert is set, use this for description. Otherwise use RAW*/
if((SensorIndex[config.system.sensor.type[config.grow.dashboard.chartSensor[i]]].read[config.grow.dashboard.chartRead[i]] == SENSOR_READ_TYPE_RAW) && (config.system.sensor.rawConvert[config.grow.dashboard.chartSensor[i]][config.grow.dashboard.chartRead[i]] > 0)) {
html += FPSTR(Sensor_Convert_Raw_descr[config.system.sensor.rawConvert[config.grow.dashboard.chartSensor[i]][config.grow.dashboard.chartRead[i]]]);
unit = FPSTR(Sensor_Convert_Raw_unit[config.system.sensor.rawConvert[config.grow.dashboard.chartSensor[i]][config.grow.dashboard.chartRead[i]]]);
} else {
html += FPSTR(Sensor_Read_descr[SensorIndex[config.system.sensor.type[config.grow.dashboard.chartSensor[i]]].read[config.grow.dashboard.chartRead[i]]]);
unit = FPSTR(Sensor_Read_unit[SensorIndex[config.system.sensor.type[config.grow.dashboard.chartSensor[i]]].read[config.grow.dashboard.chartRead[i]]]);
}
html += F("</td><td style='background-color: ");
html += config.grow.dashboard.chartColor[i];
@ -1039,7 +1048,7 @@ String html;
//html += config.grow.dashboard.chartColor[i];
html += Sensor_getCalibratedValue(config.grow.dashboard.chartSensor[i], config.grow.dashboard.chartRead[i]);
html += " ";
String unit = FPSTR(Sensor_Read_unit[SensorIndex[config.system.sensor.type[config.grow.dashboard.chartSensor[i]]].read[config.grow.dashboard.chartRead[i]]]);
unit.replace(F("%"), F("&#37;"));
html += unit;
html += F("</td><td>");
@ -1129,6 +1138,21 @@ void WebPage_grow_dashboard(AsyncWebServerRequest *request) {
config.grow.dashboard.chartConfigured[chartId] = false;
config.grow.dashboard.chartSensor[chartId] = 0;
config.grow.dashboard.chartRead[chartId] = 0;
memset(config.grow.dashboard.chartColor[chartId], '\0', sizeof config.grow.dashboard.chartColor[chartId]);
SaveConfig();
Log.notice(F("%s config saved" CR), LogLoc);
} else if(request->hasParam("delete_data", true)) {
byte dataId;
const AsyncWebParameter* param = request->getParam("delete_data", true);
dataId = param->value().toInt();
// we ensure that every field is empty
config.grow.dashboard.dataConfigured[dataId] = false;
config.grow.dashboard.dataSensor[dataId] = 0;
config.grow.dashboard.dataRead[dataId] = 0;
//memset(config.grow.dashboard.chartColor[dataId], '\0', sizeof config.grow.dashboard.chartColor[dataId]);
SaveConfig();
Log.notice(F("%s config saved" CR), LogLoc);
@ -1305,7 +1329,7 @@ String Proc_WebPage_grow_dashboard_chartAdd(const String& 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") {
} else if(var == "CHART_ID") {
return String(Give_Free_Dashboard_ChartId());
} else if(var == "SELECT_SENSOR_READ") {
String html;
@ -1326,7 +1350,7 @@ String Proc_WebPage_grow_dashboard_chartAddEdit(const String& 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") {
} else if(var == "CHART_ID") {
return String(tmpParam_editChartId);
} else if(var == "SELECT_SENSOR_READ") {
String html;
@ -1412,3 +1436,126 @@ void WebPage_grow_dashboard_chartAdd(AsyncWebServerRequest *request) {
//request->send_P(200, TEXT_HTML, Page_grow_dashboard_chartAdd_HTML, Proc_WebPage_grow_dashboard_chartAdd);
}
}
/*******************************************************************************
* grow dashboards dataAdd page
*/
String Proc_WebPage_grow_dashboard_dataAdd(const String& var) {
const static char LogLoc[] PROGMEM = "[Webserver:grow:dashboard:dataAdd(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 == "CHART_ID") {
return String(Give_Free_Dashboard_DataId());
} else if(var == "SELECT_SENSOR_READ") {
String html;
html += Html_SelectOpt_Sensor_Read();
return html;
} else {
return String();
}
}
String Proc_WebPage_grow_dashboard_dataAddEdit(const String& var) {
const static char LogLoc[] PROGMEM = "[Webserver:grow:dashboard:dataAdd(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 == "CHART_ID") {
return String(tmpParam_editDataId);
} else if(var == "SELECT_SENSOR_READ") {
String html;
html += Html_SelectOpt_Sensor_Read(config.grow.dashboard.dataSensor[tmpParam_editDataId], config.grow.dashboard.dataRead[tmpParam_editDataId]);
return html;
} else if(var == "SENSOR_ID") {
return String(config.grow.dashboard.dataSensor[tmpParam_editDataId]);
} else if(var == "READ_ID") {
return String(config.grow.dashboard.dataRead[tmpParam_editDataId]);
} else {
return String();
}
}
String Proc_WebPage_grow_dashboard_dataAdd_POST(const String& var) {
/* This is the processor for POST
* Its exactly the same, just looking for SAVE_MSG string.
* If nothing matches, it calles the main Proc_WebPage_grow()
* processor function, so all the other stuff like header and so
* on get replaced
*/
if(var == "SAVE_MSG") {
return String(Common_HTML_SAVE_MSG);
} else {
return Proc_WebPage_grow_dashboard(var);
}
}
/* WebPage function */
void WebPage_grow_dashboard_dataAdd(AsyncWebServerRequest *request) {
const static char LogLoc[] PROGMEM = "[Webserver:grow:dashboard:dataAdd]";
/* Which kind of Request */
if(request->method() == HTTP_POST) {
byte dataId;
if(request->hasParam("dataId", true)) {
const AsyncWebParameter* param = request->getParam("dataId", true);
dataId = param->value().toInt();
/* set dataId to configured = true */
config.grow.dashboard.dataConfigured[dataId] = true;
}
if(request->hasParam("dataSensor", true)) {
const AsyncWebParameter* param = request->getParam("dataSensor", true);
config.grow.dashboard.dataSensor[dataId] = param->value().toInt();
}
if(request->hasParam("dataRead", true)) {
const AsyncWebParameter* param = request->getParam("dataRead", true);
config.grow.dashboard.dataRead[dataId] = param->value().toInt();
}
//if(request->hasParam("dataColor", true)) {
//const AsyncWebParameter* param = request->getParam("dataColor", true);
//strlcpy(config.grow.dashboard.dataColor[dataId], param->value().c_str(), sizeof(config.grow.dashboard.dataColor[dataId]));
//}
SaveConfig();
request->redirect("/grow/dashboard/?success");
//request->send_P(200, TEXT_HTML, Page_grow_dashboard_dataAdd_HTML, Proc_WebPage_grow_dashboard_dataAdd_POST);
} else {
/* GET REQUEST */
/* when in edit mode */
if(request->hasParam("edit")) {
const AsyncWebParameter* param = request->getParam("edit");
tmpParam_editDataId = param->value().toInt();
request->send_P(200, TEXT_HTML, Page_grow_dashboard_dataAdd_HTML, Proc_WebPage_grow_dashboard_dataAddEdit);
/* 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_dataAdd_HTML_NO_ID_AVAILABLE, Proc_WebPage_grow_dashboard_dataAdd);
/* Otherwise let the user create new sensor */
} else {
request->send_P(200, TEXT_HTML, Page_grow_dashboard_dataAdd_HTML, Proc_WebPage_grow_dashboard_dataAdd);
}
//request->send_P(200, TEXT_HTML, Page_grow_dashboard_dataAdd_HTML, Proc_WebPage_grow_dashboard_dataAdd);
}
}

View file

@ -184,11 +184,11 @@ const char Page_grow_dashboard_chartAdd_HTML[] PROGMEM = R"(%HEADER%
%SUBNAV%
%SAVE_MSG%
<h3>%ACTION% Chart ID %GAUGE_ID%</h3>
<h3>%ACTION% Chart ID %CHART_ID%</h3>
<p>Select which Sensor Reading to use for the chart<br></p>
<form method='post' action='/grow/dashboard/chartAdd'>
<input type='hidden' name='chartId' value='%GAUGE_ID%' />
<input type='hidden' name='chartId' value='%CHART_ID%' />
<div>
<u>Sensor Reading</u>:<br>
@ -217,3 +217,46 @@ const char Page_grow_dashboard_chartAdd_HTML_NO_ID_AVAILABLE[] PROGMEM = R"(%HEA
<h3>You cannot create more charts, limit reached.</h3>
%FOOTER% )";
/* /grow/dashboard/dataAdd page */
const char Page_grow_dashboard_dataAdd_HTML[] PROGMEM = R"(%HEADER%
%SUBNAV%
%SAVE_MSG%
<h3>%ACTION% Data ID %DATA_ID%</h3>
<p>Select which Sensor Reading to use for the data<br></p>
<form method='post' action='/grow/dashboard/dataAdd'>
<input type='hidden' name='dataId' value='%DATA_ID%' />
<div>
<u>Sensor Reading</u>:<br>
<input type='hidden' name='dataSensor' value='%SENSOR_ID%' id='dataSensor' />
<input type='hidden' name='dataRead' value='%READ_ID%' id='dataRead' />
<select name='controlBy' id='selSensor' onChange="GrowSelectControlSensorRead('selSensor', 'dataSensor', 'dataRead');" required>
<option value='' selected hidden >---</option>
%SELECT_SENSOR_READ%
</select><br>
<u>Color</u>:<br>
<input type='color' id='dataColor' name='dataColor' value='%COLOR%' required>
</div>
<br>
<input type='submit' value='&#x1F4BE; Save settings'>
%FOOTER% )";
const char Page_grow_dashboard_dataAdd_HTML_NO_ID_AVAILABLE[] PROGMEM = R"(%HEADER%
%SUBNAV%
%SAVE_MSG%
<h3>You cannot create more datas, limit reached.</h3>
%FOOTER% )";