diff --git a/Software/data_src/index.htm b/Software/data_src/index.htm index 9dd5e8a..476d651 100644 --- a/Software/data_src/index.htm +++ b/Software/data_src/index.htm @@ -58,8 +58,8 @@

Tankinhalt verbleibend

-
+
%TANK_REMAIN_CAPACITY%%
@@ -76,10 +76,10 @@ - - - - + + + + %DTC_TABLE% @@ -113,7 +113,7 @@ Dadurch wird die WiFi-Verbindung getrennt und muss neu aufgebaut werden.
-
+
@@ -174,12 +174,13 @@
-
+

+
@@ -197,12 +198,13 @@
-
+

+
@@ -220,12 +222,13 @@
-
+

+
@@ -234,8 +237,8 @@

Schmierung


-

Dosierung

+

Dosierung

@@ -262,7 +265,7 @@
-
+
@@ -327,7 +330,7 @@
-
+
@@ -350,7 +353,7 @@
-
+
@@ -358,8 +361,8 @@


-

EEPROM formatieren

+

EEPROM formatieren

-
+


+

+

Gerät neustarten

+
+
+
+ +
+
+ +

+

Systeminfo


-

Einstellungen

+

Einstellungen

ZeitstempelFehlercodeSchwereAktivZeitstempelFehlercodeSchwereAktiv
- @@ -473,13 +487,14 @@
Parameter - Value + Parameter + Value
DistancePerLube_Default

-

Betriebsdaten

+

+

Betriebsdaten

- @@ -507,6 +522,7 @@
Parameter - Value + Parameter + Value
writeCycleCounter

+
@@ -517,6 +533,10 @@

Version-Info

+ + @@ -529,6 +549,33 @@


+

EEPROM-Backup

+
+
+ Download +
+
+

+
+

+

EEPROM-Restore

+ +
+
+ + +
+
+
+
+ +
+
+ +

+
+

Firmware-Update

@@ -539,10 +586,13 @@
- +
+ +

+
diff --git a/Software/platformio.ini b/Software/platformio.ini index 418f999..cbd76cc 100644 --- a/Software/platformio.ini +++ b/Software/platformio.ini @@ -59,3 +59,4 @@ lib_deps = robtillaart/I2C_EEPROM @ ^1.5.2 mikalhart/TinyGPSPlus @ ^1.0.3 me-no-dev/ESP Async WebServer @ ^1.2.3 + bblanchon/ArduinoJson @ ^6.19.4 \ No newline at end of file diff --git a/Software/src/webui.cpp b/Software/src/webui.cpp index 47d1750..f0e5155 100644 --- a/Software/src/webui.cpp +++ b/Software/src/webui.cpp @@ -9,6 +9,8 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request); void WebserverNotFound_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 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 initWebUI() @@ -37,8 +39,11 @@ void initWebUI() webServer.onNotFound(WebserverNotFound_Callback); webServer.on("/index.htm", HTTP_GET, Webserver_Callback); webServer.on("/post.htm", HTTP_POST, WebserverPOST_Callback); + webServer.on("/eejson", HTTP_GET, WebServerEEJSON_Callback); webServer.on( "/doUpdate", HTTP_POST, [](AsyncWebServerRequest *request) {}, WebserverFirmwareUpdate_Callback); + webServer.on( + "/eeRestore", HTTP_POST, [](AsyncWebServerRequest *request) {}, WebserverEERestore_Callback); webServer.begin(); } @@ -327,6 +332,10 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request) globals.systemStatus = sysStat_Purge; globals.purgePulses = LubeConfig.BleedingPulses; } + if(p->name() == "reboot") + { + globals.systemStatus = sysStat_Shutdown; + } // 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); +} \ No newline at end of file diff --git a/Software/src/webui.h b/Software/src/webui.h index 772c5dd..170c5b1 100644 --- a/Software/src/webui.h +++ b/Software/src/webui.h @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include "config.h" #include "globals.h"
Parameter + Value +
Firmware Version %SW_VERSION%