diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 691c7e1..a39df2d 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -193,6 +193,7 @@ void setup() { /** Initialize local configure */ configuration.begin(); + configuration.setConfigurationUpdatedCallback(configUpdateHandle); /** Init I2C */ Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN); @@ -369,9 +370,6 @@ void loop() { /** factory reset handle */ factoryConfigReset(); - - /** check that local configuration changed then do some action */ - configUpdateHandle(); } static void co2Update(void) { @@ -1074,8 +1072,8 @@ static void configurationUpdateSchedule(void) { } std::string config = agClient->httpFetchConfig(); - if (agClient->isLastFetchConfigSucceed() && configuration.parse(config.c_str(), false)) { - configUpdateHandle(); + if (agClient->isLastFetchConfigSucceed()) { + configuration.parse(config.c_str(), false); } } @@ -1084,7 +1082,9 @@ static void configUpdateHandle() { return; } - stateMachine.executeCo2Calibration(); + if (configuration.isCo2CalibrationRequested()) { + stateMachine.executeCo2Calibration(); + } String mqttUri = configuration.getMqttBrokerUri(); if (mqttClient.isCurrentUri(mqttUri) == false) { diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index 1f9b87c..9cb2f08 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -456,6 +456,10 @@ bool Configuration::begin(void) { return true; } +void Configuration::setConfigurationUpdatedCallback(ConfigurationUpdatedCallback_t callback) { + _callback = callback; +} + /** * @brief Parse JSON configura string to local configure * @@ -955,6 +959,7 @@ bool Configuration::parse(String data, bool isLocal) { updated = true; saveConfig(); printConfig(); + _callback(); } else { if (ledBarTestRequested || co2CalibrationRequested) { updated = true; diff --git a/src/AgConfigure.h b/src/AgConfigure.h index 49785d4..c6cc016 100644 --- a/src/AgConfigure.h +++ b/src/AgConfigure.h @@ -70,6 +70,9 @@ public: bool hasSensorSGP = true; bool hasSensorSHT = true; + typedef void (*ConfigurationUpdatedCallback_t)(); + void setConfigurationUpdatedCallback(ConfigurationUpdatedCallback_t callback); + bool begin(void); bool parse(String data, bool isLocal); String toString(void); @@ -116,6 +119,8 @@ public: PMCorrection getPMCorrection(void); TempHumCorrection getTempCorrection(void); TempHumCorrection getHumCorrection(void); +private: + ConfigurationUpdatedCallback_t _callback; }; #endif /** _AG_CONFIG_H_ */