From f8a50e09b77d9a8fe2b31a108c2a2f11d275f5f8 Mon Sep 17 00:00:00 2001
From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com>
Date: Wed, 4 Mar 2020 00:27:35 +0300
Subject: [PATCH] add air firmware upgrade support
---
Upgrade.ino | 191 +++++++++++++-----
data/index.json | 12 ++
...2-esp8266_iot-manager_modules_firmware.ino | 8 +-
main.ino | 3 +-
set.h | 8 +-
5 files changed, 161 insertions(+), 61 deletions(-)
diff --git a/Upgrade.ino b/Upgrade.ino
index 17fdc72d..17cb8875 100644
--- a/Upgrade.ino
+++ b/Upgrade.ino
@@ -1,79 +1,158 @@
void initUpgrade() {
-
server.on("/upgrade", HTTP_GET, [](AsyncWebServerRequest * request) {
- Serial.println("start update...");
+#ifdef ESP32
+ new_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
+#endif
+#ifdef ESP8266
+ new_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
+#endif
- //WiFiClient client_for;
+ Serial.println(new_version);
+
+ String tmp = "{}";
- //httpUpdate.rebootOnUpdate(false);
+ if (new_version != "error") {
+ if (new_version == firmware_version) {
+ jsonWrite(tmp, "title", "Последняя версия прошивки уже установлена.");
+ jsonWrite(tmp, "class", "pop-up");
+ } else {
+ upgrade_flag = true;
+ jsonWrite(tmp, "title", "Идет обновление прошивки... После завершения устройство перезагрузится.");
+ jsonWrite(tmp, "class", "pop-up");
+ }
+ } else {
+ jsonWrite(tmp, "title", "Ошибка... Cервер не найден. Попробуйте позже...");
+ jsonWrite(tmp, "class", "pop-up");
+ }
- //t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
-
- //if (ret == HTTP_UPDATE_OK) {
-
- Serial.println("update Spiffs done!");
-
- //t_httpUpdate_return ret = httpUpdate.update(client_for, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
-
- // switch (ret) {
- // case HTTP_UPDATE_FAILED:
- // Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
- // break;
-
- // case HTTP_UPDATE_NO_UPDATES:
- // Serial.println("HTTP_UPDATE_NO_UPDATES");
- // break;
-
- // case HTTP_UPDATE_OK:
- // Serial.println("HTTP_UPDATE_OK");
- // break;
- // }
-
- // }
-
- //UpdateStatus(ret);
-
- /* #ifdef ESP8266
- String new_version = getURL("http://91.204.228.124:1100/update/esp8266/version.txt");
- #endif
-
- #ifdef ESP32
- String new_version = getURL("http://91.204.228.124:1100/update/esp32/version.txt");
- #endif
-
- Serial.println(new_version);
-
- String tmp = "{}";
- if (new_version == firmware_version) {
- jsonWrite(tmp, "title", " Установленна последняя версия: " + new_version);
- jsonWrite(tmp, "class", "pop-up");
- } else {
- jsonWrite(tmp, "title", " Начитаню обновление до версии: " + new_version);
- jsonWrite(tmp, "class", "pop-up");
- webUpgrade();
- }*/
-
- request->send(200, "text/text", "ok");
+ request->send(200, "text/text", tmp);
});
-
}
-void UpdateStatus(t_httpUpdate_return set) {
+void upgrade_firmware() {
+
+ String scenario_for_update;
+ String config_for_update;
+ String configSetup_for_update;
+ scenario_for_update = readFile("firmware.scenario.txt", 2048);
+ config_for_update = readFile("firmware.config.txt", 2048);
+ configSetup_for_update = configSetup;
+
+ Serial.println("Start upgrade SPIFFS, please wait...");
+ WiFiClient client_for_upgrade;
+
+#ifdef ESP32
+ httpUpdate.rebootOnUpdate(false);
+ t_httpUpdate_return ret = httpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
+#endif
+#ifdef ESP8266
+ ESPhttpUpdate.rebootOnUpdate(false);
+ t_httpUpdate_return ret = ESPhttpUpdate.updateSpiffs(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.spiffs.bin");
+#endif
+
+ if (ret == HTTP_UPDATE_OK) {
+
+ writeFile("firmware.scenario.txt", scenario_for_update);
+ writeFile("firmware.config.txt", config_for_update);
+ writeFile("config.json", configSetup_for_update);
+ saveConfig();
+
+ Serial.println("SPIFFS upgrade done!");
+ Serial.println("Start upgrade BUILD, please wait...");
+
+#ifdef ESP32
+ httpUpdate.rebootOnUpdate(true);
+ t_httpUpdate_return ret = httpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp32/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
+#endif
+#ifdef ESP8266
+ ESPhttpUpdate.rebootOnUpdate(true);
+ t_httpUpdate_return ret = ESPhttpUpdate.update(client_for_upgrade, "http://91.204.228.124:1100/update/esp8266/esp32-esp8266_iot-manager_modules_firmware.ino.bin");
+#endif
+
+ Serial.println("BUILD upgrade done!");
+ Serial.println("Restart ESP....");
+
+ } else {
+ //upgrade_status(t_httpUpdate_return ret);
+ }
+}
+
+void handle_upgrade() {
+ if (upgrade_flag) {
+ upgrade_flag = false;
+ upgrade_firmware();
+ }
+}
+
+/*
+ void upgrade_status(t_httpUpdate_return set) {
switch (set) {
case HTTP_UPDATE_FAILED:
- Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s\n", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
+ Serial.printf("UPDATE_FAILED Error (%d): %s", httpUpdate.getLastError(), httpUpdate.getLastErrorString().c_str());
break;
case HTTP_UPDATE_NO_UPDATES:
- Serial.println("HTTP_UPDATE_NO_UPDATES");
+ Serial.println("NO_UPDATES");
break;
case HTTP_UPDATE_OK:
Serial.println("HTTP_UPDATE_OK");
break;
}
-}
+ }
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/*
// ----------------------- Обновление с сайта
void webUpgrade() {
diff --git a/data/index.json b/data/index.json
index a6fab9c0..01737869 100644
--- a/data/index.json
+++ b/data/index.json
@@ -19,6 +19,18 @@
"type": "h4",
"title": "IP address: {{ip}}"
},
+ {
+ "type": "h4",
+ "title": "Uptime: {{uptime}}"
+ },
+ {
+ "type": "h4",
+ "title": "Build version: {{firmware_version}}"
+ },
+ {
+ "type": "h4",
+ "title": "SPIFFS version: 2.2"
+ },
{
"type": "link",
"title": "Конфигурация устройства",
diff --git a/esp32-esp8266_iot-manager_modules_firmware.ino b/esp32-esp8266_iot-manager_modules_firmware.ino
index 768b96b6..ad38568b 100644
--- a/esp32-esp8266_iot-manager_modules_firmware.ino
+++ b/esp32-esp8266_iot-manager_modules_firmware.ino
@@ -25,6 +25,8 @@ void setup() {
Serial.setDebugOutput(0);
#endif
+ jsonWrite(configSetup, "firmware_version", firmware_version);
+
prex = prefix + "/" + chipID;
Serial.println(chipID);
//--------------------------------------------------------------
@@ -58,10 +60,11 @@ void setup() {
getMemoryLoad("[i] After loading");
- // ts.add(TEST, 20000, [&](void*) {
+ ts.add(TEST, 14400, [&](void*) {
- // }, nullptr, true);
+ statistics();
+ }, nullptr, false);
}
void loop() {
@@ -81,4 +84,5 @@ void loop() {
handleScenario();
ts.update();
+ handle_upgrade();
}
diff --git a/main.ino b/main.ino
index 2ed3fa31..c6a2662f 100644
--- a/main.ino
+++ b/main.ino
@@ -137,8 +137,7 @@ String getURL(String urls) {
if (httpCode == HTTP_CODE_OK) {
answer = http.getString();
}
- else
- {
+ else {
answer = "error";
}
http.end();
diff --git a/set.h b/set.h
index d571ae65..b836a8c9 100644
--- a/set.h
+++ b/set.h
@@ -1,4 +1,6 @@
String firmware_version = "2.2";
+String new_version;
+
//#define OTA_enable
//#define MDNS_enable
@@ -71,7 +73,7 @@ AsyncEventSource events("/events");
#include "time.h"
#include
TickerScheduler ts(30);
-enum { ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TIME, TEST};
+enum {ROUTER_SEARCHING, WIFI_MQTT_CONNECTION_CHECK, LEVEL, ANALOG_, DALLAS, DHTT, DHTH, DHTC, DHTP, DHTD, ANALOG_LOG, LEVEL_LOG, DALLAS_LOG, PH_LOG, CMD , TIMER_COUNTDOWN, TIMERS, TIME, TEST};
//ssl//#include "dependencies/WiFiClientSecure/WiFiClientSecure.h" //using older WiFiClientSecure
#include
@@ -136,3 +138,7 @@ int wifi_lost_error = 0;
int mqtt_lost_error = -1;
String var;
+
+boolean upgrade_flag = false;
+
+boolean get_url_flag = false;