Merge pull request #124 from airgradienthq/hotfix/configuration-handle

Configuration failed response message and failed condition handle.
This commit is contained in:
Phat Nguyen
2024-05-13 20:39:45 +07:00
committed by GitHub
5 changed files with 71 additions and 36 deletions

View File

@ -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) {

View File

@ -804,9 +804,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) {
@ -814,38 +816,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();

View File

@ -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;
}
@ -665,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)
*

View File

@ -48,6 +48,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);

View File

@ -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;
}