From fefb57eb0a610fdcb51bffba3ac4daa12852977e Mon Sep 17 00:00:00 2001 From: dingausmwald <30699246+dingausmwald@users.noreply.github.com> Date: Wed, 4 Dec 2024 16:14:31 +0100 Subject: [PATCH] Update climate.py Adds climate devices to climate.turn_off and climate.turn_on. Without, google assistant f.e. can't control them anymore since 2024.3. Created with AI. --- custom_components/bosch_shc/climate.py | 47 ++++++++++++++++++++------ 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/custom_components/bosch_shc/climate.py b/custom_components/bosch_shc/climate.py index 063a4fc..cfc79cc 100644 --- a/custom_components/bosch_shc/climate.py +++ b/custom_components/bosch_shc/climate.py @@ -42,10 +42,10 @@ class ClimateControl(SHCEntity, ClimateEntity): _attr_target_temperature_step = 0.5 _attr_supported_features = ( - ClimateEntityFeature.TURN_ON - | ClimateEntityFeature.TURN_OFF + ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.PRESET_MODE - | ClimateEntityFeature.TARGET_TEMPERATURE + | ClimateEntityFeature.TURN_OFF + | ClimateEntityFeature.TURN_ON ) _enable_turn_on_off_backwards_compatibility = False @@ -150,8 +150,11 @@ def preset_modes(self): @property def supported_features(self) -> ClimateEntityFeature: """Return supported features.""" - return ClimateEntityFeature( - ClimateEntityFeature.TARGET_TEMPERATURE + ClimateEntityFeature.PRESET_MODE + return ( + ClimateEntityFeature.TARGET_TEMPERATURE + | ClimateEntityFeature.PRESET_MODE + | ClimateEntityFeature.TURN_OFF + | ClimateEntityFeature.TURN_ON ) def set_temperature(self, **kwargs): @@ -174,7 +177,7 @@ def set_temperature(self, **kwargs): if self.min_temp <= temperature <= self.max_temp: self._device.setpoint_temperature = float(round(temperature * 2.0) / 2.0) - def set_hvac_mode(self, hvac_mode: str): + async def async_set_hvac_mode(self, hvac_mode: str): """Set hvac mode.""" if hvac_mode not in self.hvac_modes: return @@ -182,17 +185,29 @@ def set_hvac_mode(self, hvac_mode: str): return if hvac_mode == HVACMode.AUTO: - self._device.summer_mode = False - self._device.operation_mode = ( + await self.hass.async_add_executor_job( + setattr, self._device, "summer_mode", False + ) + await self.hass.async_add_executor_job( + setattr, + self._device, + "operation_mode", SHCClimateControl.RoomClimateControlService.OperationMode.AUTOMATIC ) if hvac_mode == HVACMode.HEAT: - self._device.summer_mode = False - self._device.operation_mode = ( + await self.hass.async_add_executor_job( + setattr, self._device, "summer_mode", False + ) + await self.hass.async_add_executor_job( + setattr, + self._device, + "operation_mode", SHCClimateControl.RoomClimateControlService.OperationMode.MANUAL ) if hvac_mode == HVACMode.OFF: - self._device.summer_mode = True + await self.hass.async_add_executor_job( + setattr, self._device, "summer_mode", True + ) def set_preset_mode(self, preset_mode: str): """Set preset mode.""" @@ -221,3 +236,13 @@ def set_preset_mode(self, preset_mode: str): if not self._device.low: self._device.low = True + + async def async_turn_on(self) -> None: + """Turn the climate device on.""" + if self.hvac_mode == HVACMode.OFF: + await self.async_set_hvac_mode(HVACMode.HEAT) + + async def async_turn_off(self) -> None: + """Turn the climate device off.""" + if self.hvac_mode != HVACMode.OFF: + await self.async_set_hvac_mode(HVACMode.OFF)