From a7bb74e1515570caaeb8742d39fe57f647be6ee4 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 26 Apr 2022 09:30:46 +0200 Subject: [PATCH] Use climate enums in melissa (#70690) --- homeassistant/components/melissa/climate.py | 54 +++++++++------------ tests/components/melissa/test_climate.py | 49 +++++++++---------- 2 files changed, 46 insertions(+), 57 deletions(-) diff --git a/homeassistant/components/melissa/climate.py b/homeassistant/components/melissa/climate.py index 41d03b44e3f..81ffd9a5d1e 100644 --- a/homeassistant/components/melissa/climate.py +++ b/homeassistant/components/melissa/climate.py @@ -3,18 +3,14 @@ from __future__ import annotations import logging -from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature +from homeassistant.components.climate import ClimateEntity from homeassistant.components.climate.const import ( FAN_AUTO, FAN_HIGH, FAN_LOW, FAN_MEDIUM, - HVAC_MODE_AUTO, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_OFF, + ClimateEntityFeature, + HVACMode, ) from homeassistant.const import ATTR_TEMPERATURE, PRECISION_WHOLE, TEMP_CELSIUS from homeassistant.core import HomeAssistant @@ -26,11 +22,11 @@ from . import DATA_MELISSA _LOGGER = logging.getLogger(__name__) OP_MODES = [ - HVAC_MODE_HEAT, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_OFF, + HVACMode.HEAT, + HVACMode.COOL, + HVACMode.DRY, + HVACMode.FAN_ONLY, + HVACMode.OFF, ] FAN_MODES = [FAN_AUTO, FAN_HIGH, FAN_MEDIUM, FAN_LOW] @@ -58,6 +54,7 @@ async def async_setup_platform( class MelissaClimate(ClimateEntity): """Representation of a Melissa Climate device.""" + _attr_hvac_modes = OP_MODES _attr_supported_features = ( ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TARGET_TEMPERATURE ) @@ -100,7 +97,7 @@ class MelissaClimate(ClimateEntity): return PRECISION_WHOLE @property - def hvac_mode(self): + def hvac_mode(self) -> HVACMode | None: """Return the current operation mode.""" if self._cur_settings is None: return None @@ -111,15 +108,10 @@ class MelissaClimate(ClimateEntity): ) if not is_on: - return HVAC_MODE_OFF + return HVACMode.OFF return self.melissa_op_to_hass(self._cur_settings[self._api.MODE]) - @property - def hvac_modes(self): - """Return the list of available operation modes.""" - return OP_MODES - @property def fan_modes(self): """List of available fan modes.""" @@ -157,9 +149,9 @@ class MelissaClimate(ClimateEntity): melissa_fan_mode = self.hass_fan_to_melissa(fan_mode) await self.async_send({self._api.FAN: melissa_fan_mode}) - async def async_set_hvac_mode(self, hvac_mode): + async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None: """Set operation mode.""" - if hvac_mode == HVAC_MODE_OFF: + if hvac_mode == HVACMode.OFF: await self.async_send({self._api.STATE: self._api.STATE_OFF}) return @@ -195,20 +187,20 @@ class MelissaClimate(ClimateEntity): def melissa_op_to_hass(self, mode): """Translate Melissa modes to hass states.""" if mode == self._api.MODE_HEAT: - return HVAC_MODE_HEAT + return HVACMode.HEAT if mode == self._api.MODE_COOL: - return HVAC_MODE_COOL + return HVACMode.COOL if mode == self._api.MODE_DRY: - return HVAC_MODE_DRY + return HVACMode.DRY if mode == self._api.MODE_FAN: - return HVAC_MODE_FAN_ONLY + return HVACMode.FAN_ONLY _LOGGER.warning("Operation mode %s could not be mapped to hass", mode) return None def melissa_fan_to_hass(self, fan): """Translate Melissa fan modes to hass modes.""" if fan == self._api.FAN_AUTO: - return HVAC_MODE_AUTO + return FAN_AUTO if fan == self._api.FAN_LOW: return FAN_LOW if fan == self._api.FAN_MEDIUM: @@ -220,19 +212,19 @@ class MelissaClimate(ClimateEntity): def hass_mode_to_melissa(self, mode): """Translate hass states to melissa modes.""" - if mode == HVAC_MODE_HEAT: + if mode == HVACMode.HEAT: return self._api.MODE_HEAT - if mode == HVAC_MODE_COOL: + if mode == HVACMode.COOL: return self._api.MODE_COOL - if mode == HVAC_MODE_DRY: + if mode == HVACMode.DRY: return self._api.MODE_DRY - if mode == HVAC_MODE_FAN_ONLY: + if mode == HVACMode.FAN_ONLY: return self._api.MODE_FAN _LOGGER.warning("Melissa have no setting for %s mode", mode) def hass_fan_to_melissa(self, fan): """Translate hass fan modes to melissa modes.""" - if fan == HVAC_MODE_AUTO: + if fan == FAN_AUTO: return self._api.FAN_AUTO if fan == FAN_LOW: return self._api.FAN_LOW diff --git a/tests/components/melissa/test_climate.py b/tests/components/melissa/test_climate.py index 6eea6a8144b..75d053dc011 100644 --- a/tests/components/melissa/test_climate.py +++ b/tests/components/melissa/test_climate.py @@ -6,13 +6,8 @@ from homeassistant.components.climate.const import ( FAN_HIGH, FAN_LOW, FAN_MEDIUM, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_HEAT, - HVAC_MODE_OFF, - SUPPORT_FAN_MODE, - SUPPORT_TARGET_TEMPERATURE, + ClimateEntityFeature, + HVACMode, ) from homeassistant.components.melissa import DATA_MELISSA, climate as melissa from homeassistant.components.melissa.climate import MelissaClimate @@ -137,7 +132,7 @@ async def test_current_operation(hass): device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) await thermostat.async_update() - assert thermostat.state == HVAC_MODE_HEAT + assert thermostat.state == HVACMode.HEAT thermostat._cur_settings = None assert thermostat.hvac_action is None @@ -150,11 +145,11 @@ async def test_operation_list(hass): device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) assert [ - HVAC_MODE_HEAT, - HVAC_MODE_COOL, - HVAC_MODE_DRY, - HVAC_MODE_FAN_ONLY, - HVAC_MODE_OFF, + HVACMode.HEAT, + HVACMode.COOL, + HVACMode.DRY, + HVACMode.FAN_ONLY, + HVACMode.OFF, ] == thermostat.hvac_modes @@ -187,7 +182,7 @@ async def test_state(hass): device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) await thermostat.async_update() - assert thermostat.state == HVAC_MODE_HEAT + assert thermostat.state == HVACMode.HEAT thermostat._cur_settings = None assert thermostat.state is None @@ -226,7 +221,9 @@ async def test_supported_features(hass): api = melissa_mock() device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) - features = SUPPORT_TARGET_TEMPERATURE | SUPPORT_FAN_MODE + features = ( + ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE + ) assert thermostat.supported_features == features @@ -262,9 +259,9 @@ async def test_set_operation_mode(hass): thermostat = MelissaClimate(api, _SERIAL, device) await thermostat.async_update() await hass.async_block_till_done() - await thermostat.async_set_hvac_mode(HVAC_MODE_COOL) + await thermostat.async_set_hvac_mode(HVACMode.COOL) await hass.async_block_till_done() - assert thermostat.hvac_mode == HVAC_MODE_COOL + assert thermostat.hvac_mode == HVACMode.COOL async def test_send(hass): @@ -296,7 +293,7 @@ async def test_update(hass): thermostat = MelissaClimate(api, _SERIAL, device) await thermostat.async_update() assert thermostat.fan_mode == FAN_LOW - assert thermostat.state == HVAC_MODE_HEAT + assert thermostat.state == HVACMode.HEAT api.async_status = AsyncMock(side_effect=KeyError("boom")) await thermostat.async_update() mocked_warning.assert_called_once_with( @@ -310,10 +307,10 @@ async def test_melissa_op_to_hass(hass): api = melissa_mock() device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) - assert thermostat.melissa_op_to_hass(1) == HVAC_MODE_FAN_ONLY - assert thermostat.melissa_op_to_hass(2) == HVAC_MODE_HEAT - assert thermostat.melissa_op_to_hass(3) == HVAC_MODE_COOL - assert thermostat.melissa_op_to_hass(4) == HVAC_MODE_DRY + assert thermostat.melissa_op_to_hass(1) == HVACMode.FAN_ONLY + assert thermostat.melissa_op_to_hass(2) == HVACMode.HEAT + assert thermostat.melissa_op_to_hass(3) == HVACMode.COOL + assert thermostat.melissa_op_to_hass(4) == HVACMode.DRY assert thermostat.melissa_op_to_hass(5) is None @@ -338,10 +335,10 @@ async def test_hass_mode_to_melissa(hass): api = melissa_mock() device = (await api.async_fetch_devices())[_SERIAL] thermostat = MelissaClimate(api, _SERIAL, device) - assert thermostat.hass_mode_to_melissa(HVAC_MODE_FAN_ONLY) == 1 - assert thermostat.hass_mode_to_melissa(HVAC_MODE_HEAT) == 2 - assert thermostat.hass_mode_to_melissa(HVAC_MODE_COOL) == 3 - assert thermostat.hass_mode_to_melissa(HVAC_MODE_DRY) == 4 + assert thermostat.hass_mode_to_melissa(HVACMode.FAN_ONLY) == 1 + assert thermostat.hass_mode_to_melissa(HVACMode.HEAT) == 2 + assert thermostat.hass_mode_to_melissa(HVACMode.COOL) == 3 + assert thermostat.hass_mode_to_melissa(HVACMode.DRY) == 4 thermostat.hass_mode_to_melissa("test") mocked_warning.assert_called_once_with( "Melissa have no setting for %s mode", "test"