Files
IoTManager/src/UpgradeFirm.cpp

128 lines
3.7 KiB
C++
Raw Normal View History

2020-10-18 00:07:57 +03:00
#include "Upgrade.h"
2020-09-17 21:33:54 +03:00
2020-10-18 09:52:17 +03:00
#include "Class/NotAsync.h"
2020-10-18 00:07:57 +03:00
#ifdef ESP8266
2020-09-17 21:33:54 +03:00
#include "ESP8266.h"
2020-10-18 00:07:57 +03:00
#else
#include <HTTPUpdate.h>
#endif
2020-09-17 21:33:54 +03:00
#include "Global.h"
void upgradeInit() {
2020-10-18 09:52:17 +03:00
myNotAsyncActions->add(
2020-09-17 21:33:54 +03:00
do_UPGRADE, [&](void*) {
upgrade_firmware(3);
},
nullptr);
2020-10-18 09:52:17 +03:00
myNotAsyncActions->add(
2020-09-17 21:33:54 +03:00
do_GETLASTVERSION, [&](void*) {
getLastVersion();
},
nullptr);
if (isNetworkActive()) {
getLastVersion();
if (lastVersion > 0) {
2020-10-20 22:55:45 +03:00
SerialPrint("I", "Update", "available version: " + String(lastVersion));
2020-09-17 21:33:54 +03:00
}
};
}
void getLastVersion() {
if ((WiFi.status() == WL_CONNECTED)) {
2020-10-19 01:21:20 +03:00
#ifdef ESP8266
2020-10-01 21:06:45 +03:00
String tmp = getURL(F("http://95.128.182.133/projects/iotmanager/esp8266/esp8266ver/esp8266ver.txt"));
2020-10-19 01:21:20 +03:00
#else
String tmp = getURL(F("http://95.128.182.133/projects/iotmanager/esp32/esp32ver/esp32ver.txt"));
#endif
2020-09-17 21:33:54 +03:00
if (tmp == "error") {
lastVersion = -1;
} else {
lastVersion = tmp.toInt();
}
} else {
lastVersion = -2;
}
jsonWriteInt(configSetupJson, "last_version", lastVersion);
}
void upgrade_firmware(int type) {
2020-10-02 01:37:40 +03:00
String scenario_ForUpdate;
String devconfig_ForUpdate;
String configSetup_ForUpdate;
scenario_ForUpdate = readFile(String(DEVICE_SCENARIO_FILE), 4000);
devconfig_ForUpdate = readFile(String(DEVICE_CONFIG_FILE), 4000);
configSetup_ForUpdate = configSetupJson;
2020-09-17 21:33:54 +03:00
if (type == 1) { //only build
if (upgradeBuild()) restartEsp();
2020-10-02 01:37:40 +03:00
}
else if (type == 2) { //only spiffs
if (upgradeFS()) {
writeFile(String(DEVICE_SCENARIO_FILE), scenario_ForUpdate);
writeFile(String(DEVICE_CONFIG_FILE), devconfig_ForUpdate);
writeFile("config.json", configSetup_ForUpdate);
restartEsp();
}
}
else if (type == 3) { //spiffs and build
2020-09-17 21:33:54 +03:00
if (upgradeFS()) {
2020-10-02 01:37:40 +03:00
writeFile(String(DEVICE_SCENARIO_FILE), scenario_ForUpdate);
writeFile(String(DEVICE_CONFIG_FILE), devconfig_ForUpdate);
writeFile("config.json", configSetup_ForUpdate);
saveConfig();
2020-09-17 21:33:54 +03:00
if (upgradeBuild()) {
restartEsp();
}
}
}
}
bool upgradeFS() {
WiFiClient wifiClient;
bool ret = false;
Serial.println("Start upgrade LittleFS, please wait...");
2020-10-18 00:07:57 +03:00
#ifdef ESP8266
2020-09-17 21:33:54 +03:00
ESPhttpUpdate.rebootOnUpdate(false);
2020-10-01 21:06:45 +03:00
t_httpUpdate_return retFS = ESPhttpUpdate.updateSpiffs(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp8266/littlefs/littlefs.bin"));
2020-10-18 00:07:57 +03:00
#else
httpUpdate.rebootOnUpdate(false);
2020-10-19 01:44:06 +03:00
HTTPUpdateResult retFS = httpUpdate.updateSpiffs(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp32/littlefs/spiffs.bin"));
2020-10-18 00:07:57 +03:00
#endif
2020-09-17 21:33:54 +03:00
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...");
2020-10-18 00:07:57 +03:00
#ifdef ESP8266
2020-09-17 21:33:54 +03:00
ESPhttpUpdate.rebootOnUpdate(false);
2020-10-01 21:06:45 +03:00
t_httpUpdate_return retBuild = ESPhttpUpdate.update(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp8266/firmware/firmware.bin"));
2020-10-18 00:07:57 +03:00
#else
httpUpdate.rebootOnUpdate(false);
2020-10-19 01:21:20 +03:00
HTTPUpdateResult retBuild = httpUpdate.update(wifiClient, F("http://95.128.182.133/projects/iotmanager/esp32/firmware/firmware.bin"));
2020-10-18 00:07:57 +03:00
#endif
2020-09-17 21:33:54 +03:00
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();
2020-10-01 20:38:46 +03:00
}