78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import logging
|
|
|
|
from homeassistant.components.humidifier import (
|
|
HumidifierEntity,
|
|
HumidifierEntityFeature,
|
|
)
|
|
|
|
from .core import utils
|
|
from .core.entity import YandexEntity
|
|
from .hass import hass_utils
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
INCLUDE_TYPES = ("devices.types.humidifier",)
|
|
|
|
|
|
async def async_setup_entry(hass, entry, async_add_entities):
|
|
async_add_entities(
|
|
YandexHumidifier(quasar, device, config)
|
|
for quasar, device, config in hass_utils.incluce_devices(hass, entry)
|
|
if device["type"] in INCLUDE_TYPES
|
|
)
|
|
|
|
|
|
# noinspection PyAbstractClass
|
|
class YandexHumidifier(HumidifierEntity, YandexEntity):
|
|
mode_instance: str = None
|
|
|
|
def internal_init(self, capabilities: dict, properties: dict):
|
|
candidates = ["fan_speed", "work_speed"]
|
|
|
|
self.mode_instance = next((i for i in candidates if i in capabilities), None)
|
|
|
|
if item := capabilities.get("humidity"):
|
|
self._attr_min_humidity = item["range"]["min"]
|
|
self._attr_max_humidity = item["range"]["max"]
|
|
|
|
if item := capabilities.get(self.mode_instance):
|
|
self._attr_supported_features |= HumidifierEntityFeature.MODES
|
|
self._attr_available_modes = [i["value"] for i in item["modes"]]
|
|
|
|
def internal_update(self, capabilities: dict, properties: dict):
|
|
if "on" in capabilities:
|
|
self._attr_is_on = capabilities["on"]
|
|
|
|
if "humidity" in capabilities:
|
|
self._attr_target_humidity = capabilities["humidity"]
|
|
|
|
if self.mode_instance in capabilities:
|
|
self._attr_mode = capabilities[self.mode_instance]
|
|
|
|
if "humidity" in properties:
|
|
self._attr_current_humidity = properties["humidity"]
|
|
|
|
async def async_added_to_hass(self):
|
|
if item := self.config.get("current_humidity"):
|
|
on_remove = utils.track_template(self.hass, item, self.on_track_template)
|
|
self.async_on_remove(on_remove)
|
|
|
|
def on_track_template(self, value):
|
|
try:
|
|
self._attr_current_humidity = int(value)
|
|
except:
|
|
self._attr_current_humidity = None
|
|
self._async_write_ha_state()
|
|
|
|
async def async_set_humidity(self, humidity: int) -> None:
|
|
await self.device_action("humidity", humidity)
|
|
|
|
async def async_set_mode(self, mode: str) -> None:
|
|
await self.device_action(self.mode_instance, mode)
|
|
|
|
async def async_turn_on(self, **kwargs):
|
|
await self.device_action("on", True)
|
|
|
|
async def async_turn_off(self, **kwargs):
|
|
await self.device_action("on", False)
|