diff --git a/src/HaHelper.h b/src/HaHelper.h index cc087b5..f85436f 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -1153,36 +1153,36 @@ public: return publish(getTopic("button", "restart").c_str(), doc); } - bool publishButtonFaultReset(bool enabledByDefault = true) { + bool publishButtonResetFault(bool enabledByDefault = true) { StaticJsonDocument<1024> doc; doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.fault, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_fault_reset"); - doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_fault_reset"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_reset_fault"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_reset_fault"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("restart"); - doc[FPSTR(HA_NAME)] = F("Fault reset"); + doc[FPSTR(HA_NAME)] = F("Reset fault"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); - doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"faultReset\": true}}"); + doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"resetFault\": true}}"); - return publish(getTopic("button", "fault_reset").c_str(), doc); + return publish(getTopic("button", "reset_fault").c_str(), doc); } - bool publishButtonDiagnosticReset(bool enabledByDefault = true) { + bool publishButtonResetDiagnostic(bool enabledByDefault = true) { StaticJsonDocument<1024> doc; doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.diagnostic, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_diagnostic_reset"); - doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_diagnostic_reset"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_reset_diagnostic"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_reset_diagnostic"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("restart"); - doc[FPSTR(HA_NAME)] = F("Diagnostic reset"); + doc[FPSTR(HA_NAME)] = F("Reset diagnostic"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); - doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"diagnosticReset\": true}}"); + doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"resetDiagnostic\": true}}"); - return publish(getTopic("button", "diagnostic_reset").c_str(), doc); + return publish(getTopic("button", "reset_diagnostic").c_str(), doc); } diff --git a/src/MqttTask.h b/src/MqttTask.h index f2d20df..ee9a9bf 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -147,14 +147,14 @@ protected: } if (!doc["heating"]["maxTemp"].isNull() && doc["heating"]["maxTemp"].is()) { - if (doc["heating"]["maxTemp"].as() > 0 && doc["heating"]["maxTemp"].as() <= 100 && doc["heating"]["maxTemp"].as() > settings.heating.minTemp) { + if (doc["heating"]["maxTemp"].as() > 0 && doc["heating"]["maxTemp"].as() <= 100) { settings.heating.maxTemp = doc["heating"]["maxTemp"].as(); flag = true; } } if (!doc["heating"]["minTemp"].isNull() && doc["heating"]["minTemp"].is()) { - if (doc["heating"]["minTemp"].as() >= 0 && doc["heating"]["minTemp"].as() < 100 && doc["heating"]["minTemp"].as() < settings.heating.maxTemp) { + if (doc["heating"]["minTemp"].as() >= 0 && doc["heating"]["minTemp"].as() < 100) { settings.heating.minTemp = doc["heating"]["minTemp"].as(); flag = true; } @@ -335,12 +335,12 @@ protected: vars.actions.restart = true; } - if (!doc["actions"]["faultReset"].isNull() && doc["actions"]["faultReset"].is() && doc["actions"]["faultReset"].as()) { - vars.actions.faultReset = true; + if (!doc["actions"]["resetFault"].isNull() && doc["actions"]["resetFault"].is() && doc["actions"]["resetFault"].as()) { + vars.actions.resetFault = true; } - if (!doc["actions"]["diagnosticReset"].isNull() && doc["actions"]["diagnosticReset"].is() && doc["actions"]["diagnosticReset"].as()) { - vars.actions.diagnosticReset = true; + if (!doc["actions"]["resetDiagnostic"].isNull() && doc["actions"]["resetDiagnostic"].is() && doc["actions"]["resetDiagnostic"].as()) { + vars.actions.resetDiagnostic = true; } if (flag) { @@ -441,8 +441,8 @@ protected: // buttons haHelper.publishButtonRestart(false); - haHelper.publishButtonFaultReset(); - haHelper.publishButtonDiagnosticReset(); + haHelper.publishButtonResetFault(); + haHelper.publishButtonResetDiagnostic(); } static bool publishNonStaticHaEntities(bool force = false) { @@ -646,8 +646,30 @@ protected: } StaticJsonDocument<2048> doc; - DeserializationError dErr = deserializeJson(doc, (const byte*)payload, length); + DeserializationError dErr = deserializeJson(doc, (const byte*) payload, length); if (dErr != DeserializationError::Ok || doc.isNull()) { + const char* errMsg; + switch (dErr.code()) { + case DeserializationError::EmptyInput: + case DeserializationError::IncompleteInput: + case DeserializationError::InvalidInput: + errMsg = "invalid input"; + break; + + case DeserializationError::NoMemory: + errMsg = "no memory"; + break; + + case DeserializationError::TooDeep: + errMsg = "too deep"; + break; + + default: + errMsg = "failed"; + break; + } + Log.swarningln("MQTT.MSG", "No deserialization: %s", errMsg); + return; } diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 8fa7f9f..f194b37 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -90,34 +90,51 @@ protected: Log.straceln("OT", "Master type: %u, version: %u", vars.parameters.masterType, vars.parameters.masterVersion); Log.straceln("OT", "Slave type: %u, version: %u", vars.parameters.slaveType, vars.parameters.slaveVersion); + // DHW min/max temp if (settings.opentherm.dhwPresent) { if (updateMinMaxDhwTemp()) { if (settings.dhw.minTemp < vars.parameters.dhwMinTemp) { settings.dhw.minTemp = vars.parameters.dhwMinTemp; + Log.snoticeln("OT.DHW", "Updated min temp: %d", settings.dhw.minTemp); } if (settings.dhw.maxTemp > vars.parameters.dhwMaxTemp) { settings.dhw.maxTemp = vars.parameters.dhwMaxTemp; + Log.snoticeln("OT.DHW", "Updated max temp: %d", settings.dhw.maxTemp); } } else { Log.swarningln("OT.DHW", "Failed get min/max temp"); } + + if (settings.dhw.minTemp >= settings.dhw.maxTemp) { + settings.dhw.minTemp = 30; + settings.dhw.maxTemp = 60; + } } + + // Heating min/max temp if (updateMinMaxHeatingTemp()) { if (settings.heating.minTemp < vars.parameters.heatingMinTemp) { settings.heating.minTemp = vars.parameters.heatingMinTemp; + Log.snoticeln("OT.HEATING", "Updated min temp: %d", settings.heating.minTemp); } if (settings.heating.maxTemp > vars.parameters.heatingMaxTemp) { settings.heating.maxTemp = vars.parameters.heatingMaxTemp; + Log.snoticeln("OT.HEATING", "Updated max temp: %d", settings.heating.maxTemp); } } else { Log.swarningln("OT.HEATING", "Failed get min/max temp"); } + if (settings.heating.minTemp >= settings.heating.maxTemp) { + settings.heating.minTemp = 20; + settings.heating.maxTemp = 90; + } + // force setMaxHeatingTemp(settings.heating.maxTemp); @@ -152,7 +169,7 @@ protected: yield(); // fault reset action - if (vars.actions.faultReset) { + if (vars.actions.resetFault) { if (vars.states.fault) { if (ot->sendBoilerReset()) { Log.sinfoln("OT", "Boiler fault reset successfully"); @@ -162,12 +179,12 @@ protected: } } - vars.actions.faultReset = false; + vars.actions.resetFault = false; yield(); } // diag reset action - if (vars.actions.diagnosticReset) { + if (vars.actions.resetDiagnostic) { if (vars.states.diagnostic) { if (ot->sendServiceReset()) { Log.sinfoln("OT", "Boiler diagnostic reset successfully"); @@ -177,7 +194,7 @@ protected: } } - vars.actions.diagnosticReset = false; + vars.actions.resetDiagnostic = false; yield(); } diff --git a/src/Settings.h b/src/Settings.h index ceaa17f..caa49d6 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -125,7 +125,7 @@ struct Variables { struct { bool restart = false; - bool faultReset = false; - bool diagnosticReset = false; + bool resetFault = false; + bool resetDiagnostic = false; } actions; } vars; \ No newline at end of file