more Progress on WebUI

This commit is contained in:
Marcel Peterkau 2022-02-15 20:58:32 +01:00
parent cc4a23f6df
commit 7167efd1b1
7 changed files with 438 additions and 18 deletions

View File

@ -1,12 +1,343 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head>
<head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>KTM CAN Chain Oiler</title> <title>KTM CAN Chain Oiler</title>
<link rel="stylesheet" href="/css/style.css" /> <meta http-equiv="content-type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/css/bootstrap.min.css">
<link rel="stylesheet" href="/static/css/carbon.min.css">
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>
<title>KTM CAN ChainLube</title>
</head>
</head> <body>
<div class="container">
<h1>KTM CAN ChainLube</h1>
<!-- Tabs navs -->
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#tab_home">Home</a></li>
<li><a data-toggle="tab" href="#tab_source">Wegstrecke</a></li>
<li><a data-toggle="tab" href="#tab_lube">Schmierung</a></li>
<li><a data-toggle="tab" href="#tab_tank">Öltank</a></li>
<li><a data-toggle="tab" href="#tab_maintenance">Wartung</a></li>
<li><a data-toggle="tab" href="#tab_sysinfo">Systeminfo</a></li>
</ul>
<!-- Tabs navs -->
<!-- Tabs Content -->
<div class="tab-content">
<!-- Div Tab Home-->
<div id="tab_home" class="tab-pane fade in active">
<h3>HOME</h3>
<p>
<h4>Tankinhalt</h4>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="%TANK_REMAIN_CAPACITY%" aria-valuemin="0"
aria-valuemax="100" style="width: %TANK_REMAIN_CAPACITY%&#37;">
%TANK_REMAIN_CAPACITY%&#37;
</div>
</div>
</p>
</div>
<!-- Div Tab Home-->
<!-- Div Tab Source Settings-->
<div id="tab_source" class="tab-pane fade">
<h3>Quelle Wegstrecke</h3>
<p>
<form action="source-settings" method="POST" class="form-horizontal">
<div class="form-group">
<label for="sourceselect" class="control-label col-xs-2">Wegstrecke Quelle</label>
<div class="col-xs-10">
<select id="sourceselect" name="sourceselect" class="select form-control">
%SOURCE_SELECT_OPTIONS%
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
<!-- Div Source:Impulse Settings-->
<div %SHOW_IMPULSE_SETTINGS%>
<h4>Einstellungen Impuls</h4>
<p>
<form class="form-horizontal">
<div class="form-group">
<label for="tirewidth" class="control-label col-xs-2">Reifenbreite</label>
<div class="col-xs-10">
<div class="input-group">
<input id="tirewidth" name="tirewidth" type="text" required="required" class="form-control">
<div class="input-group-addon">mm</div>
</div>
</div>
</div>
<div class="form-group">
<label for="tireratio" class="control-label col-xs-2">Höhe/Breite-Verhältniss</label>
<div class="col-xs-10">
<div class="input-group">
<input id="tireratio" name="tireratio" type="text" required="required" class="form-control">
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group">
<label for="tiredia" class="control-label col-xs-2">Felgendurchmesser</label>
<div class="col-xs-10">
<div class="input-group">
<input id="tiredia" name="tiredia" type="text" required="required" class="form-control">
<div class="input-group-addon">"</div>
</div>
</div>
</div>
<div class="form-group">
<label for="pulserev" class="control-label col-xs-2">Pulse pro Umdrehung</label>
<div class="col-xs-10">
<div class="input-group">
<input id="pulserev" name="pulserev" type="text" required="required" class="form-control">
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
</div>
<!-- Div Source:Impulse Settings-->
<!-- Div Source:CAN Settings-->
<div %SHOW_CAN_SETTINGS%>
<h4>Einstellungen CAN-Bus</h4>
<p>
<form class="form-horizontal">
<div class="form-group">
<label for="cansource" class="control-label col-xs-2">Model</label>
<div class="col-xs-10">
<select id="cansource" name="cansource" class="select form-control">
%CANSOURCE_SELECT_OPTIONS%
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
</div>
<!-- Div Source:CAN Settings-->
<!-- Div Source:GPS Settings-->
<div %SHOW_GPS_SETTINGS%>
<h4>Einstellungen GPS</h4>
<p>
<form class="form-horizontal">
<div class="form-group">
<label for="gpsbaud" class="control-label col-xs-2">Model</label>
<div class="col-xs-10">
<select id="gpsbaud" name="gpsbaud" class="select form-control">
%GPSBAUD_SELECT_OPTIONS%
</select>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
</div>
<!-- Div Source:GPS Settings-->
</div>
<!-- Div Tab Source Settings-->
<!-- Div Tab Lube -->
<div id="tab_lube" class="tab-pane fade">
<h3>Schmierung</h3>
<p>
</p>
</div>
<!-- Div Tab Lube -->
<!-- Div Tab Maintenance -->
<div id="tab_maintenance" class="tab-pane fade">
<h3>Wartung</h3>
<p>
<form class="form-horizontal">
<div class="form-group">
<label for="purgepulse" class="control-label col-xs-2">Impulse</label>
<div class="col-xs-10">
<div class="input-group">
<input id="purgepulse" name="purgepulse" placeholder="25" type="text" class="form-control">
<div class="input-group-addon"></div>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
</div>
<!-- Div Tab Maintenance -->
<!-- Div Tank Settings-->
<div id="tab_tank" class="tab-pane fade">
<h3>Öltank</h3>
<p>
<form class="form-horizontal">
<div class="form-group">
<label for="tankcap" class="control-label col-xs-2">Tankkapazität</label>
<div class="col-xs-10">
<div class="input-group">
<input id="tankcap" name="tankcap" type="text" class="form-control" required="required">
<div class="input-group-addon">ml</div>
</div>
</div>
</div>
<div class="form-group">
<label for="tankwarn" class="control-label col-xs-2">Leer-Warnung</label>
<div class="col-xs-10">
<div class="input-group">
<input id="tankwarn" name="tankwarn" type="text" class="form-control" required="required">
<div class="input-group-addon">%</div>
</div>
</div>
</div>
<div class="form-group">
<label for="pumppulse" class="control-label col-xs-2">Menge pro Puls</label>
<div class="col-xs-10">
<div class="input-group">
<input id="pumppulse" name="pumppulse" type="text" class="form-control" required="required">
<div class="input-group-addon">µl</div>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-xs-offset-2 col-xs-10">
<button name="submit" type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</p>
</div>
<!-- Div Tank Settings-->
<!-- Div Tab SystemInfo -->
<div id="tab_sysinfo" class="tab-pane fade">
<h3>Einstellungen</h3>
<p>
<table class="table">
<tbody>
<tr>
<th scope="col">Parameter</td>
<th scope="col">Value</td>
</tr>
<tr>
<td>DistancePerLube_Default</td>
<td>%LUBE_DISTANCE_NORMAL%</td>
</tr>
<tr>
<td>DistancePerLube_Rain</td>
<td>%LUBE_DISTANCE_RAIN%</td>
</tr>
<tr>
<td>tankCapacity_ml</td>
<td>%TANK_CAPACITY%</td>
</tr>
<tr>
<td>amountPerDose_&micro;l</td>
<td>%AMOUNT_PER_DOSE%</td>
</tr>
<tr>
<td>TankRemindAtPercentage</td>
<td>%TANK_REMIND%</td>
</tr>
<tr>
<td>PulsePerRevolution</td>
<td>%PULSE_PER_REV%</td>
</tr>
<tr>
<td>TireWidth_mm</td>
<td>%TIRE_WIDTH_MM%</td>
</tr>
<tr>
<td>TireWidthHeight_Ratio</td>
<td>%TIRE_RATIO%</td>
</tr>
<tr>
<td>RimDiameter_Inch</td>
<td>%RIM_DIAMETER%</td>
</tr>
<tr>
<td>DistancePerRevolution_mm</td>
<td>%DISTANCE_PER_REV%</td>
</tr>
<tr>
<td>BleedingPulses</td>
<td>%BLEEDING_PULSES%</td>
</tr>
<tr>
<td>SpeedSource</td>
<td>%SPEED_SOURCE%</td>
</tr>
<tr>
<td>GPSBaudRate</td>
<td>%GPS_BAUD%</td>
</tr>
<tr>
<td>CANSource</td>
<td>%CAN_SOURCE%</td>
</tr>
<tr>
<td>Checksum</td>
<td>%CONFIG_CHECKSUM%</td>
</tr>
</tbody>
</table>
</p>
<h3>Betriebsdaten</h3>
<p>
<table class="table">
<tbody>
<tr>
<th scope="col">Parameter</td>
<th scope="col">Value</td>
</tr>
<tr>
<td>writeCycleCounter</td>
<td>%WRITE_CYCLE_COUNT%</td>
</tr>
<tr>
<td>tankRemain_µl</td>
<td>%TANK_REMAIN_UL%</td>
</tr>
<tr>
<td>TravelDistance_highRes</td>
<td>%TRAVEL_DISTANCE_HIGHRES%</td>
</tr>
<tr>
<td>checksum</td>
<td>%PERSISTANCE_CHECKSUM%</td>
</tr>
</table>
</p>
</div>
<!-- Div Tab SystemInfo -->
</div>
<!-- Tabs Content -->
<p>Copyright (C) 2022 Marcel Peterkau</p>
</div>
</body>
<body>
</body>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
kbd{border:1px solid #333}.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-color:#6a6a6a;border-color:#636363}.btn-default:hover{background-color:#6a6a6a}.btn-primary:hover{background-color:#404040}.btn-success:hover{background-color:#3d8b3d}.btn-info:hover{background-color:#28a1c5}.btn-danger:hover{background-color:#b52b27}.btn-warning:hover{background-color:#df8a13}.navbar-default .navbar-nav>li.active>a:hover{background-color:#222}.navbar-inverse .navbar-nav>li.active>a:hover{background-color:#444}.table{color:#fff}.table .primary,.table .info,.table .success,.table .warning,.table .danger{color:#fff}.table-hover tr:hover{cursor:pointer}.input-group-addon{color:#fff}.nav>li>a:hover{color:#fff}.pager>li>a:hover{color:#fff}a:focus{outline:0}a.list-group-item.active:hover{background-color:#4d4d4d}a.list-group-item-success,a.list-group-item-info,a.list-group-item-warning,a.list-group-item-danger,a.list-group-item-success:hover,a.list-group-item-info:hover,a.list-group-item-warning:hover,a.list-group-item-danger:hover{color:#fff}a.active.list-group-item-success,a.active.list-group-item-info,a.active.list-group-item-warning,a.active.list-group-item-danger,a.active.list-group-item-success:hover,a.active.list-group-item-info:hover,a.active.list-group-item-warning:hover,a.active.list-group-item-danger:hover{border-color:#666}a.active.list-group-item-success:hover{background-color:#3d8b3d}a.active.list-group-item-info:hover{background-color:#28a1c5}a.active.list-group-item-warning:hover{background-color:#df8a13}a.active.list-group-item-danger:hover{background-color:#b52b27}.list-group-item-success,.list-group-item-info,.list-group-item-warning,.list-group-item-danger{color:#fff}.alert-info,.alert-primary,.alert-warning,.alert-danger,.alert-success{color:#fff}.alert-info .alert-link,.alert-primary .alert-link,.alert-warning .alert-link,.alert-danger .alert-link,.alert-success .alert-link{color:#fff}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,8 +5,9 @@ AsyncWebServer webServer(80);
const char *PARAM_MESSAGE = "message"; const char *PARAM_MESSAGE = "message";
String processor(const String &var); String processor(const String &var);
void WebserverPost_Callback(AsyncWebServerRequest *request); void WebserverPOST_Callback(AsyncWebServerRequest *request);
void WebserverNotFound_Callback(AsyncWebServerRequest *request); void WebserverNotFound_Callback(AsyncWebServerRequest *request);
void Webserver_Callback(AsyncWebServerRequest *request);
void initWebUI() void initWebUI()
{ {
@ -16,14 +17,10 @@ void initWebUI()
return; return;
} }
// Route to load style.css file webServer.serveStatic("/static/", LittleFS, "/static/");
webServer.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm");
webServer.onNotFound(WebserverNotFound_Callback); webServer.onNotFound(WebserverNotFound_Callback);
webServer.on("/index.htm", HTTP_GET, Webserver_Callback);
webServer.on("/index.htm", HTTP_GET, [](AsyncWebServerRequest *request) webServer.on("/", HTTP_POST, WebserverPOST_Callback);
{ request->send(LittleFS, "/index.htm", String(), false, processor); });
webServer.on("/", HTTP_POST, WebserverPost_Callback);
webServer.begin(); webServer.begin();
} }
@ -34,6 +31,78 @@ void UpdateWebUI()
String processor(const String &var) String processor(const String &var)
{ {
if (var == "TANK_REMAIN_CAPACITY")
return String((PersistenceData.tankRemain_µl / 10) / LubeConfig.tankCapacity_ml);
if (var == "LUBE_DISTANCE_NORMAL")
return String(LubeConfig.DistancePerLube_Default);
if (var == "LUBE_DISTANCE_RAIN")
return String(LubeConfig.DistancePerLube_Rain);
if (var == "TANK_CAPACITY")
return String(LubeConfig.tankCapacity_ml);
if (var == "AMOUNT_PER_DOSE")
return String(LubeConfig.amountPerDose_µl);
if (var == "TANK_REMIND")
return String(LubeConfig.TankRemindAtPercentage);
if (var == "PULSE_PER_REV")
return String(LubeConfig.PulsePerRevolution);
if (var == "TIRE_WIDTH_MM")
return String(LubeConfig.TireWidth_mm);
if (var == "TIRE_RATIO")
return String(LubeConfig.TireWidthHeight_Ratio);
if (var == "RIM_DIAMETER")
return String(LubeConfig.RimDiameter_Inch);
if (var == "DISTANCE_PER_REV")
return String(LubeConfig.DistancePerRevolution_mm);
if (var == "BLEEDING_PULSES")
return String(LubeConfig.BleedingPulses);
if (var == "SPEED_SOURCE")
return String(SpeedSourceString[LubeConfig.SpeedSource]);
if (var == "GPS_BAUD")
return String(GPSBaudRateString[LubeConfig.GPSBaudRate]);
#if PCB_REVISION == 13
if (var == "CAN_SOURCE")
return String(CANSourceString[LubeConfig.CANSource]);
#endif
if (var == "CONFIG_CHECKSUM")
return String(LubeConfig.checksum, 16);
if (var == "WRITE_CYCLE_COUNT")
return String(PersistenceData.writeCycleCounter);
if (var == "TANK_REMAIN_UL")
return String(PersistenceData.tankRemain_µl);
if (var == "TRAVEL_DISTANCE_HIGHRES")
return String(PersistenceData.TravelDistance_highRes);
if (var == "PERSISTANCE_CHECKSUM")
return String(PersistenceData.checksum, 16);
if (var == "SHOW_IMPULSE_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_IMPULSE ? "" : "hidden";
if (var == "SHOW_CAN_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_CAN ? "" : "hidden";
if (var == "SHOW_GPS_SETTINGS")
return LubeConfig.SpeedSource == SOURCE_GPS ? "" : "hidden";
if (var == "SOURCE_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < SpeedSourceString_Elements; i++)
temp = temp + "<option value=\"" + i + "\">" + SpeedSourceString[i] + "</option>";
return temp;
}
if (var == "CANSOURCE_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < CANSourceString_Elements; i++)
temp = temp + "<option value=\"" + i + "\">" + CANSourceString[i] + "</option>";
return temp;
}
if (var == "GPSBAUD_SELECT_OPTIONS")
{
String temp;
for (uint32_t i = 0; i < GPSBaudRateString_Elements; i++)
temp = temp + "<option value=\"" + i + "\">" + GPSBaudRateString[i] + "</option>";
return temp;
}
if (var == "PLACEHOLDER") if (var == "PLACEHOLDER")
return "placeholder"; return "placeholder";
@ -41,13 +110,18 @@ String processor(const String &var)
return String(); return String();
} }
void WebserverPost_Callback(AsyncWebServerRequest *request) void Webserver_Callback(AsyncWebServerRequest *request)
{
request->send(LittleFS, "/index.htm", String(), false, processor);
}
void WebserverPOST_Callback(AsyncWebServerRequest *request)
{ {
String message; String message;
if (request->hasParam(PARAM_MESSAGE, true)) if (request->hasParam(PARAM_MESSAGE, true))
{ {
message = request->getParam(PARAM_MESSAGE, true)->value(); message = request->getParam(PARAM_MESSAGE, true)->value();
Serial.printf("POST: %s", message); Serial.printf("POST: %s", message.c_str());
} }
} }