From c95a19eb4279185d04e9528377874eb1d9a8f622 Mon Sep 17 00:00:00 2001 From: Yurii Date: Tue, 5 Dec 2023 19:52:57 +0300 Subject: [PATCH] fix current temperature in climate.heating entity --- src/HaHelper.h | 18 ++++++++++++++---- src/MqttTask.h | 11 +++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/HaHelper.h b/src/HaHelper.h index cdffcd6..03865ac 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -3,6 +3,9 @@ class HaHelper : public HomeAssistantHelper { public: + static const byte TEMP_SOURCE_HEATING = 0; + static const byte TEMP_SOURCE_INDOOR = 1; + HaHelper(PubSubClient& client) : HomeAssistantHelper(client) {} bool publishSelectOutdoorSensorType(bool enabledByDefault = true) { @@ -1078,7 +1081,7 @@ public: } - bool publishClimateHeating(byte minTemp = 20, byte maxTemp = 90, bool enabledByDefault = true) { + bool publishClimateHeating(byte minTemp = 20, byte maxTemp = 90, byte currentTempSource = HaHelper::TEMP_SOURCE_HEATING, bool enabledByDefault = true) { StaticJsonDocument<2560> doc; doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_TOPIC)] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; @@ -1087,9 +1090,16 @@ public: doc[FPSTR(HA_NAME)] = F("Heating"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[FPSTR(HA_CURRENT_TEMPERATURE_TOPIC)] = devicePrefix + F("/state"); - doc[FPSTR(HA_CURRENT_TEMPERATURE_TEMPLATE)] = F("{% if value_json.temperatures.indoor|float(0) != 0 %}{{ value_json.temperatures.indoor|float(0)|round(2) }}" - "{% else %}{{ value_json.temperatures.heating|float(0)|round(2) }}{% endif %}"); + if (currentTempSource == HaHelper::TEMP_SOURCE_HEATING || currentTempSource == HaHelper::TEMP_SOURCE_INDOOR) { + doc[FPSTR(HA_CURRENT_TEMPERATURE_TOPIC)] = devicePrefix + F("/state"); + } + + if (currentTempSource == HaHelper::TEMP_SOURCE_HEATING) { + doc[FPSTR(HA_CURRENT_TEMPERATURE_TEMPLATE)] = F("{{ value_json.temperatures.heating|float(0)|round(2) }}"); + + } else if (currentTempSource == HaHelper::TEMP_SOURCE_INDOOR) { + doc[FPSTR(HA_CURRENT_TEMPERATURE_TEMPLATE)] = F("{{ value_json.temperatures.indoor|float(0)|round(2) }}"); + } doc[FPSTR(HA_TEMPERATURE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_TEMPERATURE_COMMAND_TEMPLATE)] = F("{\"heating\": {\"target\" : {{ value }}}}"); diff --git a/src/MqttTask.h b/src/MqttTask.h index e7588b9..0048f41 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -461,7 +461,7 @@ protected: bool publishNonStaticHaEntities(bool force = false) { static byte _heatingMinTemp, _heatingMaxTemp, _dhwMinTemp, _dhwMaxTemp; - static bool _editableOutdoorTemp, _editableIndoorTemp, _dhwPresent; + static bool _isStupidMode, _editableOutdoorTemp, _editableIndoorTemp, _dhwPresent; bool published = false; bool isStupidMode = !settings.pid.enable && !settings.equitherm.enable; @@ -506,9 +506,16 @@ protected: _heatingMinTemp = heatingMinTemp; _heatingMaxTemp = heatingMaxTemp; + _isStupidMode = isStupidMode; haHelper.publishNumberHeatingTarget(heatingMinTemp, heatingMaxTemp, false); - haHelper.publishClimateHeating(heatingMinTemp, heatingMaxTemp); + haHelper.publishClimateHeating(heatingMinTemp, heatingMaxTemp, isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR); + + published = true; + + } else if (_isStupidMode != isStupidMode) { + _isStupidMode = isStupidMode; + haHelper.publishClimateHeating(heatingMinTemp, heatingMaxTemp, isStupidMode ? HaHelper::TEMP_SOURCE_HEATING : HaHelper::TEMP_SOURCE_INDOOR); published = true; }