diff --git a/homeassistant/components/demo/humidifier.py b/homeassistant/components/demo/humidifier.py index 7ee5c0fc6ef..9065c5971fb 100644 --- a/homeassistant/components/demo/humidifier.py +++ b/homeassistant/components/demo/humidifier.py @@ -1,12 +1,8 @@ """Demo platform that offers a fake humidifier device.""" from __future__ import annotations -from homeassistant.components.humidifier import HumidifierEntity -from homeassistant.components.humidifier.const import ( - DEVICE_CLASS_DEHUMIDIFIER, - DEVICE_CLASS_HUMIDIFIER, - SUPPORT_MODES, -) +from homeassistant.components.humidifier import HumidifierDeviceClass, HumidifierEntity +from homeassistant.components.humidifier.const import SUPPORT_MODES SUPPORT_FLAGS = 0 @@ -19,13 +15,13 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= name="Humidifier", mode=None, target_humidity=68, - device_class=DEVICE_CLASS_HUMIDIFIER, + device_class=HumidifierDeviceClass.HUMIDIFIER, ), DemoHumidifier( name="Dehumidifier", mode=None, target_humidity=54, - device_class=DEVICE_CLASS_DEHUMIDIFIER, + device_class=HumidifierDeviceClass.DEHUMIDIFIER, ), DemoHumidifier( name="Hygrostat", @@ -54,7 +50,7 @@ class DemoHumidifier(HumidifierEntity): target_humidity: int, available_modes: list[str] | None = None, is_on: bool = True, - device_class: str | None = None, + device_class: HumidifierDeviceClass | None = None, ) -> None: """Initialize the humidifier device.""" self._attr_name = name diff --git a/homeassistant/components/humidifier/__init__.py b/homeassistant/components/humidifier/__init__.py index 48a71662be1..e6ec8dc72f2 100644 --- a/homeassistant/components/humidifier/__init__.py +++ b/homeassistant/components/humidifier/__init__.py @@ -26,8 +26,9 @@ from homeassistant.helpers.entity import ToggleEntity, ToggleEntityDescription from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.typing import ConfigType from homeassistant.loader import bind_hass +from homeassistant.util.enum import StrEnum -from .const import ( +from .const import ( # noqa: F401 ATTR_AVAILABLE_MODES, ATTR_HUMIDITY, ATTR_MAX_HUMIDITY, @@ -49,9 +50,19 @@ SCAN_INTERVAL = timedelta(seconds=60) 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 @@ -108,12 +119,15 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: class HumidifierEntityDescription(ToggleEntityDescription): """A class that describes humidifier entities.""" + device_class: HumidifierDeviceClass | str | None = None + class HumidifierEntity(ToggleEntity): """Base class for humidifier entities.""" entity_description: HumidifierEntityDescription _attr_available_modes: list[str] | None + _attr_device_class: HumidifierDeviceClass | str | None _attr_max_humidity: int = DEFAULT_MAX_HUMIDITY _attr_min_humidity: int = DEFAULT_MIN_HUMIDITY _attr_mode: str | None @@ -133,6 +147,15 @@ class HumidifierEntity(ToggleEntity): 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 @property def state_attributes(self) -> dict[str, Any]: diff --git a/homeassistant/components/humidifier/const.py b/homeassistant/components/humidifier/const.py index c2508770187..a3df2756af9 100644 --- a/homeassistant/components/humidifier/const.py +++ b/homeassistant/components/humidifier/const.py @@ -19,6 +19,8 @@ DEFAULT_MAX_HUMIDITY = 100 DOMAIN = "humidifier" +# DEVICE_CLASS_* below are deprecated as of 2021.12 +# use the HumidifierDeviceClass enum instead. DEVICE_CLASS_HUMIDIFIER = "humidifier" DEVICE_CLASS_DEHUMIDIFIER = "dehumidifier"