Initialize docker stack repo
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
"""Adds dehumidifer entity for each dehumidifer appliance."""
|
||||
|
||||
import logging
|
||||
from typing import Final
|
||||
|
||||
from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity
|
||||
from homeassistant.components.humidifier.const import HumidifierEntityFeature
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
||||
from custom_components.midea_dehumidifier_lan.const import (
|
||||
ATTR_RUNNING,
|
||||
DOMAIN,
|
||||
MAX_TARGET_HUMIDITY,
|
||||
MIN_TARGET_HUMIDITY,
|
||||
)
|
||||
from custom_components.midea_dehumidifier_lan.appliance_coordinator import (
|
||||
ApplianceEntity,
|
||||
ApplianceUpdateCoordinator,
|
||||
)
|
||||
from custom_components.midea_dehumidifier_lan.hub import Hub
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
MODE_SET: Final = "Set"
|
||||
MODE_DRY: Final = "Dry"
|
||||
MODE_SMART: Final = "Smart"
|
||||
MODE_CONTINOUS: Final = "Continuous"
|
||||
MODE_PURIFIER: Final = "Purifier"
|
||||
MODE_ANTIMOULD: Final = "Antimould"
|
||||
MODE_FAN: Final = "Fan"
|
||||
|
||||
ENTITY_ID_FORMAT = DOMAIN + ".{}"
|
||||
|
||||
|
||||
async def async_setup_entry(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
"""Sets up dehumidifier entites"""
|
||||
hub: Hub = hass.data[DOMAIN][config_entry.entry_id]
|
||||
|
||||
async_add_entities(
|
||||
DehumidifierEntity(c) for c in hub.coordinators if c.is_dehumidifier()
|
||||
)
|
||||
|
||||
|
||||
_MODES = [
|
||||
(1, MODE_SET),
|
||||
(2, MODE_CONTINOUS),
|
||||
(3, MODE_SMART),
|
||||
(4, MODE_DRY),
|
||||
(6, MODE_PURIFIER),
|
||||
(7, MODE_ANTIMOULD),
|
||||
]
|
||||
|
||||
_MODES_FROM_CAPABILITY = {
|
||||
1: [MODE_PURIFIER],
|
||||
2: [MODE_ANTIMOULD],
|
||||
3: [MODE_PURIFIER, MODE_ANTIMOULD],
|
||||
4: [MODE_FAN],
|
||||
}
|
||||
|
||||
|
||||
# pylint: disable=too-many-ancestors,too-many-instance-attributes
|
||||
class DehumidifierEntity(ApplianceEntity, HumidifierEntity):
|
||||
"""(de)Humidifer entity for Midea dehumidifier"""
|
||||
|
||||
_attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER
|
||||
_attr_max_humidity = MAX_TARGET_HUMIDITY
|
||||
_attr_min_humidity = MIN_TARGET_HUMIDITY
|
||||
_attr_supported_features = HumidifierEntityFeature.MODES
|
||||
_name_suffix = ""
|
||||
_add_extra_attrs = True
|
||||
|
||||
def __init__(self, coordinator: ApplianceUpdateCoordinator) -> None:
|
||||
super().__init__(coordinator)
|
||||
|
||||
self._attr_mode = None
|
||||
self._attr_available_modes = [MODE_SET]
|
||||
|
||||
def on_online(self, update: bool) -> None:
|
||||
capabilities = self.coordinator.appliance.state.capabilities
|
||||
|
||||
self._attr_available_modes = [MODE_SET]
|
||||
if capabilities.get("auto"):
|
||||
self._attr_available_modes.append(MODE_SMART)
|
||||
self._attr_available_modes.append(MODE_CONTINOUS)
|
||||
if capabilities.get("dry_clothes"):
|
||||
self._attr_available_modes.append(MODE_DRY)
|
||||
|
||||
more_modes = capabilities.get("mode", 0)
|
||||
self._attr_available_modes += _MODES_FROM_CAPABILITY.get(more_modes, [])
|
||||
|
||||
super().on_online(update)
|
||||
|
||||
def on_update(self) -> None:
|
||||
dehumi = self.dehumidifier()
|
||||
self._attr_mode = next((i[1] for i in _MODES if i[0] == dehumi.mode), MODE_SET)
|
||||
self._attr_target_humidity = dehumi.target_humidity
|
||||
self._attr_current_humidity = dehumi.current_humidity # add new attribute current_humidity
|
||||
self._attr_is_on = dehumi.running
|
||||
super().on_update()
|
||||
|
||||
def turn_on(self, **kwargs) -> None: # pylint: disable=unused-argument
|
||||
"""Turn the entity on."""
|
||||
self.apply(ATTR_RUNNING, True)
|
||||
|
||||
def turn_off(self, **kwargs) -> None: # pylint: disable=unused-argument
|
||||
"""Turn the entity off."""
|
||||
self.apply(ATTR_RUNNING, False)
|
||||
|
||||
def set_mode(self, mode) -> None:
|
||||
"""Set new target preset mode."""
|
||||
midea_mode = next((i[0] for i in _MODES if i[1] == mode), None)
|
||||
if midea_mode is None:
|
||||
_LOGGER.debug("Unsupported dehumidifer mode %s", mode)
|
||||
midea_mode = 1
|
||||
self.apply("mode", midea_mode)
|
||||
|
||||
def set_humidity(self, humidity) -> None:
|
||||
"""Set new target humidity."""
|
||||
self.apply("target_humidity", humidity)
|
||||
Reference in New Issue
Block a user