WebUI adjusted and prepared EE-Backup-Stuff

This commit is contained in:
Marcel Peterkau 2022-09-01 23:46:20 +02:00
parent 64f9e102a5
commit 371e21429d
4 changed files with 182 additions and 23 deletions

View File

@ -58,8 +58,8 @@
<p> <p>
<h4>Tankinhalt verbleibend</h4> <h4>Tankinhalt verbleibend</h4>
<div class="progress"> <div class="progress">
<div class="progress-bar text-light" role="progressbar" aria-valuenow="%TANK_REMAIN_CAPACITY%" aria-valuemin="0" <div class="progress-bar text-light" role="progressbar" aria-valuenow="%TANK_REMAIN_CAPACITY%"
aria-valuemax="100" style="width: %TANK_REMAIN_CAPACITY%&#37;"> aria-valuemin="0" aria-valuemax="100" style="width: %TANK_REMAIN_CAPACITY%&#37;">
%TANK_REMAIN_CAPACITY%&#37; %TANK_REMAIN_CAPACITY%&#37;
</div> </div>
</div> </div>
@ -76,10 +76,10 @@
<table class="table"> <table class="table">
<tbody> <tbody>
<tr> <tr>
<th class="col-md-3" scope="col">Zeitstempel</th> <th class="col-6" scope="col">Zeitstempel</th>
<th class="col-md-3" scope="col">Fehlercode</th> <th class="col-2" scope="col">Fehlercode</th>
<th class="col-md-3" scope="col">Schwere</th> <th class="col-2" scope="col">Schwere</th>
<th class="col-md-3" scope="col">Aktiv</th> <th class="col-2" scope="col">Aktiv</th>
</tr> </tr>
%DTC_TABLE% %DTC_TABLE%
</tbody> </tbody>
@ -113,7 +113,7 @@
Dadurch wird die WiFi-Verbindung getrennt und muss neu aufgebaut werden. Dadurch wird die WiFi-Verbindung getrennt und muss neu aufgebaut werden.
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="sourcesave" type="submit" class="btn btn-outline-primary">&Uuml;bernehmen</button> <button name="sourcesave" type="submit" class="btn btn-outline-primary">&Uuml;bernehmen</button>
</div> </div>
</div> </div>
@ -174,12 +174,13 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="pulsesave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="pulsesave" type="submit" class="btn btn-outline-primary">Speichern</button>
</div> </div>
</div> </div>
</form> </form>
</p> </p>
<hr />
</div> </div>
<!-- Div Source:Impulse Settings--> <!-- Div Source:Impulse Settings-->
<!-- Div Source:CAN Settings--> <!-- Div Source:CAN Settings-->
@ -197,12 +198,13 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="cansave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="cansave" type="submit" class="btn btn-outline-primary">Speichern</button>
</div> </div>
</div> </div>
</form> </form>
</p> </p>
<hr />
</div> </div>
<!-- Div Source:CAN Settings--> <!-- Div Source:CAN Settings-->
<!-- Div Source:GPS Settings--> <!-- Div Source:GPS Settings-->
@ -220,12 +222,13 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="gpssave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="gpssave" type="submit" class="btn btn-outline-primary">Speichern</button>
</div> </div>
</div> </div>
</form> </form>
</p> </p>
<hr />
</div> </div>
<!-- Div Source:GPS Settings--> <!-- Div Source:GPS Settings-->
</div> </div>
@ -234,8 +237,8 @@
<div id="tab_lube" class="tab-pane fade" role="tabpanel"> <div id="tab_lube" class="tab-pane fade" role="tabpanel">
<h3>Schmierung</h3> <h3>Schmierung</h3>
<hr /> <hr />
<h4>Dosierung</h4>
<p> <p>
<h4>Dosierung</h4>
<form action="post.htm" method="POST" class="form-horizontal"> <form action="post.htm" method="POST" class="form-horizontal">
<div class="form-group row"> <div class="form-group row">
<label for="lubedistancenormal" class="control-label col-4">Normal (gr&uuml;n)</label> <label for="lubedistancenormal" class="control-label col-4">Normal (gr&uuml;n)</label>
@ -262,7 +265,7 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="oilsave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="oilsave" type="submit" class="btn btn-outline-primary">Speichern</button>
</div> </div>
</div> </div>
@ -327,7 +330,7 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8 row"> <div class="col text-center">
<button name="oilsave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="oilsave" type="submit" class="btn btn-outline-primary">Speichern</button>
<button name="resettank" type="submit" class="btn btn-outline-primary ml-2">Tank zurücksetzen</button> <button name="resettank" type="submit" class="btn btn-outline-primary ml-2">Tank zurücksetzen</button>
</div> </div>
@ -350,7 +353,7 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8 row"> <div class="col text-center">
<button name="maintsave" type="submit" class="btn btn-outline-primary">Speichern</button> <button name="maintsave" type="submit" class="btn btn-outline-primary">Speichern</button>
<button name="purgenow" type="submit" class="btn btn-outline-primary ml-2">Entlüftung starten</button> <button name="purgenow" type="submit" class="btn btn-outline-primary ml-2">Entlüftung starten</button>
</div> </div>
@ -358,8 +361,8 @@
</form> </form>
</p> </p>
<hr /> <hr />
<h4>EEPROM formatieren</h4>
<p> <p>
<h4>EEPROM formatieren</h4>
<div class="alert alert-primary alert-dismissable show fade" role="alert"> <div class="alert alert-primary alert-dismissable show fade" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"> <button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span> <span aria-hidden="true">×</span>
@ -389,26 +392,37 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="offset-4 col-8"> <div class="col text-center">
<button name="reset_ee_btn" type="submit" class="btn btn-outline-primary">EEPROM formatieren</button> <button name="reset_ee_btn" type="submit" class="btn btn-outline-primary">EEPROM formatieren</button>
</div> </div>
</div> </div>
</form> </form>
</p> </p>
<hr /> <hr />
<p>
<h4>Ger&auml;t neustarten</h4>
<form action="post.htm" method="POST" class="form-horizontal">
<div class="form-group row">
<div class="col text-center">
<button name="reboot" type="submit" class="btn btn-outline-primary">Reboot</button>
</div>
</div>
</form>
</p>
<hr />
</div> </div>
<!-- Div Tab Maintenance --> <!-- Div Tab Maintenance -->
<!-- Div Tab SystemInfo --> <!-- Div Tab SystemInfo -->
<div id="tab_sysinfo" class="tab-pane fade" role="tabpanel"> <div id="tab_sysinfo" class="tab-pane fade" role="tabpanel">
<h3>Systeminfo</h3> <h3>Systeminfo</h3>
<hr /> <hr />
<h4>Einstellungen</h4>
<p> <p>
<h4>Einstellungen</h4>
<table class="table"> <table class="table">
<tbody> <tbody>
<tr> <tr>
<th class="col-md-8" scope="col">Parameter</td> <th class="col-7" scope="col">Parameter</td>
<th class="col-md-4" scope="col">Value</td> <th class="col-5" scope="col">Value</td>
</tr> </tr>
<tr> <tr>
<td>DistancePerLube_Default</td> <td>DistancePerLube_Default</td>
@ -473,13 +487,14 @@
</tbody> </tbody>
</table> </table>
</p> </p>
<h4>Betriebsdaten</h4> <hr />
<p> <p>
<h4>Betriebsdaten</h4>
<table class="table"> <table class="table">
<tbody> <tbody>
<tr> <tr>
<th class="col-md-8" scope="col">Parameter</td> <th class="col-7" scope="col">Parameter</td>
<th class="col-md-4" scope="col">Value</td> <th class="col-5" scope="col">Value</td>
</tr> </tr>
<tr> <tr>
<td>writeCycleCounter</td> <td>writeCycleCounter</td>
@ -507,6 +522,7 @@
</tr> </tr>
</table> </table>
</p> </p>
<hr />
</div> </div>
<!-- Div Tab SystemInfo --> <!-- Div Tab SystemInfo -->
<!-- Div Tab Firmware Update--> <!-- Div Tab Firmware Update-->
@ -517,6 +533,10 @@
<h4>Version-Info</h4> <h4>Version-Info</h4>
<table class="table"> <table class="table">
<tbody> <tbody>
<tr>
<th class="col-7" scope="col">Parameter</td>
<th class="col-5" scope="col">Value</td>
</tr>
<tr> <tr>
<td>Firmware Version</td> <td>Firmware Version</td>
<td>%SW_VERSION%</td> <td>%SW_VERSION%</td>
@ -529,6 +549,33 @@
</p> </p>
<hr /> <hr />
<p> <p>
<h4>EEPROM-Backup</h4>
<div class="form-group row">
<div class="col text-center">
<a class="btn btn-outline-primary" href="eejson" role="button" id="ee-backup-download">Download</a>
</div>
</div>
</p>
<hr />
<p>
<h4>EEPROM-Restore</h4>
<form method='POST' action='eeRestore' enctype='multipart/form-data'>
<div class="form-group row">
<div class="custom-file">
<input type="file" name="ee-restore-file" class="custom-file-input" id="ee-restore-file" accept=".ee.json"
required />
<label class="custom-file-label" for="ee-restore-file">EEPROM-Backup ausw&auml;hlen</label>
</div>
</div>
<div class="form-group row">
<div class="col text-center">
<button name="submit" type="submit" class="btn btn-outline-primary">Restore starten</button>
</div>
</div>
</form>
</p>
<hr />
<p>
<h4>Firmware-Update</h4> <h4>Firmware-Update</h4>
<form method='POST' action='doUpdate' enctype='multipart/form-data'> <form method='POST' action='doUpdate' enctype='multipart/form-data'>
<div class="form-group row"> <div class="form-group row">
@ -539,10 +586,13 @@
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<button name="submit" type="submit" class="btn btn-outline-primary">Update starten</button> <div class="col text-center">
<button name="submit" type="submit" class="btn btn-outline-primary">Update starten</button>
</div>
</div> </div>
</form> </form>
</p> </p>
<hr />
</div> </div>
<!-- Div Tab Firmware Update--> <!-- Div Tab Firmware Update-->
</div> </div>

