diff --git a/data/set.device.json b/data/set.device.json index 497a6f10..3b829f05 100644 --- a/data/set.device.json +++ b/data/set.device.json @@ -43,7 +43,7 @@ }, { "type": "h4", - "title": "LittleFS version: 2.4.0" + "title": "LittleFS version: 240" }, { "type": "hr" diff --git a/esp8266ver/esp8266ver.txt b/esp8266ver/esp8266ver.txt new file mode 100644 index 00000000..e69de29b diff --git a/include/Consts.h b/include/Consts.h index a385cbb9..a62c192d 100644 --- a/include/Consts.h +++ b/include/Consts.h @@ -3,12 +3,12 @@ * Main consts */ #define FIRMWARE_NAME "esp8266-iotm" -#define FIRMWARE_VERSION "240" +#define FIRMWARE_VERSION 240 + #define NUM_BUTTONS 6 #define LED_PIN 2 #define FLASH_4MB true - #define MQTT_RECONNECT_INTERVAL 20000 #define TELEMETRY_UPDATE_INTERVAL_MIN 60 @@ -22,7 +22,6 @@ #define TAG_ONE_WIRE "oneWire" #define TAG_I2C "i2c" #define TAG_ONE_WIRE_PIN "oneWirePin" - /* * Optional @@ -42,7 +41,6 @@ #define ANALOG_ENABLED - #define DALLAS_ENABLED #define DHT_ENABLED @@ -97,15 +95,15 @@ enum TimerTask_t { WIFI_SCAN, TEST }; enum notAsincActions { - do_ZERO, - do_UPGRADE, - do_GETLASTVERSION, - do_UDPDATAPARSE, - do_MQTTUDP, - do_BUSSCAN, - do_MQTTPARAMSCHANGED, - do_LAST, -}; + do_ZERO, + do_UPGRADE, + do_GETLASTVERSION, + do_UDPDATAPARSE, + do_MQTTUDP, + do_BUSSCAN, + do_MQTTPARAMSCHANGED, + do_LAST, +}; enum ErrorType_t { ET_NONE, @@ -137,5 +135,3 @@ enum BusScanner_t { BS_I2C, BS_ONE_WIRE }; - - diff --git a/include/Global.h b/include/Global.h index c963ea36..736e679f 100644 --- a/include/Global.h +++ b/include/Global.h @@ -80,7 +80,7 @@ extern int8_t dallasEnterCounter; extern String logging_value_names_list; extern int enter_to_logging_counter; extern int scenario_line_status[40]; -extern String lastVersion; +extern int lastVersion; //Запрос на скарнирование шины diff --git a/include/Upgrade.h b/include/Upgrade.h deleted file mode 100644 index 4d21f53b..00000000 --- a/include/Upgrade.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include - -const String getAvailableUrl(const char* mcu); -void getLastVersion(); -void upgradeInit(); -void upgrade_firmware(); \ No newline at end of file diff --git a/include/UpgradeFirm.h b/include/UpgradeFirm.h new file mode 100644 index 00000000..b02adb12 --- /dev/null +++ b/include/UpgradeFirm.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +extern void upgradeInit(); +extern void getLastVersion(); +extern void upgrade_firmware(int type); +extern bool upgradeFS(); +extern bool upgradeBuild(); +extern void restartEsp(); \ No newline at end of file diff --git a/src/Global.cpp b/src/Global.cpp index 045114f1..8f02a693 100644 --- a/src/Global.cpp +++ b/src/Global.cpp @@ -47,7 +47,7 @@ int enter_to_logging_counter; // Scenario int scenario_line_status[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; -String lastVersion = ""; +int lastVersion; BusScanner_t busToScan; boolean busScanFlag = false; diff --git a/src/Init.cpp b/src/Init.cpp index f5284402..58e11d4f 100644 --- a/src/Init.cpp +++ b/src/Init.cpp @@ -9,7 +9,7 @@ void loadConfig() { configSetupJson.replace("\r\n", ""); jsonWriteStr(configSetupJson, "chipID", chipId); - jsonWriteStr(configSetupJson, "firmware_version", FIRMWARE_VERSION); + jsonWriteInt(configSetupJson, "firmware_version", FIRMWARE_VERSION); prex = jsonReadStr(configSetupJson, "mqttPrefix") + "/" + chipId; diff --git a/src/Upgrade.cpp b/src/Upgrade.cpp deleted file mode 100644 index a5bced26..00000000 --- a/src/Upgrade.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "Upgrade.h" - -#include "Class/NotAsinc.h" -#include "ESP8266.h" -#include "Global.h" - - -static const char* check_update_url PROGMEM = "http://91.204.228.124:1100/update/%s/version.txt"; - -void upgradeInit() { - myNotAsincActions->add( - do_UPGRADE, [&](void*) { - upgrade_firmware(); - }, - nullptr); - - myNotAsincActions->add( - do_GETLASTVERSION, [&](void*) { - getLastVersion(); - }, - nullptr); - - if (isNetworkActive()) { - getLastVersion(); - if (lastVersion.length()) { - SerialPrint("I","Update","available: " + lastVersion); - } - }; -} - -const String getAvailableUrl(const char* mcu) { - char buf[128]; - sprintf_P(buf, check_update_url, mcu); - return buf; -} - -void getLastVersion() { - String url; -#ifdef ESP8266 - url = getAvailableUrl("esp8266"); -#else - url = getAvailableUrl("esp32"); -#endif - lastVersion = getURL(url); - jsonWriteStr(configSetupJson, "last_version", lastVersion); -} - -void upgrade_firmware() { - String scanerioBackup, configBackup, setupBackup; - - scanerioBackup = readFile(String(DEVICE_SCENARIO_FILE), 4096); - configBackup = readFile(String(DEVICE_CONFIG_FILE), 4096); - setupBackup = configSetupJson; - - SerialPrint("I","module","update data"); - WiFiClient wifiClient; -#ifdef ESP8266 - ESPhttpUpdate.rebootOnUpdate(false); - t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(wifiClient, F("http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin")); -#else - httpUpdate.rebootOnUpdate(false); - t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, F("http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin")); -#endif - if (ret == HTTP_UPDATE_OK) { - writeFile(String(DEVICE_SCENARIO_FILE), scanerioBackup); - writeFile(String(DEVICE_CONFIG_FILE), configBackup); - writeFile("config.json", setupBackup); - - saveConfig(); - - SerialPrint("I","module","done!"); - } else { - SerialPrint("[E]","module","on data"); - return; - } - - //Serial.println("update firmware"); -#ifdef ESP8266 - ret = ESPhttpUpdate.update(wifiClient, F("http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin")); -#else - ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin"); -#endif - if (ret == HTTP_UPDATE_OK) { - SerialPrint("I","module","done! restart..."); - ESP.restart(); - } else { - SerialPrint("[E]","module","on firmware"); - } -} diff --git a/src/UpgradeFirm.cpp b/src/UpgradeFirm.cpp new file mode 100644 index 00000000..5bc47cd2 --- /dev/null +++ b/src/UpgradeFirm.cpp @@ -0,0 +1,129 @@ +#include "UpgradeFirm.h" + +#include "Class/NotAsinc.h" +#include "ESP8266.h" +#include "Global.h" + +void upgradeInit() { + myNotAsincActions->add( + do_UPGRADE, [&](void*) { + upgrade_firmware(3); + }, + nullptr); + + myNotAsincActions->add( + do_GETLASTVERSION, [&](void*) { + getLastVersion(); + }, + nullptr); + + if (isNetworkActive()) { + getLastVersion(); + if (lastVersion > 0) { + SerialPrint("I", "Update", "available version: " + lastVersion); + } + }; +} + +void getLastVersion() { + if ((WiFi.status() == WL_CONNECTED)) { + String tmp = getURL(F("http://95.128.182.133/projects/iotmanager/esp8266/esp8266ver.txt")); + if (tmp == "error") { + lastVersion = -1; + } else { + lastVersion = tmp.toInt(); + } + } else { + lastVersion = -2; + } + jsonWriteInt(configSetupJson, "last_version", lastVersion); +} + +void upgrade_firmware(int type) { + if (type == 1) { //only build + if (upgradeBuild()) restartEsp(); + } else if (type == 2) { //only spiffs + if (upgradeFS()) restartEsp(); + } else if (type == 3) { //spiffs and build + if (upgradeFS()) { + if (upgradeBuild()) { + restartEsp(); + } + } + } +} + +bool upgradeFS() { + WiFiClient wifiClient; + bool ret = false; + Serial.println("Start upgrade LittleFS, please wait..."); + ESPhttpUpdate.rebootOnUpdate(false); + t_httpUpdate_return retFS = ESPhttpUpdate.updateSpiffs(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp8266/littlefs.bin")); + if (retFS == HTTP_UPDATE_OK) { //если FS обновилась успешно + SerialPrint("I", "Update", "LittleFS upgrade done!"); + ret = true; + } + return ret; +} + +bool upgradeBuild() { + WiFiClient wifiClient; + bool ret = false; + Serial.println("Start upgrade BUILD, please wait..."); + ESPhttpUpdate.rebootOnUpdate(false); + t_httpUpdate_return retBuild = ESPhttpUpdate.update(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp8266/firmware.bin")); + if (retBuild == HTTP_UPDATE_OK) { //если BUILD обновился успешно + SerialPrint("I", "Update", "BUILD upgrade done!"); + ret = true; + } + return ret; +} + +void restartEsp() { + Serial.println("Restart ESP...."); + delay(1000); + ESP.restart(); +} + +//void upgrade_firmware() { +// String scanerioBackup, configBackup, setupBackup; +// +// scanerioBackup = readFile(String(DEVICE_SCENARIO_FILE), 4096); +// configBackup = readFile(String(DEVICE_CONFIG_FILE), 4096); +// setupBackup = configSetupJson; +// +// SerialPrint("I","module","update data"); +// WiFiClient wifiClient; +//#ifdef ESP8266 +// ESPhttpUpdate.rebootOnUpdate(false); +// t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(wifiClient, F("http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin")); +//#else +// httpUpdate.rebootOnUpdate(false); +// t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, F("http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin")); +//#endif +// if (ret == HTTP_UPDATE_OK) { +// writeFile(String(DEVICE_SCENARIO_FILE), scanerioBackup); +// writeFile(String(DEVICE_CONFIG_FILE), configBackup); +// writeFile("config.json", setupBackup); +// +// saveConfig(); +// +// SerialPrint("I","module","done!"); +// } else { +// SerialPrint("[E]","module","on data"); +// return; +// } +// +// //Serial.println("update firmware"); +//#ifdef ESP8266 +// ret = ESPhttpUpdate.update(wifiClient, F("http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin")); +//#else +// ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin"); +//#endif +// if (ret == HTTP_UPDATE_OK) { +// SerialPrint("I","module","done! restart..."); +// ESP.restart(); +// } else { +// SerialPrint("[E]","module","on firmware"); +// } +//} diff --git a/src/Utils/SerialPrint.cpp b/src/Utils/SerialPrint.cpp index 96f0141c..8f57b3dd 100644 --- a/src/Utils/SerialPrint.cpp +++ b/src/Utils/SerialPrint.cpp @@ -3,7 +3,7 @@ #include "Global.h" void SerialPrint(String errorLevel, String module, String msg) { - if (module == "Stat") { + //if (module == "Stat" || module == "Update") { Serial.println(prettyMillis(millis()) + " [" + errorLevel + "] [" + module + "] " + msg); - } + //} } \ No newline at end of file diff --git a/src/Utils/statUtils.cpp b/src/Utils/statUtils.cpp index 32babadb..25529ca6 100644 --- a/src/Utils/statUtils.cpp +++ b/src/Utils/statUtils.cpp @@ -63,7 +63,7 @@ String addNewDevice() { //============================================== jsonWriteStr(json, "uniqueId", mac); jsonWriteStr(json, "name", FIRMWARE_NAME); - jsonWriteStr(json, "model", FIRMWARE_VERSION); + jsonWriteInt(json, "model", FIRMWARE_VERSION); //============================================== http.begin(client, F("http://95.128.182.133:8082/api/devices/")); http.setAuthorization("admin", "admin"); diff --git a/src/Web.cpp b/src/Web.cpp index b66fdd17..ed391616 100644 --- a/src/Web.cpp +++ b/src/Web.cpp @@ -1,10 +1,9 @@ #include "Web.h" -#include "ItemsList.h" + +#include "Class/NotAsinc.h" #include "Global.h" #include "Init.h" -#include "Class/NotAsinc.h" - - +#include "ItemsList.h" bool parseRequestForPreset(AsyncWebServerRequest* request, uint8_t& preset) { if (request->hasArg("preset")) { @@ -28,7 +27,6 @@ void web_init() { }); server.on("/set", HTTP_GET, [](AsyncWebServerRequest* request) { - //==============================presets=========================================================================================================== //uint8_t preset; //if (parseRequestForPreset(request, preset)) { @@ -66,7 +64,7 @@ void web_init() { Device_init(); request->send(200); } - + if (request->hasArg("scen")) { bool value = request->getParam("scen")->value().toInt(); jsonWriteBool(configSetupJson, "scen", value); @@ -74,12 +72,12 @@ void web_init() { loadScenario(); request->send(200); } - + if (request->hasArg("sceninit")) { loadScenario(); request->send(200); } - + #ifdef LOGGING_ENABLED if (request->hasArg("cleanlog")) { clean_log_date(); @@ -94,17 +92,17 @@ void web_init() { loadScenario(); request->send(200); } - + if (request->hasArg("updatelist")) { removeFile("/dev.csv"); addFileLn("dev.csv", "device id;device name;ip address"); request->redirect("/?set.udp"); } - + if (request->hasArg("updatepage")) { request->redirect("/?set.udp"); } - + if (request->hasArg("devname")) { jsonWriteStr(configSetupJson, "name", request->getParam("devname")->value()); saveConfig(); @@ -122,7 +120,7 @@ void web_init() { saveConfig(); request->send(200); } - + if (request->hasArg("apssid")) { jsonWriteStr(configSetupJson, "apssid", request->getParam("apssid")->value()); saveConfig(); @@ -134,7 +132,7 @@ void web_init() { saveConfig(); request->send(200); } - + if (request->hasArg("weblogin")) { jsonWriteStr(configSetupJson, "weblogin", request->getParam("weblogin")->value()); saveConfig(); @@ -146,7 +144,7 @@ void web_init() { saveConfig(); request->send(200); } - + if (request->hasArg("timezone")) { String timezoneStr = request->getParam("timezone")->value(); jsonWriteStr(configSetupJson, "timezone", timezoneStr); @@ -162,7 +160,7 @@ void web_init() { timeNow->setNtpPool(ntpStr); request->send(200); } - + if (request->hasArg("blink")) { bool value = request->getParam("blink")->value().toInt(); jsonWriteBool(configSetupJson, "blink", value); @@ -201,7 +199,7 @@ void web_init() { myNotAsincActions->make(do_MQTTPARAMSCHANGED); request->send(200); } - + if (request->hasArg("mqttsend")) { myNotAsincActions->make(do_MQTTUDP); request->send(200); @@ -262,30 +260,26 @@ void web_init() { */ server.on("/check", HTTP_GET, [](AsyncWebServerRequest* request) { myNotAsincActions->make(do_GETLASTVERSION); - SerialPrint("I","Web","firmware version: " + lastVersion); - - if (!FLASH_4MB) { - lastVersion = "less"; - } else if (isNetworkActive()) { - lastVersion = "nowifi"; - } + SerialPrint("I", "Update", "firmware version: " + String(lastVersion)); String msg = ""; if (lastVersion == FIRMWARE_VERSION) { msg = F("Актуальная версия прошивки уже установлена."); - } else if (lastVersion != FIRMWARE_VERSION) { + } else if (lastVersion > FIRMWARE_VERSION) { msg = F("Новая версия прошивкиИдет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить"); - } else if (lastVersion == "error") { + } else if (lastVersion == -1) { msg = F("Cервер не найден. Попробуйте повторить позже..."); - } else if (lastVersion == "") { - msg = F("Нажмите на кнопку \"обновить прошивку\" повторно..."); - } else if (lastVersion == "less") { - msg = F("Обновление \"по воздуху\" не поддерживается!"); - } else if (lastVersion == "nowifi") { + } else if (lastVersion == -2) { msg = F("Устройство не подключено к роутеру!"); - } else if (lastVersion == "notsupported") { - msg = F("Обновление возможно только через usb!"); } + // else if (lastVersion == "") { + //msg = F("Нажмите на кнопку \"обновить прошивку\" повторно..."); + //} else if (lastVersion == "less") { + //msg = F("Обновление \"по воздуху\" не поддерживается!"); + //} else if (lastVersion == "notsupported") { + // msg = F("Обновление возможно только через usb!"); + //} + String tmp = "{}"; jsonWriteStr(tmp, "title", "" + msg); jsonWriteStr(tmp, "class", "pop-up"); @@ -296,13 +290,14 @@ void web_init() { * Upgrade */ server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest* request) { - myNotAsincActions->make(do_UPGRADE);; + myNotAsincActions->make(do_UPGRADE); + ; request->send(200, "text/html"); }); } void setConfigParam(const char* param, const String& value) { - SerialPrint("I","Web","set " + String(param) + ": " + value); + SerialPrint("I", "Web", "set " + String(param) + ": " + value); jsonWriteStr(configSetupJson, param, value); saveConfig(); } \ No newline at end of file