From bcfb4e6b1508a489cd61e877fec7ffb6a51367b0 Mon Sep 17 00:00:00 2001 From: "Dr. Torge Valerius" <2878247+cygnusb@users.noreply.github.com> Date: Thu, 7 Nov 2024 15:47:10 +0100 Subject: [PATCH] Add model quirk for Bosch Thermostat II Bat --- .../better_thermostat/model_fixes/BTH-RM.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 custom_components/better_thermostat/model_fixes/BTH-RM.py diff --git a/custom_components/better_thermostat/model_fixes/BTH-RM.py b/custom_components/better_thermostat/model_fixes/BTH-RM.py new file mode 100644 index 00000000..9af5f244 --- /dev/null +++ b/custom_components/better_thermostat/model_fixes/BTH-RM.py @@ -0,0 +1,58 @@ +# Quirks for BTH-RM +import logging +from homeassistant.helpers import device_registry as dr, entity_registry as er + +_LOGGER = logging.getLogger(__name__) + + +def fix_local_calibration(self, entity_id, offset): + return offset + + +def fix_target_temperature_calibration(self, entity_id, temperature): + return temperature + + +async def override_set_hvac_mode(self, entity_id, hvac_mode): + return False + + +async def override_set_temperature(self, entity_id, temperature): + """Bosch room thermostat BTH-RM has a quirk where it needs to set both high + and low temperature, if heat and cool modes are available in newer Z2M versions. + """ + model = self.real_trvs[entity_id]["model"] + if model == "BTH-RM": + _LOGGER.debug( + f"better_thermostat {self.name}: TRV {entity_id} device quirk bth-rm for set_temperature active" + ) + entity_reg = er.async_get(self.hass) + entry = entity_reg.async_get(entity_id) + + hvac_modes = entry.capabilities.get("hvac_modes", []) + + _LOGGER.debug( + f"better_thermostat {self.name}: TRV {entity_id} device quirk bth-rm found hvac_modes {hvac_modes}" + ) + + if entry.platform == "mqtt" and "cool" in hvac_modes and "heat" in hvac_modes: + await self.hass.services.async_call( + "climate", + "set_temperature", + { + "entity_id": entity_id, + "target_temp_high": temperature, + "target_temp_low": temperature, + }, + blocking=True, + context=self.context, + ) + else: + await self.hass.services.async_call( + "climate", + "set_temperature", + {"entity_id": entity_id, "temperature": temperature}, + blocking=True, + context=self.context, + ) + return True