Use climate enums in melcloud (#70689)

This commit is contained in:
epenet 2022-04-26 09:34:39 +02:00 committed by GitHub
parent c5abf54f10
commit 0e6b543375
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,17 +14,13 @@ from pymelcloud.atw_device import (
) )
import voluptuous as vol import voluptuous as vol
from homeassistant.components.climate import ClimateEntity, ClimateEntityFeature from homeassistant.components.climate import ClimateEntity
from homeassistant.components.climate.const import ( from homeassistant.components.climate.const import (
ATTR_HVAC_MODE, ATTR_HVAC_MODE,
DEFAULT_MAX_TEMP, DEFAULT_MAX_TEMP,
DEFAULT_MIN_TEMP, DEFAULT_MIN_TEMP,
HVAC_MODE_COOL, ClimateEntityFeature,
HVAC_MODE_DRY, HVACMode,
HVAC_MODE_FAN_ONLY,
HVAC_MODE_HEAT,
HVAC_MODE_HEAT_COOL,
HVAC_MODE_OFF,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS
@ -49,18 +45,18 @@ SCAN_INTERVAL = timedelta(seconds=60)
ATA_HVAC_MODE_LOOKUP = { ATA_HVAC_MODE_LOOKUP = {
ata.OPERATION_MODE_HEAT: HVAC_MODE_HEAT, ata.OPERATION_MODE_HEAT: HVACMode.HEAT,
ata.OPERATION_MODE_DRY: HVAC_MODE_DRY, ata.OPERATION_MODE_DRY: HVACMode.DRY,
ata.OPERATION_MODE_COOL: HVAC_MODE_COOL, ata.OPERATION_MODE_COOL: HVACMode.COOL,
ata.OPERATION_MODE_FAN_ONLY: HVAC_MODE_FAN_ONLY, ata.OPERATION_MODE_FAN_ONLY: HVACMode.FAN_ONLY,
ata.OPERATION_MODE_HEAT_COOL: HVAC_MODE_HEAT_COOL, ata.OPERATION_MODE_HEAT_COOL: HVACMode.HEAT_COOL,
} }
ATA_HVAC_MODE_REVERSE_LOOKUP = {v: k for k, v in ATA_HVAC_MODE_LOOKUP.items()} ATA_HVAC_MODE_REVERSE_LOOKUP = {v: k for k, v in ATA_HVAC_MODE_LOOKUP.items()}
ATW_ZONE_HVAC_MODE_LOOKUP = { ATW_ZONE_HVAC_MODE_LOOKUP = {
atw.ZONE_OPERATION_MODE_HEAT: HVAC_MODE_HEAT, atw.ZONE_OPERATION_MODE_HEAT: HVACMode.HEAT,
atw.ZONE_OPERATION_MODE_COOL: HVAC_MODE_COOL, atw.ZONE_OPERATION_MODE_COOL: HVACMode.COOL,
} }
ATW_ZONE_HVAC_MODE_REVERSE_LOOKUP = {v: k for k, v in ATW_ZONE_HVAC_MODE_LOOKUP.items()} ATW_ZONE_HVAC_MODE_REVERSE_LOOKUP = {v: k for k, v in ATW_ZONE_HVAC_MODE_LOOKUP.items()}
@ -161,16 +157,16 @@ class AtaDeviceClimate(MelCloudClimate):
return attr return attr
@property @property
def hvac_mode(self) -> str: def hvac_mode(self) -> HVACMode:
"""Return hvac operation ie. heat, cool mode.""" """Return hvac operation ie. heat, cool mode."""
mode = self._device.operation_mode mode = self._device.operation_mode
if not self._device.power or mode is None: if not self._device.power or mode is None:
return HVAC_MODE_OFF return HVACMode.OFF
return ATA_HVAC_MODE_LOOKUP.get(mode) return ATA_HVAC_MODE_LOOKUP.get(mode)
def _apply_set_hvac_mode(self, hvac_mode: str, set_dict: dict[str, Any]) -> None: def _apply_set_hvac_mode(self, hvac_mode: str, set_dict: dict[str, Any]) -> None:
"""Apply hvac mode changes to a dict used to call _device.set.""" """Apply hvac mode changes to a dict used to call _device.set."""
if hvac_mode == HVAC_MODE_OFF: if hvac_mode == HVACMode.OFF:
set_dict["power"] = False set_dict["power"] = False
return return
@ -179,19 +175,19 @@ class AtaDeviceClimate(MelCloudClimate):
raise ValueError(f"Invalid hvac_mode [{hvac_mode}]") raise ValueError(f"Invalid hvac_mode [{hvac_mode}]")
set_dict["operation_mode"] = operation_mode set_dict["operation_mode"] = operation_mode
if self.hvac_mode == HVAC_MODE_OFF: if self.hvac_mode == HVACMode.OFF:
set_dict["power"] = True set_dict["power"] = True
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.""" """Set new target hvac mode."""
set_dict = {} set_dict = {}
self._apply_set_hvac_mode(hvac_mode, set_dict) self._apply_set_hvac_mode(hvac_mode, set_dict)
await self._device.set(set_dict) await self._device.set(set_dict)
@property @property
def hvac_modes(self) -> list[str]: def hvac_modes(self) -> list[HVACMode]:
"""Return the list of available hvac operation modes.""" """Return the list of available hvac operation modes."""
return [HVAC_MODE_OFF] + [ return [HVACMode.OFF] + [
ATA_HVAC_MODE_LOOKUP.get(mode) for mode in self._device.operation_modes ATA_HVAC_MODE_LOOKUP.get(mode) for mode in self._device.operation_modes
] ]
@ -319,16 +315,16 @@ class AtwDeviceZoneClimate(MelCloudClimate):
return data return data
@property @property
def hvac_mode(self) -> str: def hvac_mode(self) -> HVACMode:
"""Return hvac operation ie. heat, cool mode.""" """Return hvac operation ie. heat, cool mode."""
mode = self._zone.operation_mode mode = self._zone.operation_mode
if not self._device.power or mode is None: if not self._device.power or mode is None:
return HVAC_MODE_OFF return HVACMode.OFF
return ATW_ZONE_HVAC_MODE_LOOKUP.get(mode, HVAC_MODE_OFF) return ATW_ZONE_HVAC_MODE_LOOKUP.get(mode, 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.""" """Set new target hvac mode."""
if hvac_mode == HVAC_MODE_OFF: if hvac_mode == HVACMode.OFF:
await self._device.set({"power": False}) await self._device.set({"power": False})
return return
@ -340,12 +336,12 @@ class AtwDeviceZoneClimate(MelCloudClimate):
props = {PROPERTY_ZONE_1_OPERATION_MODE: operation_mode} props = {PROPERTY_ZONE_1_OPERATION_MODE: operation_mode}
else: else:
props = {PROPERTY_ZONE_2_OPERATION_MODE: operation_mode} props = {PROPERTY_ZONE_2_OPERATION_MODE: operation_mode}
if self.hvac_mode == HVAC_MODE_OFF: if self.hvac_mode == HVACMode.OFF:
props["power"] = True props["power"] = True
await self._device.set(props) await self._device.set(props)
@property @property
def hvac_modes(self) -> list[str]: def hvac_modes(self) -> list[HVACMode]:
"""Return the list of available hvac operation modes.""" """Return the list of available hvac operation modes."""
return [self.hvac_mode] return [self.hvac_mode]