core/homeassistant/components/switchbot/humidifier.py

71 lines
2.3 KiB
Python

"""Support for Switchbot humidifier."""
from __future__ import annotations
import logging
import switchbot
from homeassistant.components.humidifier import (
MODE_AUTO,
MODE_NORMAL,
HumidifierDeviceClass,
HumidifierEntity,
HumidifierEntityFeature,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .coordinator import SwitchbotDataUpdateCoordinator
from .entity import SwitchbotSwitchedEntity
PARALLEL_UPDATES = 0
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry(
hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
) -> None:
"""Set up Switchbot based on a config entry."""
coordinator: SwitchbotDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
async_add_entities([SwitchBotHumidifier(coordinator)])
class SwitchBotHumidifier(SwitchbotSwitchedEntity, HumidifierEntity):
"""Representation of a Switchbot humidifier."""
_attr_supported_features = HumidifierEntityFeature.MODES
_attr_device_class = HumidifierDeviceClass.HUMIDIFIER
_attr_available_modes = [MODE_NORMAL, MODE_AUTO]
_device: switchbot.SwitchbotHumidifier
_attr_min_humidity = 1
@property
def is_on(self) -> bool | None:
"""Return true if device is on."""
return self._device.is_on()
@property
def mode(self) -> str:
"""Return the humidity we try to reach."""
return MODE_AUTO if self._device.is_auto() else MODE_NORMAL
@property
def target_humidity(self) -> int | None:
"""Return the humidity we try to reach."""
return self._device.get_target_humidity()
async def async_set_humidity(self, humidity: int) -> None:
"""Set new target humidity."""
self._last_run_success = bool(await self._device.set_level(humidity))
self.async_write_ha_state()
async def async_set_mode(self, mode: str) -> None:
"""Set new target humidity."""
if mode == MODE_AUTO:
self._last_run_success = await self._device.async_set_auto()
else:
self._last_run_success = await self._device.async_set_manual()
self.async_write_ha_state()