From dbaf6fe4b42a2e1e56f12a15250a1bf2065104e3 Mon Sep 17 00:00:00 2001 From: proddy Date: Wed, 22 Jul 2020 16:09:43 +0200 Subject: [PATCH] more stable OTA uploads. disable UART and stop Mqtt during upload. --- README.md | 4 +- lib/framework/OTASettingsService.cpp | 70 +++++++++++++++------------- lib/framework/OTASettingsService.h | 2 + 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 61a84a1bb..946a83629 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,9 @@ The Web is based off Rick's awesome [esp8266-react](https://github.com/rjwats/es * `MqttStatus.cpp` added root["mqtt_fails"] * `SecuritySettingsService.cpp` added version to the JWT payload * `SecuritySettingsService.h` #include "../../src/version.h" - * `WiFiSettingsService.cpp` added WiFi.setOutputPower(20.0f) + * `WiFiSettingsService.cpp` added WiFi.setOutputPower(20.0f) - removed + * `OTASettingsService.h` added #include "../../src/system.h" + * `OTASettingsService.cpp` added call to emsesp::System::upload_status(true) * `features.ini`: -D FT_NTP=0 * `platformio.ini` using our own version * `factory_settings.ini` modified with `ems-esp-neo` as password and `ems-esp` everywhere else diff --git a/lib/framework/OTASettingsService.cpp b/lib/framework/OTASettingsService.cpp index 1f4122641..3fd002448 100644 --- a/lib/framework/OTASettingsService.cpp +++ b/lib/framework/OTASettingsService.cpp @@ -1,46 +1,52 @@ #include -OTASettingsService::OTASettingsService(AsyncWebServer* server, FS* fs, SecurityManager* securityManager) : - _httpEndpoint(OTASettings::read, OTASettings::update, this, server, OTA_SETTINGS_SERVICE_PATH, securityManager), - _fsPersistence(OTASettings::read, OTASettings::update, this, fs, OTA_SETTINGS_FILE), - _arduinoOTA(nullptr) { +OTASettingsService::OTASettingsService(AsyncWebServer * server, FS * fs, SecurityManager * securityManager) + : _httpEndpoint(OTASettings::read, OTASettings::update, this, server, OTA_SETTINGS_SERVICE_PATH, securityManager) + , _fsPersistence(OTASettings::read, OTASettings::update, this, fs, OTA_SETTINGS_FILE) + , _arduinoOTA(nullptr) { #ifdef ESP32 - WiFi.onEvent(std::bind(&OTASettingsService::onStationModeGotIP, this, std::placeholders::_1, std::placeholders::_2), - WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); + WiFi.onEvent(std::bind(&OTASettingsService::onStationModeGotIP, this, std::placeholders::_1, std::placeholders::_2), WiFiEvent_t::SYSTEM_EVENT_STA_GOT_IP); #elif defined(ESP8266) - _onStationModeGotIPHandler = - WiFi.onStationModeGotIP(std::bind(&OTASettingsService::onStationModeGotIP, this, std::placeholders::_1)); + _onStationModeGotIPHandler = WiFi.onStationModeGotIP(std::bind(&OTASettingsService::onStationModeGotIP, this, std::placeholders::_1)); #endif - addUpdateHandler([&](const String& originId) { configureArduinoOTA(); }, false); + addUpdateHandler([&](const String & originId) { configureArduinoOTA(); }, false); } void OTASettingsService::begin() { - _fsPersistence.readFromFS(); - configureArduinoOTA(); + _fsPersistence.readFromFS(); + configureArduinoOTA(); } void OTASettingsService::loop() { - if (_state.enabled && _arduinoOTA) { - _arduinoOTA->handle(); - } + if (_state.enabled && _arduinoOTA) { + _arduinoOTA->handle(); + } } void OTASettingsService::configureArduinoOTA() { - if (_arduinoOTA) { + if (_arduinoOTA) { #ifdef ESP32 - _arduinoOTA->end(); + _arduinoOTA->end(); #endif - delete _arduinoOTA; - _arduinoOTA = nullptr; - } - if (_state.enabled) { - // Serial.println(F("Starting OTA Update Service...")); - _arduinoOTA = new ArduinoOTAClass; - _arduinoOTA->setPort(_state.port); - _arduinoOTA->setPassword(_state.password.c_str()); - /* - _arduinoOTA->onStart([]() { Serial.println(F("Starting")); }); - _arduinoOTA->onEnd([]() { Serial.println(F("\r\nEnd")); }); + delete _arduinoOTA; + _arduinoOTA = nullptr; + } + if (_state.enabled) { + // Serial.println(F("Starting OTA Update Service...")); + _arduinoOTA = new ArduinoOTAClass; + _arduinoOTA->setPort(_state.port); + _arduinoOTA->setPassword(_state.password.c_str()); + + _arduinoOTA->onStart([]() { + // Serial.println(F("Starting")); + emsesp::System::upload_status(true); + }); + _arduinoOTA->onEnd([]() { + // Serial.println(F("\r\nEnd")); + emsesp::System::upload_status(false); + }); + + /* _arduinoOTA->onProgress([](unsigned int progress, unsigned int total) { Serial.printf_P(PSTR("Progress: %u%%\r\n"), (progress / (total / 100))); }); @@ -58,16 +64,16 @@ void OTASettingsService::configureArduinoOTA() { Serial.println(F("End Failed")); }); */ - _arduinoOTA->begin(); - } + _arduinoOTA->begin(); + } } #ifdef ESP32 void OTASettingsService::onStationModeGotIP(WiFiEvent_t event, WiFiEventInfo_t info) { - configureArduinoOTA(); + configureArduinoOTA(); } #elif defined(ESP8266) -void OTASettingsService::onStationModeGotIP(const WiFiEventStationModeGotIP& event) { - configureArduinoOTA(); +void OTASettingsService::onStationModeGotIP(const WiFiEventStationModeGotIP & event) { + configureArduinoOTA(); } #endif diff --git a/lib/framework/OTASettingsService.h b/lib/framework/OTASettingsService.h index c8d8609dd..8a0bcaad8 100644 --- a/lib/framework/OTASettingsService.h +++ b/lib/framework/OTASettingsService.h @@ -13,6 +13,8 @@ #include #include +#include "../../src/system.h" // proddy added + #ifndef FACTORY_OTA_PORT #define FACTORY_OTA_PORT 8266 #endif