Use climate enums in melissa (#70690)

This commit is contained in:
epenet 2022-04-26 09:30:46 +02:00 committed by GitHub
parent 661152527d
commit a7bb74e151
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 46 additions and 57 deletions

View file

@ -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

View file

@ -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"