From da6326db0fded87110163d7fc93f200afe6e202d Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Thu, 9 May 2024 14:32:42 +0700 Subject: [PATCH 1/3] Add display ask for offline/online mode --- examples/OneOpenAir/OneOpenAir.ino | 35 +++++++++++++++++++++++------- src/AgConfigure.cpp | 22 +++++++++++++++++++ src/AgConfigure.h | 2 ++ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 2f29ee8..189b1ee 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -89,7 +89,6 @@ static LocalServer localServer(Serial, openMetrics, measurements, configuration, static int pmFailCount = 0; static uint32_t factoryBtnPressTime = 0; static int getCO2FailCount = 0; -static bool offlineMode = false; static AgFirmwareMode fwMode = FW_MODE_I_9PSL; static bool ledBarButtonTest = false; @@ -165,8 +164,30 @@ void setup() { stateMachine.executeLedBarPowerUpTest(); } else { ledBarEnabledUpdate(); - connectToWifi = true; } + + /** Show message confirm offline mode. */ + oledDisplay.setText( + "Press now for", + configuration.isOfflineMode() ? "online mode" : "offline mode", ""); + uint32_t stime = 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 ms = (uint32_t)(millis() - stime); + if (ms >= 3000) { + break; + } + } + connectToWifi = !configuration.isOfflineMode(); + } else { connectToWifi = true; } @@ -200,8 +221,6 @@ void setup() { } else { ledBarEnabledUpdate(); } - } else { - offlineMode = true; } } } @@ -249,9 +268,9 @@ void loop() { } } - /** Auto reset external watchdog timer on offline mode and - * postDataToAirGradient disabled. */ - if (offlineMode || (configuration.isPostDataToAirGradient() == false)) { + /** Auto reset watchdog timer if offline mode or postDataToAirGradient */ + if (configuration.isOfflineMode() || + (configuration.isPostDataToAirGradient() == false)) { watchdogFeedSchedule.run(); } @@ -528,7 +547,7 @@ static void oneIndoorInit(void) { } /** Run LED test on start up */ - oledDisplay.setText("Press now for", "LED test &", "offline mode"); + oledDisplay.setText("Press now for", "LED test", ""); ledBarButtonTest = false; uint32_t stime = millis(); while (true) { diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index 8b642fd..8ade2c3 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -40,6 +40,7 @@ JSON_PROP_DEF(ledbarBrightness); JSON_PROP_DEF(displayBrightness); JSON_PROP_DEF(co2CalibrationRequested); JSON_PROP_DEF(ledBarTestRequested); +JSON_PROP_DEF(offlineMode); JSONVar jconfig; static bool jsonTypeInvalid(JSONVar root, String validType) { @@ -145,6 +146,7 @@ void Configuration::defaultConfig(void) { jconfig[jprop_noxLearningOffset] = 12; jconfig[jprop_abcDays] = 8; jconfig[jprop_model] = ""; + jconfig[jprop_offlineMode] = false; saveConfig(); } @@ -1077,6 +1079,15 @@ void Configuration::toConfig(const char *buf) { logInfo("toConfig: displayBrightness changed"); } + if (JSON.typeof_(jconfig[jprop_offlineMode]) != "boolean") { + isInvalid = true; + } else { + isInvalid = false; + } + if (isInvalid) { + jconfig[jprop_offlineMode] = false; + } + if (changed) { saveConfig(); } @@ -1139,6 +1150,17 @@ int Configuration::getDisplayBrightness(void) { 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 changed = displayBrightnessChanged; displayBrightnessChanged = false; diff --git a/src/AgConfigure.h b/src/AgConfigure.h index 1b254ad..bb57a67 100644 --- a/src/AgConfigure.h +++ b/src/AgConfigure.h @@ -74,6 +74,8 @@ public: int getLedBarBrightness(void); bool isDisplayBrightnessChanged(void); int getDisplayBrightness(void); + bool isOfflineMode(void); + void setOfflineMode(bool offline); }; #endif /** _AG_CONFIG_H_ */ From a3c9727b02dca54cc6caab74c31073ec2951bad4 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Fri, 10 May 2024 07:19:11 +0700 Subject: [PATCH 2/3] Update variable a descriptive name --- examples/OneOpenAir/OneOpenAir.ino | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index deb440a..198bc0e 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -180,7 +180,7 @@ void setup() { oledDisplay.setText( "Press now for", configuration.isOfflineMode() ? "online mode" : "offline mode", ""); - uint32_t stime = millis(); + uint32_t startTime = millis(); while (true) { if (ag->button.getState() == ag->button.BUTTON_PRESSED) { configuration.setOfflineMode(!configuration.isOfflineMode()); @@ -191,8 +191,8 @@ void setup() { delay(1000); break; } - uint32_t ms = (uint32_t)(millis() - stime); - if (ms >= 3000) { + uint32_t periodMs = (uint32_t)(millis() - startTime); + if (periodMs >= 3000) { break; } } From 1bcb9bf5eed663dbefe4273f94cfc716c1ba11bc Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Sat, 11 May 2024 19:29:02 +0700 Subject: [PATCH 3/3] Adjust CO2 Colors and Ranges --- src/AgStateMachine.cpp | 67 ++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 39 deletions(-) diff --git a/src/AgStateMachine.cpp b/src/AgStateMachine.cpp index ac8d51c..6ee296d 100644 --- a/src/AgStateMachine.cpp +++ b/src/AgStateMachine.cpp @@ -63,10 +63,10 @@ void StateMachine::sensorhandleLeds(void) { */ void StateMachine::co2handleLeds(void) { int co2Value = value.CO2; - if (co2Value <= 400) { + if (co2Value <= 600) { /** G; 1 */ ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1); - } else if (co2Value <= 700) { + } else if (co2Value <= 800) { /** GG; 2 */ ag->ledBar.setColor(0, 255, 0, ag->ledBar.getNumberOfLeds() - 1); 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() - 2); ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 3); - } else if (co2Value <= 1333) { - /** YYYY; 4 */ - 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() - 3); - ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 4); - } else if (co2Value <= 1666) { - /** YYYYY; 5 */ - 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() - 3); - ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 4); - ag->ledBar.setColor(255, 255, 0, ag->ledBar.getNumberOfLeds() - 5); - } else if (co2Value <= 2000) { + } else if (co2Value <= 1250) { + /** OOOO; 4 */ + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 1); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 2); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 3); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 4); + } else if (co2Value <= 1500) { + /** OOOOO; 5 */ + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 1); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 2); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 3); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 4); + ag->ledBar.setColor(255, 165, 0, ag->ledBar.getNumberOfLeds() - 5); + } else if (co2Value <= 1750) { /** RRRRRR; 6 */ ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1); 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() - 5); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 6); - } else if (co2Value <= 2666) { + } else if (co2Value <= 2000) { /** RRRRRRR; 7 */ ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 1); 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() - 6); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 7); - } else if (co2Value <= 3333) { - /** RRRRRRRR; 8 */ - 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); - } else if (co2Value <= 4000) { - /** 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 */ + } else if (co2Value <= 3000) { + /** PPPPPPPP; 8 */ + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 1); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 2); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 3); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 4); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 5); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 6); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 7); + ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 8); + } else { /** > 3000 */ /* PRPRPRPRP; 9 */ ag->ledBar.setColor(153, 153, 0, ag->ledBar.getNumberOfLeds() - 1); ag->ledBar.setColor(255, 0, 0, ag->ledBar.getNumberOfLeds() - 2);