ota added

This commit is contained in:
Dmitry Borisenko
2020-09-17 21:33:54 +03:00
parent d6f5506812
commit e23481eef2
13 changed files with 186 additions and 153 deletions

View File

@@ -43,7 +43,7 @@
},
{
"type": "h4",
"title": "LittleFS version: 2.4.0"
"title": "LittleFS version: 240"
},
{
"type": "hr"

View File

View File

@@ -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
};

View File

@@ -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;
//Запрос на скарнирование шины

View File

@@ -1,8 +0,0 @@
#pragma once
#include <Arduino.h>
const String getAvailableUrl(const char* mcu);
void getLastVersion();
void upgradeInit();
void upgrade_firmware();

10
include/UpgradeFirm.h Normal file
View File

@@ -0,0 +1,10 @@
#pragma once
#include <Arduino.h>
extern void upgradeInit();
extern void getLastVersion();
extern void upgrade_firmware(int type);
extern bool upgradeFS();
extern bool upgradeBuild();
extern void restartEsp();

View File

@@ -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;

View File

@@ -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;

View File

@@ -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");
}
}

129
src/UpgradeFirm.cpp Normal file
View File

@@ -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");
// }
//}

View File

@@ -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);
}
//}
}

View File

@@ -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");

View File

@@ -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("Новая версия прошивки<a href=\"#\" class=\"btn btn-block btn-danger\" onclick=\"send_request(this, '/upgrade');setTimeout(function(){ location.href='/'; }, 120000);html('my-block','<span class=loader></span>Идет обновление прошивки, после обновления страница перезагрузится автоматически...')\">Установить</a>");
} 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", "<button class=\"close\" onclick=\"toggle('my-block')\">×</button>" + 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();
}