diff --git a/lib/MyESP/MyESP.cpp b/lib/MyESP/MyESP.cpp index ea6e44581..7e891615a 100644 --- a/lib/MyESP/MyESP.cpp +++ b/lib/MyESP/MyESP.cpp @@ -73,6 +73,7 @@ MyESP::MyESP() { _ota_pre_callback = NULL; _ota_post_callback = NULL; + _ota_doing_update = false; _suspendOutput = false; @@ -470,6 +471,8 @@ void MyESP::_OTACallback() { // stop the web server webServer.close(); + _ota_doing_update = true; + if (_ota_pre_callback) { (_ota_pre_callback)(); // call custom function } @@ -487,9 +490,11 @@ void MyESP::_ota_setup() { ArduinoOTA.onStart([this]() { _OTACallback(); }); ArduinoOTA.onEnd([this]() { myDebug_P(PSTR("[OTA] Done, restarting...")); + _ota_doing_update = false; _deferredReset(500, CUSTOM_RESET_OTA); }); + /* ArduinoOTA.onProgress([this](unsigned int progress, unsigned int total) { static unsigned int _progOld; unsigned int _prog = (progress / (total / 100)); @@ -498,6 +503,7 @@ void MyESP::_ota_setup() { _progOld = _prog; } }); + */ ArduinoOTA.onError([this](ota_error_t error) { if (error == OTA_AUTH_ERROR) @@ -2186,6 +2192,13 @@ void MyESP::_bootupSequence() { * Loop. This is called as often as possible and it handles wifi, telnet, mqtt etc */ void MyESP::loop() { + jw.loop(); // WiFi + ArduinoOTA.handle(); // OTA + + if (_ota_doing_update) { + return; // quit if in the middle of an update + } + _calculateLoad(); _systemCheckLoop(); _heartbeatCheck(); @@ -2197,9 +2210,7 @@ void MyESP::loop() { _telnetHandle(); } - jw.loop(); // WiFi - ArduinoOTA.handle(); // OTA - _mqttConnect(); // MQTT + _mqttConnect(); // MQTT yield(); // ...and breath } diff --git a/lib/MyESP/MyESP.h b/lib/MyESP/MyESP.h index e91203b3e..4ed582196 100644 --- a/lib/MyESP/MyESP.h +++ b/lib/MyESP/MyESP.h @@ -9,7 +9,7 @@ #ifndef MyEMS_h #define MyEMS_h -#define MYESP_VERSION "1.1.19" +#define MYESP_VERSION "1.1.20" #include #include @@ -335,6 +335,7 @@ class MyESP { ota_callback_f _ota_post_callback; void _ota_setup(); void _OTACallback(); + bool _ota_doing_update; // crash void _eeprom_setup();