141 lines
4.8 KiB
Python
141 lines
4.8 KiB
Python
"""Midea Humidifier entries."""
|
|
|
|
import logging
|
|
from typing import Any, cast
|
|
|
|
from homeassistant.components.humidifier import (
|
|
HumidifierDeviceClass,
|
|
HumidifierEntity,
|
|
HumidifierEntityFeature,
|
|
)
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_DEVICE_ID, CONF_SWITCHES, Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|
from midealocal.device import DeviceType
|
|
from midealocal.devices.a1 import MideaA1Device
|
|
from midealocal.devices.fd import MideaFDDevice
|
|
|
|
from .const import DEVICES, DOMAIN
|
|
from .midea_devices import MIDEA_DEVICES
|
|
from .midea_entity import MideaEntity
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
config_entry: ConfigEntry,
|
|
async_add_entities: AddEntitiesCallback,
|
|
) -> None:
|
|
"""Set up humidifier entries."""
|
|
device_id = config_entry.data.get(CONF_DEVICE_ID)
|
|
device = hass.data[DOMAIN][DEVICES].get(device_id)
|
|
extra_switches = config_entry.options.get(CONF_SWITCHES, [])
|
|
devs: list[MideaA1Humidifier | MideaFDHumidifier] = []
|
|
for entity_key, config in cast(
|
|
"dict",
|
|
MIDEA_DEVICES[device.device_type]["entities"],
|
|
).items():
|
|
if config["type"] == Platform.HUMIDIFIER and (
|
|
config.get("default") or entity_key in extra_switches
|
|
):
|
|
if device.device_type == DeviceType.A1:
|
|
devs.append(MideaA1Humidifier(device, entity_key))
|
|
if device.device_type == DeviceType.FD:
|
|
devs.append(MideaFDHumidifier(device, entity_key))
|
|
async_add_entities(devs)
|
|
|
|
|
|
type MideaHumidifierDevice = MideaFDDevice | MideaA1Device
|
|
|
|
|
|
class MideaHumidifier(MideaEntity, HumidifierEntity):
|
|
"""Midea Humidifier Entries Base Class."""
|
|
|
|
_device: MideaHumidifierDevice
|
|
|
|
def __init__(self, device: MideaHumidifierDevice, entity_key: str) -> None:
|
|
"""Midea Humidifier entity init."""
|
|
super().__init__(device, entity_key)
|
|
|
|
@property
|
|
def current_humidity(self) -> float | None:
|
|
"""Midea Humidifier current humidity."""
|
|
return cast("float", self._device.get_attribute("current_humidity"))
|
|
|
|
@property
|
|
def target_humidity(self) -> float:
|
|
"""Midea Humidifier target humidity."""
|
|
return cast("float", self._device.get_attribute("target_humidity"))
|
|
|
|
@property
|
|
def mode(self) -> str:
|
|
"""Midea Humidifier mode."""
|
|
return cast("str", self._device.get_attribute("mode"))
|
|
|
|
@property
|
|
def available_modes(self) -> list[str] | None:
|
|
"""Midea Humidifier available modes."""
|
|
return cast("list", self._device.modes)
|
|
|
|
def set_humidity(self, humidity: int) -> None:
|
|
"""Midea Humidifier set humidity."""
|
|
self._device.set_attribute("target_humidity", humidity)
|
|
|
|
def set_mode(self, mode: str) -> None:
|
|
"""Midea Humidifier set mode."""
|
|
self._device.set_attribute("mode", mode)
|
|
|
|
@property
|
|
def is_on(self) -> bool:
|
|
"""Midea Humidifier is on."""
|
|
return cast("bool", self._device.get_attribute(attr="power"))
|
|
|
|
def turn_on(self, **kwargs: Any) -> None: # noqa: ANN401, ARG002
|
|
"""Midea Humidifier turn on."""
|
|
self._device.set_attribute(attr="power", value=True)
|
|
|
|
def turn_off(self, **kwargs: Any) -> None: # noqa: ANN401, ARG002
|
|
"""Midea Humidifier turn off."""
|
|
self._device.set_attribute(attr="power", value=False)
|
|
|
|
def update_state(self, status: Any) -> None: # noqa: ANN401, ARG002
|
|
"""Midea Humidifier update state."""
|
|
if not self.hass:
|
|
_LOGGER.warning(
|
|
"Humidifier update_state skipped for %s [%s]: HASS is None",
|
|
self.name,
|
|
type(self),
|
|
)
|
|
return
|
|
self.schedule_update_ha_state()
|
|
|
|
|
|
class MideaA1Humidifier(MideaHumidifier):
|
|
"""Midea A1 Humidifier Entries."""
|
|
|
|
_device: MideaA1Device
|
|
|
|
def __init__(self, device: MideaA1Device, entity_key: str) -> None:
|
|
"""Midea A1 Humidifier entity init."""
|
|
super().__init__(device, entity_key)
|
|
self._attr_min_humidity: float = 35
|
|
self._attr_max_humidity: float = 85
|
|
self._attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER
|
|
self._attr_supported_features = HumidifierEntityFeature.MODES
|
|
|
|
|
|
class MideaFDHumidifier(MideaHumidifier):
|
|
"""Midea FD Humidifier Entries."""
|
|
|
|
_device: MideaFDDevice
|
|
|
|
def __init__(self, device: MideaFDDevice, entity_key: str) -> None:
|
|
"""Midea FD Humidifier entity init."""
|
|
super().__init__(device, entity_key)
|
|
self._attr_min_humidity: float = 35
|
|
self._attr_max_humidity: float = 85
|
|
self._attr_device_class = HumidifierDeviceClass.HUMIDIFIER
|
|
self._attr_supported_features = HumidifierEntityFeature.MODES
|