diff --git a/homeassistant/components/airzone/climate.py b/homeassistant/components/airzone/climate.py index 764beddd433..fda007cdc82 100644 --- a/homeassistant/components/airzone/climate.py +++ b/homeassistant/components/airzone/climate.py @@ -5,11 +5,16 @@ from typing import Any, Final from aioairzone.common import OperationAction, OperationMode from aioairzone.const import ( + API_COOL_SET_POINT, + API_HEAT_SET_POINT, API_MODE, API_ON, API_SET_POINT, API_SPEED, AZD_ACTION, + AZD_COOL_TEMP_SET, + AZD_DOUBLE_SET_POINT, + AZD_HEAT_TEMP_SET, AZD_HUMIDITY, AZD_MASTER, AZD_MODE, @@ -27,6 +32,8 @@ from aioairzone.const import ( ) from homeassistant.components.climate import ( + ATTR_TARGET_TEMP_HIGH, + ATTR_TARGET_TEMP_LOW, FAN_AUTO, FAN_HIGH, FAN_LOW, @@ -137,6 +144,10 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity): and self.get_airzone_value(AZD_SPEEDS) is not None ): self._set_fan_speeds() + if self.get_airzone_value(AZD_DOUBLE_SET_POINT): + self._attr_supported_features |= ( + ClimateEntityFeature.TARGET_TEMPERATURE_RANGE + ) self._async_update_attrs() @@ -201,9 +212,12 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity): async def async_set_temperature(self, **kwargs: Any) -> None: """Set new target temperature.""" - params = { - API_SET_POINT: kwargs.get(ATTR_TEMPERATURE), - } + params = {} + if ATTR_TEMPERATURE in kwargs: + params[API_SET_POINT] = kwargs[ATTR_TEMPERATURE] + if ATTR_TARGET_TEMP_LOW in kwargs and ATTR_TARGET_TEMP_HIGH in kwargs: + params[API_COOL_SET_POINT] = kwargs[ATTR_TARGET_TEMP_LOW] + params[API_HEAT_SET_POINT] = kwargs[ATTR_TARGET_TEMP_HIGH] await self._async_update_hvac_params(params) @callback @@ -229,3 +243,10 @@ class AirzoneClimate(AirzoneZoneEntity, ClimateEntity): self._attr_target_temperature = self.get_airzone_value(AZD_TEMP_SET) if self.supported_features & ClimateEntityFeature.FAN_MODE: self._attr_fan_mode = self._speeds.get(self.get_airzone_value(AZD_SPEED)) + if self.supported_features & ClimateEntityFeature.TARGET_TEMPERATURE_RANGE: + self._attr_target_temperature_high = self.get_airzone_value( + AZD_HEAT_TEMP_SET + ) + self._attr_target_temperature_low = self.get_airzone_value( + AZD_COOL_TEMP_SET + ) diff --git a/tests/components/airzone/test_climate.py b/tests/components/airzone/test_climate.py index cfbf6049e7c..0baac5c9d71 100644 --- a/tests/components/airzone/test_climate.py +++ b/tests/components/airzone/test_climate.py @@ -3,7 +3,9 @@ from unittest.mock import patch from aioairzone.common import OperationMode from aioairzone.const import ( + API_COOL_SET_POINT, API_DATA, + API_HEAT_SET_POINT, API_MODE, API_ON, API_SET_POINT, @@ -25,6 +27,8 @@ from homeassistant.components.climate import ( ATTR_HVAC_MODES, ATTR_MAX_TEMP, ATTR_MIN_TEMP, + ATTR_TARGET_TEMP_HIGH, + ATTR_TARGET_TEMP_LOW, ATTR_TARGET_TEMP_STEP, DOMAIN as CLIMATE_DOMAIN, FAN_AUTO, @@ -494,3 +498,39 @@ async def test_airzone_climate_set_temp_error(hass: HomeAssistant) -> None: state = hass.states.get("climate.dorm_2") assert state.attributes.get(ATTR_TEMPERATURE) == 19.5 + + +async def test_airzone_climate_set_temp_range(hass: HomeAssistant) -> None: + """Test setting the target temperature range.""" + + HVAC_MOCK = { + API_DATA: [ + { + API_SYSTEM_ID: 3, + API_ZONE_ID: 1, + API_COOL_SET_POINT: 68.0, + API_HEAT_SET_POINT: 77.0, + } + ] + } + + await async_init_integration(hass) + + with patch( + "homeassistant.components.airzone.AirzoneLocalApi.put_hvac", + return_value=HVAC_MOCK, + ): + await hass.services.async_call( + CLIMATE_DOMAIN, + SERVICE_SET_TEMPERATURE, + { + ATTR_ENTITY_ID: "climate.dkn_plus", + ATTR_TARGET_TEMP_HIGH: 25.0, + ATTR_TARGET_TEMP_LOW: 20.0, + }, + blocking=True, + ) + + state = hass.states.get("climate.dkn_plus") + assert state.attributes.get(ATTR_TARGET_TEMP_HIGH) == 25.0 + assert state.attributes.get(ATTR_TARGET_TEMP_LOW) == 20.0