Change the OTA update period use timestamp to bootCount

This commit is contained in:
Phat Nguyen
2024-05-15 17:09:06 +07:00
parent a71c038864
commit 563bdfe4b2
5 changed files with 17 additions and 75 deletions

View File

@ -856,13 +856,23 @@ static void configUpdateHandle() {
fwNewVersion = configuration.newFirmwareVersion(); fwNewVersion = configuration.newFirmwareVersion();
if (fwNewVersion.length()) { if (fwNewVersion.length()) {
int lastOta = configuration.getLastOta(); bool doOta = false;
if (lastOta != 0 && lastOta < (60 * 60 * 24)) { if (measurements.otaBootCount == 0) {
Serial.println("Ignore OTA cause last update is " + String(lastOta) + doOta = true;
String("sec")); Serial.println("First OTA");
Serial.println("Retry again after 24h");
} else { } else {
configuration.updateLastOta(); if ((measurements.bootCount - measurements.otaBootCount) >= 30) {
doOta = true;
} else {
Serial.println(
"OTA ignore, try again next " +
String(30 - (measurements.bootCount - measurements.otaBootCount)) +
String(" boots"));
}
}
if (doOta) {
measurements.otaBootCount = measurements.bootCount;
otaHandler.setHandlerCallback(otaHandlerCallback); otaHandler.setHandlerCallback(otaHandlerCallback);
otaHandler.updateFirmwareIfOutdated(ag->deviceId()); otaHandler.updateFirmwareIfOutdated(ag->deviceId());
} }

View File

@ -40,7 +40,6 @@ JSON_PROP_DEF(ledBarBrightness);
JSON_PROP_DEF(displayBrightness); JSON_PROP_DEF(displayBrightness);
JSON_PROP_DEF(co2CalibrationRequested); JSON_PROP_DEF(co2CalibrationRequested);
JSON_PROP_DEF(ledBarTestRequested); JSON_PROP_DEF(ledBarTestRequested);
JSON_PROP_DEF(lastOta);
JSON_PROP_DEF(offlineMode); JSON_PROP_DEF(offlineMode);
#define jprop_model_default "" #define jprop_model_default ""
@ -56,7 +55,6 @@ JSON_PROP_DEF(offlineMode);
#define jprop_postDataToAirGradient_default true #define jprop_postDataToAirGradient_default true
#define jprop_ledBarBrightness_default 100 #define jprop_ledBarBrightness_default 100
#define jprop_displayBrightness_default 100 #define jprop_displayBrightness_default 100
#define jprop_lastOta_default 0
#define jprop_offlineMode_default false #define jprop_offlineMode_default false
JSONVar jconfig; JSONVar jconfig;
@ -162,7 +160,6 @@ void Configuration::defaultConfig(void) {
jconfig[jprop_noxLearningOffset] = jprop_noxLearningOffset_default; jconfig[jprop_noxLearningOffset] = jprop_noxLearningOffset_default;
jconfig[jprop_abcDays] = jprop_abcDays_default; jconfig[jprop_abcDays] = jprop_abcDays_default;
jconfig[jprop_model] = jprop_model_default; jconfig[jprop_model] = jprop_model_default;
jconfig[jprop_lastOta] = jprop_lastOta_default;
jconfig[jprop_offlineMode] = jprop_offlineMode_default; jconfig[jprop_offlineMode] = jprop_offlineMode_default;
saveConfig(); saveConfig();
@ -1073,17 +1070,6 @@ void Configuration::toConfig(const char *buf) {
jconfig[jprop_offlineMode] = false; jconfig[jprop_offlineMode] = false;
} }
/** Last OTA */
if(JSON.typeof_(jconfig[jprop_lastOta]) != "number") {
isInvalid = true;
} else {
isInvalid = false;
}
if(isInvalid) {
jconfig[jprop_lastOta] = jprop_lastOta_default;
changed = true;
}
if (changed) { if (changed) {
saveConfig(); saveConfig();
} }
@ -1167,53 +1153,6 @@ bool Configuration::isDisplayBrightnessChanged(void) {
return changed; return changed;
} }
/**
* @brief Get number of sec from last OTA
*
* @return int < 0 is invalid, 0 mean there is no OTA trigger.
*/
int Configuration::getLastOta(void) {
struct tm timeInfo;
if (getLocalTime(&timeInfo) == false) {
logError("Get localtime failed");
return -1;
}
int curYear = timeInfo.tm_year + 1900;
if (curYear < 2024) {
logError("Current year " + String(curYear) + String(" invalid"));
return -1;
}
double _t = jconfig[jprop_lastOta];
time_t lastOta = (time_t)_t;
time_t curTime = mktime(&timeInfo);
logInfo("Last ota time: " + String(lastOta));
if (lastOta == 0) {
return 0;
}
int sec = curTime - lastOta;
logInfo("Last ota secconds: " + String(sec));
return sec;
}
void Configuration::updateLastOta(void) {
struct tm timeInfo;
if (getLocalTime(&timeInfo) == false) {
logError("updateLastOta: Get localtime failed");
return;
}
int curYear = timeInfo.tm_year + 1900;
if (curYear < 2024) {
logError("updateLastOta: lolcal time invalid");
return;
}
time_t lastOta = mktime(&timeInfo);
jconfig[jprop_lastOta] = (unsigned long)lastOta;
logInfo("Last OTA: " + String(lastOta));
saveConfig();
}
String Configuration::newFirmwareVersion(void) { String Configuration::newFirmwareVersion(void) {
String newFw = otaNewFirmwareVersion; String newFw = otaNewFirmwareVersion;
otaNewFirmwareVersion = String(""); otaNewFirmwareVersion = String("");

View File

@ -76,8 +76,6 @@ public:
int getLedBarBrightness(void); int getLedBarBrightness(void);
bool isDisplayBrightnessChanged(void); bool isDisplayBrightnessChanged(void);
int getDisplayBrightness(void); int getDisplayBrightness(void);
int getLastOta(void);
void updateLastOta(void);
String newFirmwareVersion(void); String newFirmwareVersion(void);
bool isOfflineMode(void); bool isOfflineMode(void);
void setOfflineMode(bool offline); void setOfflineMode(bool offline);

View File

@ -69,6 +69,7 @@ public:
int countPosition; int countPosition;
const int targetCount = 20; const int targetCount = 20;
int bootCount; int bootCount;
int otaBootCount;
String toString(bool isLocal, AgFirmwareMode fwMode, int rssi, void* _ag, void* _config); String toString(bool isLocal, AgFirmwareMode fwMode, int rssi, void* _ag, void* _config);
}; };

View File

@ -1,6 +1,5 @@
#include "AgWiFiConnector.h" #include "AgWiFiConnector.h"
#include "Libraries/WiFiManager/WiFiManager.h" #include "Libraries/WiFiManager/WiFiManager.h"
#include <time.h>
#define WIFI_CONNECT_COUNTDOWN_MAX 180 #define WIFI_CONNECT_COUNTDOWN_MAX 180
#define WIFI_HOTSPOT_PASSWORD_DEFAULT "cleanair" #define WIFI_HOTSPOT_PASSWORD_DEFAULT "cleanair"
@ -159,11 +158,6 @@ bool WifiConnector::connect(void) {
config.setPostToAirGradient(result != "T"); config.setPostToAirGradient(result != "T");
} }
hasPortalConfig = false; hasPortalConfig = false;
/** Configure internet time */
const char *ntp_server = "pool.ntp.org";
configTime(0, 0, ntp_server);
logInfo("Set internet time server: " + String(ntp_server));
} }
#else #else
_wifiProcess(); _wifiProcess();