update HA interface source files
This commit is contained in:
1 parent
4661609990
commit
bd924ca909
4 files changed
+351
-44
No files matched your search
@@ -0,0 +1,153 @@
|
||||
""" for Climate integration."""
|
||||
from __future__ import annotations
|
||||
from datetime import timedelta
|
||||
import logging
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.climate import (
|
||||
ClimateEntity,
|
||||
ConfigEntry,
|
||||
)
|
||||
from homeassistant.components.climate.const import HVACMode, FAN_AUTO
|
||||
from homeassistant.const import TEMP_CELSIUS, ATTR_TEMPERATURE
|
||||
from homeassistant.util import Throttle
|
||||
from homeassistant.const import CONF_HOST
|
||||
from homeassistant.helpers import config_validation as cv, entity_platform
|
||||
|
||||
from .koolnova.device import MIN_TIME_BETWEEN_UPDATES, Koolnova
|
||||
from .const import (
|
||||
DOMAIN,
|
||||
FAN_MODE_TRANSLATION,
|
||||
HVAC_TRANSLATION,
|
||||
SERVICE_SET_HORIZONTAL_SWING_MODE,
|
||||
SERVICE_SET_VERTICAL_SWING_MODE,
|
||||
SUPPORT_FLAGS,
|
||||
SWING_HORIZONTAL_AUTO,
|
||||
SWING_VERTICAL_AUTO,
|
||||
SUPPORT_SWING_MODES,
|
||||
SUPPORTED_FAN_MODES,
|
||||
SUPPORTED_HVAC_MODES,
|
||||
SWING_3D_AUTO,
|
||||
SWING_MODE_TRANSLATION,
|
||||
HORIZONTAL_SWING_MODE_TRANSLATION,
|
||||
)
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10)
|
||||
|
||||
async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities):
|
||||
"""Setup climate entities"""
|
||||
for device in hass.data[DOMAIN]:
|
||||
if device.host == entry.data[CONF_HOST]:
|
||||
_LOGGER.info("Setup climate for: %s, %s", device.name, device.airco_id)
|
||||
async_add_entities([KoolnovaZoneClimate(device)])
|
||||
|
||||
platform = entity_platform.async_get_current_platform()
|
||||
|
||||
class KoolnovaZoneClimate(ClimateEntity):
|
||||
"""Representation of a climate entity"""
|
||||
|
||||
_attr_supported_features: int = SUPPORT_FLAGS
|
||||
_attr_temperature_unit: str = TEMP_CELSIUS
|
||||
_attr_hvac_modes: list[HVACMode] = SUPPORTED_HVAC_MODES
|
||||
_attr_fan_modes: list[str] = SUPPORTED_FAN_MODES
|
||||
_attr_hvac_mode: HVACMode = HVACMode.OFF
|
||||
_attr_fan_mode: str = FAN_AUTO
|
||||
_attr_min_temp: float = 16
|
||||
_attr_max_temp: float = 30
|
||||
|
||||
def __init__(self, device: Device) -> None:
|
||||
self._device = device
|
||||
self._attr_name = device.name
|
||||
self._attr_device_info = device.device_info
|
||||
self._attr_unique_id = f"{DOMAIN}-{self._device.airco_id}-climate"
|
||||
self._update_state()
|
||||
|
||||
async def async_set_temperature(self, **kwargs) -> None:
|
||||
"""Set new target temperature."""
|
||||
opts = {AirconCommands.PresetTemp: kwargs.get(ATTR_TEMPERATURE)}
|
||||
|
||||
if "hvac_mode" in kwargs:
|
||||
hvac_mode = kwargs.get("hvac_mode")
|
||||
opts.update(
|
||||
{
|
||||
AirconCommands.OperationMode: self._device.airco.OperationMode
|
||||
if hvac_mode == HVACMode.OFF
|
||||
else HVAC_TRANSLATION[hvac_mode],
|
||||
AirconCommands.Operation: hvac_mode != HVACMode.OFF,
|
||||
}
|
||||
)
|
||||
|
||||
await self._device.set_airco(opts)
|
||||
self._update_state()
|
||||
|
||||
async def async_set_fan_mode(self, fan_mode: str) -> None:
|
||||
"""Set new target fan mode."""
|
||||
await self._device.set_airco(
|
||||
{AirconCommands.AirFlow: FAN_MODE_TRANSLATION[fan_mode]}
|
||||
)
|
||||
self._update_state()
|
||||
|
||||
async def async_turn_on(self) -> None:
|
||||
"""Turn the entity on."""
|
||||
await self._device.set_airco({AirconCommands.Operation: True})
|
||||
self._update_state()
|
||||
|
||||
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
|
||||
"""Set new target hvac mode."""
|
||||
await self._device.set_airco(
|
||||
{
|
||||
AirconCommands.OperationMode: self._device.airco.OperationMode
|
||||
if hvac_mode == HVACMode.OFF
|
||||
else HVAC_TRANSLATION[hvac_mode],
|
||||
AirconCommands.Operation: hvac_mode != HVACMode.OFF,
|
||||
}
|
||||
)
|
||||
self._update_state()
|
||||
|
||||
async def async_turn_off(self) -> None:
|
||||
"""Turn the entity off."""
|
||||
await self._device.set_airco({AirconCommands.Operation: False})
|
||||
self._update_state()
|
||||
|
||||
def _update_state(self) -> None:
|
||||
"""Private update attributes"""
|
||||
airco = self._device.airco
|
||||
|
||||
self._attr_target_temperature = airco.PresetTemp
|
||||
self._attr_current_temperature = airco.IndoorTemp
|
||||
self._attr_fan_mode = list(FAN_MODE_TRANSLATION.keys())[airco.AirFlow]
|
||||
self._attr_swing_mode = (
|
||||
SWING_3D_AUTO
|
||||
if airco.Entrust
|
||||
else list(SWING_MODE_TRANSLATION.keys())[airco.WindDirectionUD]
|
||||
)
|
||||
# self._attr_horizontal_swing_mode = list(
|
||||
# HORIZONTAL_SWING_MODE_TRANSLATION.keys()
|
||||
# )[airco.WindDirectionLR]
|
||||
self._attr_hvac_mode = list(HVAC_TRANSLATION.keys())[airco.OperationMode]
|
||||
|
||||
if airco.Operation is False:
|
||||
self._attr_hvac_mode = HVACMode.OFF
|
||||
else:
|
||||
_new_mode: HVACMode = None
|
||||
_mode = airco.OperationMode
|
||||
if _mode == 0:
|
||||
_new_mode = HVACMode.AUTO
|
||||
elif _mode == 1:
|
||||
_new_mode = HVACMode.COOL
|
||||
elif _mode == 2:
|
||||
_new_mode = HVACMode.HEAT
|
||||
elif _mode == 3:
|
||||
_new_mode = HVACMode.FAN_ONLY
|
||||
elif _mode == 4:
|
||||
_new_mode = HVACMode.DRY
|
||||
self._attr_hvac_mode = _new_mode
|
||||
|
||||
@Throttle(MIN_TIME_BETWEEN_UPDATES)
|
||||
async def async_update(self):
|
||||
"""Retrieve latest state."""
|
||||
await self._device.update()
|
||||
self._update_state()
|
||||
|
||||
Reference in new issue
Block a user