Use climate enums in hisense_aehw4a1 (#70666)

This commit is contained in:
epenet 2022-04-26 09:56:45 +02:00 committed by GitHub
parent 9132262fa7
commit cb6320536f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,20 +1,17 @@
"""Pyaehw4a1 platform to control of Hisense AEH-W4A1 Climate Devices.""" """Pyaehw4a1 platform to control of Hisense AEH-W4A1 Climate Devices."""
from __future__ import annotations
import logging import logging
from pyaehw4a1.aehw4a1 import AehW4a1 from pyaehw4a1.aehw4a1 import AehW4a1
import pyaehw4a1.exceptions import pyaehw4a1.exceptions
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 (
FAN_AUTO, FAN_AUTO,
FAN_HIGH, FAN_HIGH,
FAN_LOW, FAN_LOW,
FAN_MEDIUM, FAN_MEDIUM,
HVAC_MODE_COOL,
HVAC_MODE_DRY,
HVAC_MODE_FAN_ONLY,
HVAC_MODE_HEAT,
HVAC_MODE_OFF,
PRESET_BOOST, PRESET_BOOST,
PRESET_ECO, PRESET_ECO,
PRESET_NONE, PRESET_NONE,
@ -23,6 +20,8 @@ from homeassistant.components.climate.const import (
SWING_HORIZONTAL, SWING_HORIZONTAL,
SWING_OFF, SWING_OFF,
SWING_VERTICAL, SWING_VERTICAL,
ClimateEntityFeature,
HVACMode,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ( from homeassistant.const import (
@ -43,11 +42,11 @@ MIN_TEMP_F = 61
MAX_TEMP_F = 90 MAX_TEMP_F = 90
HVAC_MODES = [ HVAC_MODES = [
HVAC_MODE_OFF, HVACMode.OFF,
HVAC_MODE_HEAT, HVACMode.HEAT,
HVAC_MODE_COOL, HVACMode.COOL,
HVAC_MODE_DRY, HVACMode.DRY,
HVAC_MODE_FAN_ONLY, HVACMode.FAN_ONLY,
] ]
FAN_MODES = [ FAN_MODES = [
@ -76,18 +75,18 @@ PRESET_MODES = [
] ]
AC_TO_HA_STATE = { AC_TO_HA_STATE = {
"0001": HVAC_MODE_HEAT, "0001": HVACMode.HEAT,
"0010": HVAC_MODE_COOL, "0010": HVACMode.COOL,
"0011": HVAC_MODE_DRY, "0011": HVACMode.DRY,
"0000": HVAC_MODE_FAN_ONLY, "0000": HVACMode.FAN_ONLY,
} }
HA_STATE_TO_AC = { HA_STATE_TO_AC = {
HVAC_MODE_OFF: "off", HVACMode.OFF: "off",
HVAC_MODE_HEAT: "mode_heat", HVACMode.HEAT: "mode_heat",
HVAC_MODE_COOL: "mode_cool", HVACMode.COOL: "mode_cool",
HVAC_MODE_DRY: "mode_dry", HVACMode.DRY: "mode_dry",
HVAC_MODE_FAN_ONLY: "mode_fan", HVACMode.FAN_ONLY: "mode_fan",
} }
AC_TO_HA_FAN_MODES = { AC_TO_HA_FAN_MODES = {
@ -142,6 +141,7 @@ async def async_setup_entry(
class ClimateAehW4a1(ClimateEntity): class ClimateAehW4a1(ClimateEntity):
"""Representation of a Hisense AEH-W4A1 module for climate device.""" """Representation of a Hisense AEH-W4A1 module for climate device."""
_attr_hvac_modes = HVAC_MODES
_attr_supported_features = ( _attr_supported_features = (
ClimateEntityFeature.TARGET_TEMPERATURE ClimateEntityFeature.TARGET_TEMPERATURE
| ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.FAN_MODE
@ -153,7 +153,6 @@ class ClimateAehW4a1(ClimateEntity):
"""Initialize the climate device.""" """Initialize the climate device."""
self._unique_id = device self._unique_id = device
self._device = AehW4a1(device) self._device = AehW4a1(device)
self._hvac_modes = HVAC_MODES
self._fan_modes = FAN_MODES self._fan_modes = FAN_MODES
self._swing_modes = SWING_MODES self._swing_modes = SWING_MODES
self._preset_modes = PRESET_MODES self._preset_modes = PRESET_MODES
@ -162,7 +161,7 @@ class ClimateAehW4a1(ClimateEntity):
self._temperature_unit = None self._temperature_unit = None
self._current_temperature = None self._current_temperature = None
self._target_temperature = None self._target_temperature = None
self._hvac_mode = None self._attr_hvac_mode = None
self._fan_mode = None self._fan_mode = None
self._swing_mode = None self._swing_mode = None
self._preset_mode = None self._preset_mode = None
@ -192,7 +191,7 @@ class ClimateAehW4a1(ClimateEntity):
if self._on == "1": if self._on == "1":
device_mode = status["mode_status"] device_mode = status["mode_status"]
self._hvac_mode = AC_TO_HA_STATE[device_mode] self._attr_hvac_mode = AC_TO_HA_STATE[device_mode]
fan_mode = status["wind_status"] fan_mode = status["wind_status"]
self._fan_mode = AC_TO_HA_FAN_MODES[fan_mode] self._fan_mode = AC_TO_HA_FAN_MODES[fan_mode]
@ -200,7 +199,7 @@ class ClimateAehW4a1(ClimateEntity):
swing_mode = f'{status["up_down"]}{status["left_right"]}' swing_mode = f'{status["up_down"]}{status["left_right"]}'
self._swing_mode = AC_TO_HA_SWING[swing_mode] self._swing_mode = AC_TO_HA_SWING[swing_mode]
if self._hvac_mode in (HVAC_MODE_COOL, HVAC_MODE_HEAT): if self._attr_hvac_mode in (HVACMode.COOL, HVACMode.HEAT):
self._target_temperature = int(status["indoor_temperature_setting"], 2) self._target_temperature = int(status["indoor_temperature_setting"], 2)
else: else:
self._target_temperature = None self._target_temperature = None
@ -220,7 +219,7 @@ class ClimateAehW4a1(ClimateEntity):
else: else:
self._preset_mode = PRESET_NONE self._preset_mode = PRESET_NONE
else: else:
self._hvac_mode = HVAC_MODE_OFF self._attr_hvac_mode = HVACMode.OFF
self._fan_mode = None self._fan_mode = None
self._swing_mode = None self._swing_mode = None
self._target_temperature = None self._target_temperature = None
@ -251,16 +250,6 @@ class ClimateAehW4a1(ClimateEntity):
"""Return the temperature we are trying to reach.""" """Return the temperature we are trying to reach."""
return self._target_temperature return self._target_temperature
@property
def hvac_mode(self):
"""Return hvac target hvac state."""
return self._hvac_mode
@property
def hvac_modes(self):
"""Return the list of available operation modes."""
return self._hvac_modes
@property @property
def fan_mode(self): def fan_mode(self):
"""Return the fan setting.""" """Return the fan setting."""
@ -336,8 +325,8 @@ class ClimateAehW4a1(ClimateEntity):
if self._on != "1": if self._on != "1":
_LOGGER.warning("AC at %s is off, could not set fan mode", self._unique_id) _LOGGER.warning("AC at %s is off, could not set fan mode", self._unique_id)
return return
if self._hvac_mode in (HVAC_MODE_COOL, HVAC_MODE_FAN_ONLY) and ( if self._attr_hvac_mode in (HVACMode.COOL, HVACMode.FAN_ONLY) and (
self._hvac_mode != HVAC_MODE_FAN_ONLY or fan_mode != FAN_AUTO self._attr_hvac_mode != HVACMode.FAN_ONLY or fan_mode != FAN_AUTO
): ):
_LOGGER.debug("Setting fan mode of %s to %s", self._unique_id, fan_mode) _LOGGER.debug("Setting fan mode of %s to %s", self._unique_id, fan_mode)
await self._device.command(HA_FAN_MODES_TO_AC[fan_mode]) await self._device.command(HA_FAN_MODES_TO_AC[fan_mode])
@ -394,16 +383,16 @@ class ClimateAehW4a1(ClimateEntity):
self._previous_state = preset_mode self._previous_state = preset_mode
elif preset_mode == PRESET_SLEEP: elif preset_mode == PRESET_SLEEP:
await self._device.command("sleep_1") await self._device.command("sleep_1")
self._previous_state = self._hvac_mode self._previous_state = self._attr_hvac_mode
elif preset_mode == "sleep_2": elif preset_mode == "sleep_2":
await self._device.command("sleep_2") await self._device.command("sleep_2")
self._previous_state = self._hvac_mode self._previous_state = self._attr_hvac_mode
elif preset_mode == "sleep_3": elif preset_mode == "sleep_3":
await self._device.command("sleep_3") await self._device.command("sleep_3")
self._previous_state = self._hvac_mode self._previous_state = self._attr_hvac_mode
elif preset_mode == "sleep_4": elif preset_mode == "sleep_4":
await self._device.command("sleep_4") await self._device.command("sleep_4")
self._previous_state = self._hvac_mode self._previous_state = self._attr_hvac_mode
elif self._previous_state is not None: elif self._previous_state is not None:
if self._previous_state == PRESET_ECO: if self._previous_state == PRESET_ECO:
await self._device.command("energysave_off") await self._device.command("energysave_off")
@ -413,10 +402,10 @@ class ClimateAehW4a1(ClimateEntity):
await self._device.command(HA_STATE_TO_AC[self._previous_state]) await self._device.command(HA_STATE_TO_AC[self._previous_state])
self._previous_state = None self._previous_state = None
async def async_set_hvac_mode(self, hvac_mode): async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set new operation mode.""" """Set new operation mode."""
_LOGGER.debug("Setting operation mode of %s to %s", self._unique_id, hvac_mode) _LOGGER.debug("Setting operation mode of %s to %s", self._unique_id, hvac_mode)
if hvac_mode == HVAC_MODE_OFF: if hvac_mode == HVACMode.OFF:
await self.async_turn_off() await self.async_turn_off()
else: else:
await self._device.command(HA_STATE_TO_AC[hvac_mode]) await self._device.command(HA_STATE_TO_AC[hvac_mode])