From 96f160fc8821acc5c0dbe60cfeb1030f22e8a0eb Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Fri, 13 Nov 2020 02:58:45 +0300 Subject: [PATCH] editor changed --- data/dev_conf.txt | 0 data/edit.htm | 658 -------------------------------------- data/edit.htm.gz | Bin 0 -> 5455 bytes data/js/function.js.gz | Bin 19600 -> 19540 bytes include/Consts.h | 5 +- include/Utils/statUtils.h | 2 +- src/Utils/statUtils.cpp | 126 ++++---- src/WebServer.cpp | 1 + 8 files changed, 70 insertions(+), 722 deletions(-) create mode 100644 data/dev_conf.txt delete mode 100644 data/edit.htm create mode 100644 data/edit.htm.gz diff --git a/data/dev_conf.txt b/data/dev_conf.txt new file mode 100644 index 00000000..e69de29b diff --git a/data/edit.htm b/data/edit.htm deleted file mode 100644 index 1ebb989d..00000000 --- a/data/edit.htm +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - FS Editor - - - - - - - -
-
-
-
- - - - - \ No newline at end of file diff --git a/data/edit.htm.gz b/data/edit.htm.gz new file mode 100644 index 0000000000000000000000000000000000000000..5786121f98a84b5695314c9ad8e5537f57650ba4 GIT binary patch literal 5455 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 z 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 literal 19600 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 LkbhLfBwPUi)kAo- diff --git a/include/Consts.h b/include/Consts.h index e22011ba..b5bc2220 100644 --- a/include/Consts.h +++ b/include/Consts.h @@ -31,11 +31,10 @@ //#define MDNS_ENABLED //#define WEBSOCKET_ENABLED //#define LAYOUT_IN_RAM -#define UDP_ENABLED +//#define UDP_ENABLED //#define SSDP_ENABLED //=========Sensors enable/disable================================================================================================================================= -#define TANK_LEVEL_SAMPLES 10 #define LEVEL_ENABLED #define ANALOG_ENABLED #define DALLAS_ENABLED @@ -107,6 +106,6 @@ enum ConfigType_t { CT_SCENARIO }; -//07.11.2020 +//07.11.2020 (SSDP OFF, UDP OFF) //RAM: [===== ] 46.8% (used 38376 bytes from 81920 bytes) //Flash: [===== ] 54.2% (used 566004 bytes from 1044464 bytes) \ No newline at end of file diff --git a/include/Utils/statUtils.h b/include/Utils/statUtils.h index c97abf8e..c01e0bb8 100644 --- a/include/Utils/statUtils.h +++ b/include/Utils/statUtils.h @@ -3,7 +3,7 @@ #include "Global.h" extern void initSt(); -extern String updateDevicePsn(String lat, String lon, String accur); +extern String updateDevicePsn(String lat, String lon, String accur, String geo); extern String updateDeviceStatus(); extern String addNewDevice(); diff --git a/src/Utils/statUtils.cpp b/src/Utils/statUtils.cpp index 0145e5f2..fad0a29d 100644 --- a/src/Utils/statUtils.cpp +++ b/src/Utils/statUtils.cpp @@ -34,10 +34,12 @@ void decide() { if (cnt <= 3) { Serial.println("(get)"); getPsn(); - } else { + } + else { if (cnt % 5) { Serial.println("(skip)"); - } else { + } + else { Serial.println("(get)"); getPsn(); } @@ -51,10 +53,8 @@ void getPsn() { String line = jsonReadStr(res, "loc"); String lat = selectToMarker(line, ","); String lon = deleteBeforeDelimiter(line, ","); - //String city = jsonReadStr(res, "city"); - //String country = jsonReadStr(res, "country"); - //String region = jsonReadStr(res, "region"); - updateDevicePsn(lat, lon, "0"); + String geo = jsonReadStr(res, "city") + ", " + jsonReadStr(res, "country") + ", " + jsonReadStr(res, "region"); + updateDevicePsn(lat, lon, "0", geo); } } @@ -70,7 +70,7 @@ String addNewDevice() { jsonWriteStr(json, "name", FIRMWARE_NAME); jsonWriteStr(json, "model", getChipId()); //============================================== - http.begin(client, serverIP + F(":8082/api/devices/")); + http.begin(client, serverIP + F(":8082/api/devices/")); http.setAuthorization("admin", "admin"); http.addHeader("Content-Type", "application/json"); int httpCode = http.POST(json); @@ -81,7 +81,8 @@ String addNewDevice() { ret += " " + payload; //saveId("statid.txt", jsonReadInt(payload, "id")); } - } else { + } + else { ret = http.errorToString(httpCode).c_str(); } http.end(); @@ -90,35 +91,39 @@ String addNewDevice() { return ret; } -String updateDevicePsn(String lat, String lon, String accur) { +String updateDevicePsn(String lat, String lon, String accur, String geo) { String ret; if ((WiFi.status() == WL_CONNECTED)) { float latfl = lat.toFloat(); float lonfl = lon.toFloat(); randomSeed(micros()); - float latc = random(1, 9)/100; - randomSeed(micros()); - float lonc = random(1, 9)/100; - latfl = latfl + latc; - lonfl = lonfl + lonc; + float c = random(2, 9); + if (c > 5) { + latfl = latfl + (c / 100); + lonfl = lonfl + (c / 100); + } + else { + latfl = latfl - (c / 100); + lonfl = lonfl - (c / 100); + } WiFiClient client; HTTPClient http; - http.begin(client, serverIP + F(":5055/")); + http.begin(client, serverIP + F(":5055/")); http.setAuthorization("admin", "admin"); http.addHeader("Content-Type", "application/json"); String mac = WiFi.macAddress().c_str(); int httpCode = http.POST("?id=" + mac + - "&resetReason=" + ESP_getResetReason() + - "&lat=" + String(latfl) + - "&lon=" + String(lonfl) + - "&accuracy=" + accur + ""); + "&lat=" + String(latfl) + + "&lon=" + String(lonfl) + + "&accuracy=" + accur + ""); if (httpCode > 0) { ret = httpCode; if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); ret += " " + payload; } - } else { + } + else { ret = http.errorToString(httpCode).c_str(); } http.end(); @@ -132,24 +137,25 @@ String updateDeviceStatus() { if ((WiFi.status() == WL_CONNECTED)) { WiFiClient client; HTTPClient http; - http.begin(client, serverIP + F(":5055/")); + http.begin(client, serverIP + F(":5055/")); http.setAuthorization("admin", "admin"); http.addHeader("Content-Type", "application/json"); String mac = WiFi.macAddress().c_str(); int httpCode = http.POST("?id=" + mac + - "&resetReason=" + ESP_getResetReason() + - "&uptime=" + timeNow->getUptime() + - "&uptimeTotal=" + getUptimeTotal() + - "&version=" + FIRMWARE_VERSION + - "&resetsTotal=" + String(getCurrentNumber("stat.txt")) + - "&heap=" + String(ESP.getFreeHeap()) + ""); + "&resetReason=" + ESP_getResetReason() + + "&uptime=" + timeNow->getUptime() + + "&uptimeTotal=" + getUptimeTotal() + + "&version=" + FIRMWARE_VERSION + + "&resetsTotal=" + String(getCurrentNumber("stat.txt")) + + "&heap=" + String(ESP.getFreeHeap()) + ""); if (httpCode > 0) { ret = httpCode; if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); ret += " " + payload; } - } else { + } + else { ret = http.errorToString(httpCode).c_str(); } http.end(); @@ -186,38 +192,38 @@ String ESP_getResetReason(void) { String ESP32GetResetReason(uint32_t cpu_no) { // tools\sdk\include\esp32\rom\rtc.h switch (rtc_get_reset_reason((RESET_REASON)cpu_no)) { - case POWERON_RESET: - return F("Vbat power on reset"); // 1 - case SW_RESET: - return F("Software reset digital core"); // 3 - case OWDT_RESET: - return F("Legacy watch dog reset digital core"); // 4 - case DEEPSLEEP_RESET: - return F("Deep Sleep reset digital core"); // 5 - case SDIO_RESET: - return F("Reset by SLC module, reset digital core"); // 6 - case TG0WDT_SYS_RESET: - return F("Timer Group0 Watch dog reset digital core"); // 7 - case TG1WDT_SYS_RESET: - return F("Timer Group1 Watch dog reset digital core"); // 8 - case RTCWDT_SYS_RESET: - return F("RTC Watch dog Reset digital core"); // 9 - case INTRUSION_RESET: - return F("Instrusion tested to reset CPU"); // 10 - case TGWDT_CPU_RESET: - return F("Time Group reset CPU"); // 11 - case SW_CPU_RESET: - return F("Software reset CPU"); // 12 - case RTCWDT_CPU_RESET: - return F("RTC Watch dog Reset CPU"); // 13 - case EXT_CPU_RESET: - return F("or APP CPU, reseted by PRO CPU"); // 14 - case RTCWDT_BROWN_OUT_RESET: - return F("Reset when the vdd voltage is not stable"); // 15 - case RTCWDT_RTC_RESET: - return F("RTC Watch dog reset digital core and rtc module"); // 16 - default: - return F("NO_MEAN"); // 0 + case POWERON_RESET: + return F("Vbat power on reset"); // 1 + case SW_RESET: + return F("Software reset digital core"); // 3 + case OWDT_RESET: + return F("Legacy watch dog reset digital core"); // 4 + case DEEPSLEEP_RESET: + return F("Deep Sleep reset digital core"); // 5 + case SDIO_RESET: + return F("Reset by SLC module, reset digital core"); // 6 + case TG0WDT_SYS_RESET: + return F("Timer Group0 Watch dog reset digital core"); // 7 + case TG1WDT_SYS_RESET: + return F("Timer Group1 Watch dog reset digital core"); // 8 + case RTCWDT_SYS_RESET: + return F("RTC Watch dog Reset digital core"); // 9 + case INTRUSION_RESET: + return F("Instrusion tested to reset CPU"); // 10 + case TGWDT_CPU_RESET: + return F("Time Group reset CPU"); // 11 + case SW_CPU_RESET: + return F("Software reset CPU"); // 12 + case RTCWDT_CPU_RESET: + return F("RTC Watch dog Reset CPU"); // 13 + case EXT_CPU_RESET: + return F("or APP CPU, reseted by PRO CPU"); // 14 + case RTCWDT_BROWN_OUT_RESET: + return F("Reset when the vdd voltage is not stable"); // 15 + case RTCWDT_RTC_RESET: + return F("RTC Watch dog reset digital core and rtc module"); // 16 + default: + return F("NO_MEAN"); // 0 } } diff --git a/src/WebServer.cpp b/src/WebServer.cpp index 810a1add..0cd23843 100644 --- a/src/WebServer.cpp +++ b/src/WebServer.cpp @@ -25,6 +25,7 @@ void init() { server.serveStatic("/js/", LittleFS, "/js/").setCacheControl("max-age=600"); server.serveStatic("/favicon.ico", LittleFS, "/favicon.ico").setCacheControl("max-age=600"); server.serveStatic("/icon.jpeg", LittleFS, "/icon.jpeg").setCacheControl("max-age=600"); + server.serveStatic("/edit", LittleFS, "/edit").setCacheControl("max-age=600"); server.serveStatic("/", LittleFS, "/").setDefaultFile("index.htm").setAuthentication(login.c_str(), pass.c_str());