Migrate humidifier device classes to StrEnum (#60706)
Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
This commit is contained in:
parent
eeafa36abc
commit
c6cbfe8c37
3 changed files with 33 additions and 12 deletions
|
@ -1,12 +1,8 @@
|
||||||
"""Demo platform that offers a fake humidifier device."""
|
"""Demo platform that offers a fake humidifier device."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from homeassistant.components.humidifier import HumidifierEntity
|
from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity
|
||||||
from homeassistant.components.humidifier.const import (
|
from homeassistant.components.humidifier.const import SUPPORT_MODES
|
||||||
DEVICE_CLASS_DEHUMIDIFIER,
|
|
||||||
DEVICE_CLASS_HUMIDIFIER,
|
|
||||||
SUPPORT_MODES,
|
|
||||||
)
|
|
||||||
|
|
||||||
SUPPORT_FLAGS = 0
|
SUPPORT_FLAGS = 0
|
||||||
|
|
||||||
|
@ -19,13 +15,13 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
|
||||||
name="Humidifier",
|
name="Humidifier",
|
||||||
mode=None,
|
mode=None,
|
||||||
target_humidity=68,
|
target_humidity=68,
|
||||||
device_class=DEVICE_CLASS_HUMIDIFIER,
|
device_class=HumidifierDeviceClass.HUMIDIFIER,
|
||||||
),
|
),
|
||||||
DemoHumidifier(
|
DemoHumidifier(
|
||||||
name="Dehumidifier",
|
name="Dehumidifier",
|
||||||
mode=None,
|
mode=None,
|
||||||
target_humidity=54,
|
target_humidity=54,
|
||||||
device_class=DEVICE_CLASS_DEHUMIDIFIER,
|
device_class=HumidifierDeviceClass.DEHUMIDIFIER,
|
||||||
),
|
),
|
||||||
DemoHumidifier(
|
DemoHumidifier(
|
||||||
name="Hygrostat",
|
name="Hygrostat",
|
||||||
|
@ -54,7 +50,7 @@ class DemoHumidifier(HumidifierEntity):
|
||||||
target_humidity: int,
|
target_humidity: int,
|
||||||
available_modes: list[str] | None = None,
|
available_modes: list[str] | None = None,
|
||||||
is_on: bool = True,
|
is_on: bool = True,
|
||||||
device_class: str | None = None,
|
device_class: HumidifierDeviceClass | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize the humidifier device."""
|
"""Initialize the humidifier device."""
|
||||||
self._attr_name = name
|
self._attr_name = name
|
||||||
|
|
|
@ -26,8 +26,9 @@ from homeassistant.helpers.entity import ToggleEntity, ToggleEntityDescription
|
||||||
from homeassistant.helpers.entity_component import EntityComponent
|
from homeassistant.helpers.entity_component import EntityComponent
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.loader import bind_hass
|
from homeassistant.loader import bind_hass
|
||||||
|
from homeassistant.util.enum import StrEnum
|
||||||
|
|
||||||
from .const import (
|
from .const import ( # noqa: F401
|
||||||
ATTR_AVAILABLE_MODES,
|
ATTR_AVAILABLE_MODES,
|
||||||
ATTR_HUMIDITY,
|
ATTR_HUMIDITY,
|
||||||
ATTR_MAX_HUMIDITY,
|
ATTR_MAX_HUMIDITY,
|
||||||
|
@ -49,9 +50,19 @@ SCAN_INTERVAL = timedelta(seconds=60)
|
||||||
|
|
||||||
ENTITY_ID_FORMAT = DOMAIN + ".{}"
|
ENTITY_ID_FORMAT = DOMAIN + ".{}"
|
||||||
|
|
||||||
DEVICE_CLASSES = [DEVICE_CLASS_HUMIDIFIER, DEVICE_CLASS_DEHUMIDIFIER]
|
|
||||||
|
|
||||||
DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.In(DEVICE_CLASSES))
|
class HumidifierDeviceClass(StrEnum):
|
||||||
|
"""Device class for humidifiers."""
|
||||||
|
|
||||||
|
HUMIDIFIER = "humidifier"
|
||||||
|
DEHUMIDIFIER = "dehumidifier"
|
||||||
|
|
||||||
|
|
||||||
|
DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.Coerce(HumidifierDeviceClass))
|
||||||
|
|
||||||
|
# DEVICE_CLASSES below is deprecated as of 2021.12
|
||||||
|
# use the HumidifierDeviceClass enum instead.
|
||||||
|
DEVICE_CLASSES = [cls.value for cls in HumidifierDeviceClass]
|
||||||
|
|
||||||
|
|
||||||
@bind_hass
|
@bind_hass
|
||||||
|
@ -108,12 +119,15 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
class HumidifierEntityDescription(ToggleEntityDescription):
|
class HumidifierEntityDescription(ToggleEntityDescription):
|
||||||
"""A class that describes humidifier entities."""
|
"""A class that describes humidifier entities."""
|
||||||
|
|
||||||
|
device_class: HumidifierDeviceClass | str | None = None
|
||||||
|
|
||||||
|
|
||||||
class HumidifierEntity(ToggleEntity):
|
class HumidifierEntity(ToggleEntity):
|
||||||
"""Base class for humidifier entities."""
|
"""Base class for humidifier entities."""
|
||||||
|
|
||||||
entity_description: HumidifierEntityDescription
|
entity_description: HumidifierEntityDescription
|
||||||
_attr_available_modes: list[str] | None
|
_attr_available_modes: list[str] | None
|
||||||
|
_attr_device_class: HumidifierDeviceClass | str | None
|
||||||
_attr_max_humidity: int = DEFAULT_MAX_HUMIDITY
|
_attr_max_humidity: int = DEFAULT_MAX_HUMIDITY
|
||||||
_attr_min_humidity: int = DEFAULT_MIN_HUMIDITY
|
_attr_min_humidity: int = DEFAULT_MIN_HUMIDITY
|
||||||
_attr_mode: str | None
|
_attr_mode: str | None
|
||||||
|
@ -133,6 +147,15 @@ class HumidifierEntity(ToggleEntity):
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self) -> HumidifierDeviceClass | str | None:
|
||||||
|
"""Return the class of this entity."""
|
||||||
|
if hasattr(self, "_attr_device_class"):
|
||||||
|
return self._attr_device_class
|
||||||
|
if hasattr(self, "entity_description"):
|
||||||
|
return self.entity_description.device_class
|
||||||
|
return None
|
||||||
|
|
||||||
@final
|
@final
|
||||||
@property
|
@property
|
||||||
def state_attributes(self) -> dict[str, Any]:
|
def state_attributes(self) -> dict[str, Any]:
|
||||||
|
|
|
@ -19,6 +19,8 @@ DEFAULT_MAX_HUMIDITY = 100
|
||||||
|
|
||||||
DOMAIN = "humidifier"
|
DOMAIN = "humidifier"
|
||||||
|
|
||||||
|
# DEVICE_CLASS_* below are deprecated as of 2021.12
|
||||||
|
# use the HumidifierDeviceClass enum instead.
|
||||||
DEVICE_CLASS_HUMIDIFIER = "humidifier"
|
DEVICE_CLASS_HUMIDIFIER = "humidifier"
|
||||||
DEVICE_CLASS_DEHUMIDIFIER = "dehumidifier"
|
DEVICE_CLASS_DEHUMIDIFIER = "dehumidifier"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue