diff --git a/homeassistant/components/deconz/climate.py b/homeassistant/components/deconz/climate.py index 79cff4b7764..aaedc7bae90 100644 --- a/homeassistant/components/deconz/climate.py +++ b/homeassistant/components/deconz/climate.py @@ -25,7 +25,7 @@ from pydeconz.models.sensor.thermostat import ( Thermostat, ) -from homeassistant.components.climate import DOMAIN, ClimateEntity, ClimateEntityFeature +from homeassistant.components.climate import DOMAIN, ClimateEntity from homeassistant.components.climate.const import ( FAN_AUTO, FAN_HIGH, @@ -33,13 +33,11 @@ from homeassistant.components.climate.const import ( FAN_MEDIUM, FAN_OFF, FAN_ON, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_OFF, PRESET_BOOST, PRESET_COMFORT, PRESET_ECO, + ClimateEntityFeature, + HVACMode, ) from homeassistant.config_entries import ConfigEntry from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS @@ -64,11 +62,11 @@ FAN_MODE_TO_DECONZ = { } DECONZ_TO_FAN_MODE = {value: key for key, value in FAN_MODE_TO_DECONZ.items()} -HVAC_MODE_TO_DECONZ: dict[str, str] = { - HVAC_MODE_AUTO: THERMOSTAT_MODE_AUTO, - HVAC_MODE_COOL: THERMOSTAT_MODE_COOL, - HVAC_MODE_HEAT: THERMOSTAT_MODE_HEAT, - HVAC_MODE_OFF: THERMOSTAT_MODE_OFF, +HVAC_MODE_TO_DECONZ: dict[HVACMode, str] = { + HVACMode.AUTO: THERMOSTAT_MODE_AUTO, + HVACMode.COOL: THERMOSTAT_MODE_COOL, + HVACMode.HEAT: THERMOSTAT_MODE_HEAT, + HVACMode.OFF: THERMOSTAT_MODE_OFF, } DECONZ_PRESET_AUTO = "auto" @@ -146,14 +144,14 @@ class DeconzThermostat(DeconzDevice, ClimateEntity): super().__init__(device, gateway) self._attr_hvac_modes = [ - HVAC_MODE_HEAT, - HVAC_MODE_OFF, + HVACMode.HEAT, + HVACMode.OFF, ] if device.mode: - self._attr_hvac_modes.append(HVAC_MODE_AUTO) + self._attr_hvac_modes.append(HVACMode.AUTO) if "coolsetpoint" in device.raw["config"]: - self._attr_hvac_modes.append(HVAC_MODE_COOL) + self._attr_hvac_modes.append(HVACMode.COOL) self._deconz_to_hvac_mode = { HVAC_MODE_TO_DECONZ[item]: item for item in self._attr_hvac_modes @@ -188,22 +186,22 @@ class DeconzThermostat(DeconzDevice, ClimateEntity): # HVAC control @property - def hvac_mode(self) -> str: + def hvac_mode(self) -> HVACMode: """Return hvac operation ie. heat, cool mode. Need to be one of HVAC_MODE_*. """ if self._device.mode in self._deconz_to_hvac_mode: return self._deconz_to_hvac_mode[self._device.mode] - return HVAC_MODE_HEAT if self._device.state_on else HVAC_MODE_OFF + return HVACMode.HEAT if self._device.state_on else HVACMode.OFF - async def async_set_hvac_mode(self, hvac_mode: str) -> None: + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: """Set new target hvac mode.""" if hvac_mode not in self._attr_hvac_modes: raise ValueError(f"Unsupported HVAC mode {hvac_mode}") if len(self._attr_hvac_modes) == 2: # Only allow turn on and off thermostat - await self._device.set_config(on=hvac_mode != HVAC_MODE_OFF) + await self._device.set_config(on=hvac_mode != HVACMode.OFF) else: await self._device.set_config(mode=HVAC_MODE_TO_DECONZ[hvac_mode]) diff --git a/tests/components/deconz/test_climate.py b/tests/components/deconz/test_climate.py index 3afdcd0ae8e..d93dd2ebfa1 100644 --- a/tests/components/deconz/test_climate.py +++ b/tests/components/deconz/test_climate.py @@ -1,5 +1,4 @@ """deCONZ climate platform tests.""" - from unittest.mock import patch import pytest @@ -23,13 +22,10 @@ from homeassistant.components.climate.const import ( FAN_MEDIUM, FAN_OFF, FAN_ON, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_HEAT, - HVAC_MODE_OFF, PRESET_BOOST, PRESET_COMFORT, PRESET_ECO, + HVACMode, ) from homeassistant.components.deconz.climate import ( DECONZ_FAN_SMART, @@ -103,10 +99,10 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket assert len(hass.states.async_all()) == 2 climate_thermostat = hass.states.get("climate.thermostat") - assert climate_thermostat.state == HVAC_MODE_HEAT + assert climate_thermostat.state == HVACMode.HEAT assert climate_thermostat.attributes["hvac_modes"] == [ - HVAC_MODE_HEAT, - HVAC_MODE_OFF, + HVACMode.HEAT, + HVACMode.OFF, ] assert climate_thermostat.attributes["current_temperature"] == 21.0 assert climate_thermostat.attributes["temperature"] == 21.0 @@ -139,7 +135,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket await mock_deconz_websocket(data=event_changed_sensor) await hass.async_block_till_done() - assert hass.states.get("climate.thermostat").state == HVAC_MODE_HEAT + assert hass.states.get("climate.thermostat").state == HVACMode.HEAT # Verify service calls @@ -150,7 +146,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_HEAT}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.HEAT}, blocking=True, ) assert aioclient_mock.mock_calls[1][2] == {"on": True} @@ -160,7 +156,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_OFF}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.OFF}, blocking=True, ) assert aioclient_mock.mock_calls[2][2] == {"on": False} @@ -171,7 +167,7 @@ async def test_simple_climate_device(hass, aioclient_mock, mock_deconz_websocket await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_AUTO}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.AUTO}, blocking=True, ) @@ -202,11 +198,11 @@ async def test_climate_device_without_cooling_support( assert len(hass.states.async_all()) == 2 climate_thermostat = hass.states.get("climate.thermostat") - assert climate_thermostat.state == HVAC_MODE_AUTO + assert climate_thermostat.state == HVACMode.AUTO assert climate_thermostat.attributes["hvac_modes"] == [ - HVAC_MODE_HEAT, - HVAC_MODE_OFF, - HVAC_MODE_AUTO, + HVACMode.HEAT, + HVACMode.OFF, + HVACMode.AUTO, ] assert climate_thermostat.attributes["current_temperature"] == 22.6 assert climate_thermostat.attributes["temperature"] == 22.0 @@ -242,7 +238,7 @@ async def test_climate_device_without_cooling_support( await mock_deconz_websocket(data=event_changed_sensor) await hass.async_block_till_done() - assert hass.states.get("climate.thermostat").state == HVAC_MODE_HEAT + assert hass.states.get("climate.thermostat").state == HVACMode.HEAT # Event signals thermostat state off @@ -267,7 +263,7 @@ async def test_climate_device_without_cooling_support( await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_AUTO}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.AUTO}, blocking=True, ) assert aioclient_mock.mock_calls[1][2] == {"mode": "auto"} @@ -277,7 +273,7 @@ async def test_climate_device_without_cooling_support( await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_HEAT}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.HEAT}, blocking=True, ) assert aioclient_mock.mock_calls[2][2] == {"mode": "heat"} @@ -287,7 +283,7 @@ async def test_climate_device_without_cooling_support( await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_OFF}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.OFF}, blocking=True, ) assert aioclient_mock.mock_calls[3][2] == {"mode": "off"} @@ -298,7 +294,7 @@ async def test_climate_device_without_cooling_support( await hass.services.async_call( CLIMATE_DOMAIN, SERVICE_SET_HVAC_MODE, - {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVAC_MODE_COOL}, + {ATTR_ENTITY_ID: "climate.thermostat", ATTR_HVAC_MODE: HVACMode.COOL}, blocking=True, ) @@ -376,12 +372,12 @@ async def test_climate_device_with_cooling_support( assert len(hass.states.async_all()) == 2 climate_thermostat = hass.states.get("climate.zen_01") - assert climate_thermostat.state == HVAC_MODE_HEAT + assert climate_thermostat.state == HVACMode.HEAT assert climate_thermostat.attributes["hvac_modes"] == [ - HVAC_MODE_HEAT, - HVAC_MODE_OFF, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, + HVACMode.HEAT, + HVACMode.OFF, + HVACMode.AUTO, + HVACMode.COOL, ] assert climate_thermostat.attributes["current_temperature"] == 23.2 assert climate_thermostat.attributes["temperature"] == 22.2 @@ -400,7 +396,7 @@ async def test_climate_device_with_cooling_support( await hass.async_block_till_done() await hass.async_block_till_done() - assert hass.states.get("climate.zen_01").state == HVAC_MODE_COOL + assert hass.states.get("climate.zen_01").state == HVACMode.COOL assert hass.states.get("climate.zen_01").attributes["temperature"] == 11.1 # Verify service calls @@ -456,7 +452,7 @@ async def test_climate_device_with_fan_support( assert len(hass.states.async_all()) == 2 climate_thermostat = hass.states.get("climate.zen_01") - assert climate_thermostat.state == HVAC_MODE_HEAT + assert climate_thermostat.state == HVACMode.HEAT assert climate_thermostat.attributes["fan_mode"] == FAN_AUTO assert climate_thermostat.attributes["fan_modes"] == [ DECONZ_FAN_SMART, @@ -584,7 +580,7 @@ async def test_climate_device_with_preset(hass, aioclient_mock, mock_deconz_webs assert len(hass.states.async_all()) == 2 climate_zen_01 = hass.states.get("climate.zen_01") - assert climate_zen_01.state == HVAC_MODE_HEAT + assert climate_zen_01.state == HVACMode.HEAT assert climate_zen_01.attributes["current_temperature"] == 23.2 assert climate_zen_01.attributes["temperature"] == 22.2 assert climate_zen_01.attributes["preset_mode"] == DECONZ_PRESET_AUTO @@ -696,7 +692,7 @@ async def test_clip_climate_device(hass, aioclient_mock): ) assert len(hass.states.async_all()) == 3 - assert hass.states.get("climate.clip_thermostat").state == HVAC_MODE_HEAT + assert hass.states.get("climate.clip_thermostat").state == HVACMode.HEAT # Disallow clip sensors @@ -716,7 +712,7 @@ async def test_clip_climate_device(hass, aioclient_mock): await hass.async_block_till_done() assert len(hass.states.async_all()) == 3 - assert hass.states.get("climate.clip_thermostat").state == HVAC_MODE_HEAT + assert hass.states.get("climate.clip_thermostat").state == HVACMode.HEAT async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket): @@ -741,7 +737,7 @@ async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket): with patch.dict(DECONZ_WEB_REQUEST, data): await setup_deconz_integration(hass, aioclient_mock) - assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO + assert hass.states.get("climate.thermostat").state == HVACMode.AUTO event_changed_sensor = { "t": "event", @@ -753,7 +749,7 @@ async def test_verify_state_update(hass, aioclient_mock, mock_deconz_websocket): await mock_deconz_websocket(data=event_changed_sensor) await hass.async_block_till_done() - assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO + assert hass.states.get("climate.thermostat").state == HVACMode.AUTO async def test_add_new_climate_device(hass, aioclient_mock, mock_deconz_websocket): @@ -786,7 +782,7 @@ async def test_add_new_climate_device(hass, aioclient_mock, mock_deconz_websocke await hass.async_block_till_done() assert len(hass.states.async_all()) == 2 - assert hass.states.get("climate.thermostat").state == HVAC_MODE_AUTO + assert hass.states.get("climate.thermostat").state == HVACMode.AUTO assert hass.states.get("sensor.thermostat_battery").state == "100"