Merge branch 'develop' into hotfix/configuration-default-after-ota-success-and-new-firmware-has-change-configuration-param

This commit is contained in:
Phat Nguyen
2024-05-12 10:49:13 +07:00
committed by GitHub
4 changed files with 81 additions and 47 deletions

View File

@ -90,7 +90,6 @@ static LocalServer localServer(Serial, openMetrics, measurements, configuration,
static int pmFailCount = 0; static int pmFailCount = 0;
static uint32_t factoryBtnPressTime = 0; static uint32_t factoryBtnPressTime = 0;
static int getCO2FailCount = 0; static int getCO2FailCount = 0;
static bool offlineMode = false;
static AgFirmwareMode fwMode = FW_MODE_I_9PSL; static AgFirmwareMode fwMode = FW_MODE_I_9PSL;
static bool ledBarButtonTest = false; static bool ledBarButtonTest = false;
@ -175,8 +174,30 @@ void setup() {
} }
} else { } else {
ledBarEnabledUpdate(); ledBarEnabledUpdate();
connectToWifi = true;
} }
/** Show message confirm offline mode. */
oledDisplay.setText(
"Press now for",
configuration.isOfflineMode() ? "online mode" : "offline mode", "");
uint32_t startTime = millis();
while (true) {
if (ag->button.getState() == ag->button.BUTTON_PRESSED) {
configuration.setOfflineMode(!configuration.isOfflineMode());
oledDisplay.setText(
"Offline Mode",
configuration.isOfflineMode() ? " = True" : " = False", "");
delay(1000);
break;
}
uint32_t periodMs = (uint32_t)(millis() - startTime);
if (periodMs >= 3000) {
break;
}
}
connectToWifi = !configuration.isOfflineMode();
} else { } else {
connectToWifi = true; connectToWifi = true;
} }
@ -210,8 +231,6 @@ void setup() {
} else { } else {
ledBarEnabledUpdate(); ledBarEnabledUpdate();
} }
} else {
offlineMode = true;
} }
} }
} }
@ -259,9 +278,9 @@ void loop() {
} }
} }
/** Auto reset external watchdog timer on offline mode and /** Auto reset watchdog timer if offline mode or postDataToAirGradient */
* postDataToAirGradient disabled. */ if (configuration.isOfflineMode() ||
if (offlineMode || (configuration.isPostDataToAirGradient() == false)) { (configuration.isPostDataToAirGradient() == false)) {
watchdogFeedSchedule.run(); watchdogFeedSchedule.run();
} }
@ -612,7 +631,7 @@ static void oneIndoorInit(void) {
} }
/** Run LED test on start up */ /** Run LED test on start up */
oledDisplay.setText("Press now for", "LED test &", "offline mode"); oledDisplay.setText("Press now for", "LED test", "");
ledBarButtonTest = false; ledBarButtonTest = false;
uint32_t stime = millis(); uint32_t stime = millis();
while (true) { while (true) {

View File

@ -42,6 +42,7 @@ 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(lastOta);
JSON_PROP_DEF(offlineMode);
#define jprop_model_default "" #define jprop_model_default ""
#define jprop_country_default "" #define jprop_country_default ""
@ -58,6 +59,7 @@ JSON_PROP_DEF(lastOta);
#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_lastOta_default 0
#define jprop_offlineMode_default false
JSONVar jconfig; JSONVar jconfig;
@ -163,6 +165,8 @@ 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[lastOta] = jprop_lastOta_default;
jconfig[jprop_offlineMode] = jprop_offlineMode_default;
saveConfig(); saveConfig();
} }
@ -1105,6 +1109,15 @@ void Configuration::toConfig(const char *buf) {
logInfo("toConfig: displayBrightness changed"); logInfo("toConfig: displayBrightness changed");
} }
if (JSON.typeof_(jconfig[jprop_offlineMode]) != "boolean") {
isInvalid = true;
} else {
isInvalid = false;
}
if (isInvalid) {
jconfig[jprop_offlineMode] = false;
}
/** Last OTA */ /** Last OTA */
if(JSON.typeof_(jconfig[jprop_lastOta]) != "number") { if(JSON.typeof_(jconfig[jprop_lastOta]) != "number") {
isInvalid = true; isInvalid = true;
@ -1178,6 +1191,17 @@ int Configuration::getDisplayBrightness(void) {
return value; return value;
} }
bool Configuration::isOfflineMode(void) {
bool offline = jconfig[jprop_offlineMode];
return offline;
}
void Configuration::setOfflineMode(bool offline) {
logInfo("Set offline mode: " + String(offline ? "True" : "False"));
jconfig[jprop_offlineMode] = offline;
saveConfig();
}
bool Configuration::isDisplayBrightnessChanged(void) { bool Configuration::isDisplayBrightnessChanged(void) {
bool changed = displayBrightnessChanged; bool changed = displayBrightnessChanged;
displayBrightnessChanged = false; displayBrightnessChanged = false;

View File

@ -78,6 +78,8 @@ public:
int getLastOta(void); int getLastOta(void);
void updateLastOta(void); void updateLastOta(void);
String newFirmwareVersion(void); String newFirmwareVersion(void);
bool isOfflineMode(void);
void setOfflineMode(bool offline);
}; };
#endif /** _AG_CONFIG_H_ */ #endif /** _AG_CONFIG_H_ */

View File

@ -63,10 +63,10 @@ void StateMachine::sensorhandleLeds(void) {
*/ */
void StateMachine::co2handleLeds(void) { void StateMachine::co2handleLeds(void) {
int co2Value = value.CO2; int co2Value = value.CO2;
if (co2Value <= 400) { if (co2Value <= 600) {
/** G; 1 */ /** G; 1 */
ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1);
} else if (co2Value <= 700) { } else if (co2Value <= 800) {
/** GG; 2 */ /** GG; 2 */
ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 2);
@ -75,20 +75,20 @@ void StateMachine::co2handleLeds(void) {
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 2);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 3); ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 3);
} else if (co2Value <= 1333) { } else if (co2Value <= 1250) {
/** YYYY; 4 */ /** OOOO; 4 */
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 2);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 3); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 3);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 4); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 4);
} else if (co2Value <= 1666) { } else if (co2Value <= 1500) {
/** YYYYY; 5 */ /** OOOOO; 5 */
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 2);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 3); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 3);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 4); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 4);
ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 5); ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 5);
} else if (co2Value <= 2000) { } else if (co2Value <= 1750) {
/** RRRRRR; 6 */ /** RRRRRR; 6 */
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2);
@ -96,7 +96,7 @@ void StateMachine::co2handleLeds(void) {
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 4); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 4);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6);
} else if (co2Value <= 2666) { } else if (co2Value <= 2000) {
/** RRRRRRR; 7 */ /** RRRRRRR; 7 */
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2);
@ -105,28 +105,17 @@ void StateMachine::co2handleLeds(void) {
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 7); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 7);
} else if (co2Value <= 3333) { } else if (co2Value <= 3000) {
/** RRRRRRRR; 8 */ /** PPPPPPPP; 8 */
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 2);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 3); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 3);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 4); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 4);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 5);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 6);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 7); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 7);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 8); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 8);
} else if (co2Value <= 4000) { } else { /** > 3000 */
/** RRRRRRRRR; 9 */
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 3);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 4);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 5);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 7);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 8);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 9);
} else { /** > 4000 */
/* PRPRPRPRP; 9 */ /* PRPRPRPRP; 9 */
ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 1);
ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2);