View File

@ -59,3 +59,4 @@ lib_deps =
robtillaart/I2C_EEPROM @ ^1.5.2 robtillaart/I2C_EEPROM @ ^1.5.2
mikalhart/TinyGPSPlus @ ^1.0.3 mikalhart/TinyGPSPlus @ ^1.0.3
me-no-dev/ESP Async WebServer @ ^1.2.3 me-no-dev/ESP Async WebServer @ ^1.2.3
bblanchon/ArduinoJson @ ^6.19.4

View File

@ -9,6 +9,8 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request);
void WebserverNotFound_Callback(AsyncWebServerRequest *request); void WebserverNotFound_Callback(AsyncWebServerRequest *request);
void Webserver_Callback(AsyncWebServerRequest *request); void Webserver_Callback(AsyncWebServerRequest *request);
void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final); void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final);
void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final);
void WebServerEEJSON_Callback(AsyncWebServerRequest *request);
void GetFlashVersion(char *buff, size_t buff_size); void GetFlashVersion(char *buff, size_t buff_size);
void initWebUI() void initWebUI()
@ -37,8 +39,11 @@ void initWebUI()
webServer.onNotFound(WebserverNotFound_Callback); webServer.onNotFound(WebserverNotFound_Callback);
webServer.on("/index.htm", HTTP_GET, Webserver_Callback); webServer.on("/index.htm", HTTP_GET, Webserver_Callback);
webServer.on("/post.htm", HTTP_POST, WebserverPOST_Callback); webServer.on("/post.htm", HTTP_POST, WebserverPOST_Callback);
webServer.on("/eejson", HTTP_GET, WebServerEEJSON_Callback);
webServer.on( webServer.on(
"/doUpdate", HTTP_POST, [](AsyncWebServerRequest *request) {}, WebserverFirmwareUpdate_Callback); "/doUpdate", HTTP_POST, [](AsyncWebServerRequest *request) {}, WebserverFirmwareUpdate_Callback);
webServer.on(
"/eeRestore", HTTP_POST, [](AsyncWebServerRequest *request) {}, WebserverEERestore_Callback);
webServer.begin(); webServer.begin();
} }
@ -327,6 +332,10 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request)
globals.systemStatus = sysStat_Purge; globals.systemStatus = sysStat_Purge;
globals.purgePulses = LubeConfig.BleedingPulses; globals.purgePulses = LubeConfig.BleedingPulses;
} }
if(p->name() == "reboot")
{
globals.systemStatus = sysStat_Shutdown;
}
// end: POST Form Maintenance // end: POST Form Maintenance
} }
} }
@ -395,3 +404,100 @@ void WebserverFirmwareUpdate_Callback(AsyncWebServerRequest *request, const Stri
} }
} }
} }
void WebserverEERestore_Callback(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len, bool final)
{
bool ee_done = false;
bool validext = false;
if (!index)
{
Serial.println("EEPROM restore");
size_t content_len = request->contentLength();
validext = (filename.indexOf(".ee.json") > -1);
}
if (validext)
{
Serial.println("Restoring EEPROM-Stuff");
}
if (final)
{
AsyncWebServerResponse *response = request->beginResponse(302, "text/plain", "Please wait while the device reboots");
response->addHeader("Refresh", "20");
response->addHeader("Location", "/");
request->send(response);
if (ee_done)
{
Serial.println("Update complete");
Serial.flush();
globals.systemStatus = sysStat_Shutdown;
}
else
{
}
}
}
void WebServerEEJSON_Callback(AsyncWebServerRequest *request)
{
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument json(1024);
JsonObject fwinfo = json.createNestedObject("info");
char buffer[16];
fwinfo["DeviceName"] = globals.DeviceName;
fwinfo["FW-Version"] = QUOTE(SW_VERSION);
fwinfo["FS-Version"] = globals.FlashVersion;
JsonObject config = json.createNestedObject("config");
config["EEPROM_Version"] = LubeConfig.EEPROM_Version;
config["DistancePerLube_Default"] = LubeConfig.DistancePerLube_Default;
config["DistancePerLube_Rain"] = LubeConfig.DistancePerLube_Rain;
config["tankCapacity_ml"] = LubeConfig.tankCapacity_ml;
config["amountPerDose_µl"] = LubeConfig.amountPerDose_µl;
config["TankRemindAtPercentage"] = LubeConfig.TankRemindAtPercentage;
config["PulsePerRevolution"] = LubeConfig.PulsePerRevolution;
config["TireWidth_mm"] = LubeConfig.TireWidth_mm;
config["TireWidthHeight_Ratio"] = LubeConfig.TireWidthHeight_Ratio;
config["RimDiameter_Inch"] = LubeConfig.RimDiameter_Inch;
config["DistancePerRevolution_mm"] = LubeConfig.DistancePerRevolution_mm;
config["BleedingPulses"] = LubeConfig.BleedingPulses;
config["SpeedSource"] = LubeConfig.SpeedSource;
config["SpeedSource_Str"] = SpeedSourceString[LubeConfig.SpeedSource];
#ifdef FEATURE_ENABLE_GPS
config["GPSBaudRate"] = LubeConfig.GPSBaudRate;
config["GPSBaudRate_Str"] = GPSBaudRateString[LubeConfig.GPSBaudRate];
#endif
#ifdef FEATURE_ENABLE_CAN
config["CANSource"] = LubeConfig.CANSource;
config["CANSource_Str"] = CANSourceString[LubeConfig.CANSource];
#endif
sprintf(buffer, "0x%08X", LubeConfig.checksum);
config["checksum"] = buffer;
JsonObject eepart = json.createNestedObject("eepart");
sprintf(buffer, "0x%04X", globals.eePersistanceAdress);
eepart["PersistanceAddress"] = buffer;
JsonObject persis = json.createNestedObject("persis");
persis["writeCycleCounter"] = PersistenceData.writeCycleCounter;
persis["tankRemain_µl"] = PersistenceData.tankRemain_µl;
persis["TravelDistance_highRes_mm"] = PersistenceData.TravelDistance_highRes_mm;
persis["odometer_mm"] = PersistenceData.odometer_mm;
persis["odometer"] = PersistenceData.odometer;
sprintf(buffer, "0x%08X", PersistenceData.checksum);
persis["checksum"] = buffer;
serializeJsonPretty(json, *response);
response->addHeader("Content-disposition", "attachment; filename=backup.ee.json");
request->send(response);
}

View File

@ -8,6 +8,8 @@
#include <ESPAsyncWebServer.h> #include <ESPAsyncWebServer.h>
#include <Updater.h> #include <Updater.h>
#include <ESP8266mDNS.h> #include <ESP8266mDNS.h>
#include <AsyncJson.h>
#include <ArduinoJson.h>
#include "config.h" #include "config.h"
#include "globals.h" #include "globals.h"