From 3201fd8d9c02a6133cac3d04543119af062359ed Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 17:43:42 +0700 Subject: [PATCH 1/3] Fix: Configuratoin failed response mesasge and failed condition handle. --- src/AgConfigure.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index dfccdc6..f3dd511 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -411,6 +411,7 @@ bool Configuration::parse(String data, bool isLocal) { changed = true; } } else { + failedMessage = jsonValueInvalidMessage(String(jprop_displayMode), mode); jsonInvalid(); return false; @@ -503,10 +504,16 @@ bool Configuration::parse(String data, bool isLocal) { if (JSON.typeof_(root[jprop_mqttBrokerUrl]) == "string") { String broker = root[jprop_mqttBrokerUrl]; String oldBroker = jconfig[jprop_mqttBrokerUrl]; - if (broker != oldBroker) { - changed = true; - configLogInfo(String(jprop_mqttBrokerUrl), oldBroker, broker); - jconfig[jprop_mqttBrokerUrl] = broker; + if (broker.length() <= 255) { + if (broker != oldBroker) { + changed = true; + configLogInfo(String(jprop_mqttBrokerUrl), oldBroker, broker); + jconfig[jprop_mqttBrokerUrl] = broker; + } + } else { + failedMessage = "\"mqttBrokerUrl\" length should <= 255"; + jsonInvalid(); + return false; } } else { if (jsonTypeInvalid(root[jprop_mqttBrokerUrl], "string")) { @@ -528,7 +535,7 @@ bool Configuration::parse(String data, bool isLocal) { configLogInfo(String(jprop_temperatureUnit), oldUnit, unit); } } else { - jsonValueInvalidMessage(String(jprop_temperatureUnit), unit); + failedMessage = jsonValueInvalidMessage(String(jprop_temperatureUnit), unit); jsonInvalid(); return false; } From 5cb838af29331ce9c407a54c031bf19c1a9c7203 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 18:11:46 +0700 Subject: [PATCH 2/3] fix: OpenAir send incorrect model(firmware mode) --- examples/OneOpenAir/LocalServer.cpp | 6 +++++- src/AgConfigure.cpp | 14 ++++++++++++++ src/AgConfigure.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/examples/OneOpenAir/LocalServer.cpp b/examples/OneOpenAir/LocalServer.cpp index 96adab0..1b88e8e 100644 --- a/examples/OneOpenAir/LocalServer.cpp +++ b/examples/OneOpenAir/LocalServer.cpp @@ -39,7 +39,11 @@ String LocalServer::getHostname(void) { void LocalServer::_handle(void) { server.handleClient(); } void LocalServer::_GET_config(void) { - server.send(200, "application/json", config.toString()); + if(ag->isOne()) { + server.send(200, "application/json", config.toString()); + } else { + server.send(200, "application/json", config.toString(fwMode)); + } } void LocalServer::_PUT_config(void) { diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index f3dd511..e947bef 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -672,6 +672,20 @@ bool Configuration::parse(String data, bool isLocal) { */ String Configuration::toString(void) { return JSON.stringify(jconfig); } +/** + * @brief Get current configuration value as JSON string + * + * @param fwMode Firmware mode value + * @return String + */ +String Configuration::toString(AgFirmwareMode fwMode) { + String model = jconfig[jprop_model]; + jconfig[jprop_model] = AgFirmwareModeName(fwMode); + String value = toString(); + jconfig[jprop_model] = model; + return value; +} + /** * @brief Temperature unit (F or C) * diff --git a/src/AgConfigure.h b/src/AgConfigure.h index 3b859ee..6a3bb0b 100644 --- a/src/AgConfigure.h +++ b/src/AgConfigure.h @@ -47,6 +47,7 @@ public: bool begin(void); bool parse(String data, bool isLocal); String toString(void); + String toString(AgFirmwareMode fwMode); bool isTemperatureUnitInF(void); String getCountry(void); bool isPmStandardInUSAQI(void); From 4612f4b7935fdc064a499ac6df021ae5921381c0 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Mon, 13 May 2024 19:00:34 +0700 Subject: [PATCH 3/3] Add condition to handle configuration changed. --- examples/OneOpenAir/OneOpenAir.ino | 66 ++++++++++++++++-------------- src/AgStateMachine.cpp | 3 ++ 2 files changed, 39 insertions(+), 30 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 876d667..ca18519 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -795,9 +795,11 @@ static void configUpdateHandle() { return; } - ledBarEnabledUpdate(); + if (ag->isOne()) { + ledBarEnabledUpdate(); + stateMachine.executeLedBarTest(); + } stateMachine.executeCo2Calibration(); - stateMachine.executeLedBarTest(); String mqttUri = configuration.getMqttBrokerUri(); if (mqttClient.isCurrentUri(mqttUri) == false) { @@ -805,38 +807,42 @@ static void configUpdateHandle() { initMqtt(); } - if (configuration.noxLearnOffsetChanged() || - configuration.tvocLearnOffsetChanged()) { - ag->sgp41.end(); + if (configuration.hasSensorSGP) { + if (configuration.noxLearnOffsetChanged() || + configuration.tvocLearnOffsetChanged()) { + ag->sgp41.end(); - int oldTvocOffset = ag->sgp41.getTvocLearningOffset(); - int oldNoxOffset = ag->sgp41.getNoxLearningOffset(); - bool result = sgp41Init(); - const char *resultStr = "successful"; - if (!result) { - resultStr = "failure"; - } - if (oldTvocOffset != configuration.getTvocLearningOffset()) { - Serial.printf("Setting tvocLearningOffset from %d to %d hours %s\r\n", - oldTvocOffset, configuration.getTvocLearningOffset(), - resultStr); - } - if (oldNoxOffset != configuration.getNoxLearningOffset()) { - Serial.printf("Setting noxLearningOffset from %d to %d hours %s\r\n", - oldNoxOffset, configuration.getNoxLearningOffset(), - resultStr); + int oldTvocOffset = ag->sgp41.getTvocLearningOffset(); + int oldNoxOffset = ag->sgp41.getNoxLearningOffset(); + bool result = sgp41Init(); + const char *resultStr = "successful"; + if (!result) { + resultStr = "failure"; + } + if (oldTvocOffset != configuration.getTvocLearningOffset()) { + Serial.printf("Setting tvocLearningOffset from %d to %d hours %s\r\n", + oldTvocOffset, configuration.getTvocLearningOffset(), + resultStr); + } + if (oldNoxOffset != configuration.getNoxLearningOffset()) { + Serial.printf("Setting noxLearningOffset from %d to %d hours %s\r\n", + oldNoxOffset, configuration.getNoxLearningOffset(), + resultStr); + } } } - if (configuration.isLedBarBrightnessChanged()) { - ag->ledBar.setBrighness(configuration.getLedBarBrightness()); - Serial.println("Set 'LedBarBrightness' brightness: " + - String(configuration.getLedBarBrightness())); - } - if (configuration.isDisplayBrightnessChanged()) { - oledDisplay.setBrightness(configuration.getDisplayBrightness()); - Serial.println("Set 'DisplayBrightness' brightness: " + - String(configuration.getDisplayBrightness())); + if (ag->isOne()) { + if (configuration.isLedBarBrightnessChanged()) { + ag->ledBar.setBrighness(configuration.getLedBarBrightness()); + Serial.println("Set 'LedBarBrightness' brightness: " + + String(configuration.getLedBarBrightness())); + } + if (configuration.isDisplayBrightnessChanged()) { + oledDisplay.setBrightness(configuration.getDisplayBrightness()); + Serial.println("Set 'DisplayBrightness' brightness: " + + String(configuration.getDisplayBrightness())); + } } fwNewVersion = configuration.newFirmwareVersion(); diff --git a/src/AgStateMachine.cpp b/src/AgStateMachine.cpp index 6ee296d..6c94198 100644 --- a/src/AgStateMachine.cpp +++ b/src/AgStateMachine.cpp @@ -394,6 +394,9 @@ StateMachine::~StateMachine() {} void StateMachine::displayHandle(AgStateMachineState state) { // Ignore handle if not ONE_INDOOR board if (!ag->isOne()) { + if (state == AgStateMachineCo2Calibration) { + co2Calibration(); + } return; }