Reformat with black
This commit is contained in:
		@@ -28,7 +28,9 @@ CONFIG_SCHEMA = vol.Schema(
 | 
			
		||||
 | 
			
		||||
async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry):
 | 
			
		||||
    session = aiohttp_client.async_get_clientsession(hass)
 | 
			
		||||
    hon = await Hon(entry.data["email"], entry.data["password"], session=session).create()
 | 
			
		||||
    hon = await Hon(
 | 
			
		||||
        entry.data["email"], entry.data["password"], session=session
 | 
			
		||||
    ).create()
 | 
			
		||||
    hass.data.setdefault(DOMAIN, {})
 | 
			
		||||
    hass.data[DOMAIN][entry.unique_id] = hon
 | 
			
		||||
    hass.data[DOMAIN]["coordinators"] = {}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,11 @@ from dataclasses import dataclass
 | 
			
		||||
 | 
			
		||||
from pyhon import Hon
 | 
			
		||||
 | 
			
		||||
from homeassistant.components.binary_sensor import BinarySensorEntityDescription, BinarySensorDeviceClass, \
 | 
			
		||||
    BinarySensorEntity
 | 
			
		||||
from homeassistant.components.binary_sensor import (
 | 
			
		||||
    BinarySensorEntityDescription,
 | 
			
		||||
    BinarySensorDeviceClass,
 | 
			
		||||
    BinarySensorEntity,
 | 
			
		||||
)
 | 
			
		||||
from homeassistant.config_entries import ConfigEntry
 | 
			
		||||
from homeassistant.core import callback
 | 
			
		||||
from .const import DOMAIN
 | 
			
		||||
@@ -19,7 +22,9 @@ class HonBinarySensorEntityDescriptionMixin:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class HonBinarySensorEntityDescription(HonBinarySensorEntityDescriptionMixin, BinarySensorEntityDescription):
 | 
			
		||||
class HonBinarySensorEntityDescription(
 | 
			
		||||
    HonBinarySensorEntityDescriptionMixin, BinarySensorEntityDescription
 | 
			
		||||
):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -30,7 +35,7 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
 | 
			
		||||
            name="Remote Control",
 | 
			
		||||
            device_class=BinarySensorDeviceClass.CONNECTIVITY,
 | 
			
		||||
            on_value="CONNECTED",
 | 
			
		||||
            icon="mdi:remote"
 | 
			
		||||
            icon="mdi:remote",
 | 
			
		||||
        ),
 | 
			
		||||
        HonBinarySensorEntityDescription(
 | 
			
		||||
            key="doorLockStatus",
 | 
			
		||||
@@ -65,7 +70,7 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
 | 
			
		||||
            name="Remote Control",
 | 
			
		||||
            device_class=BinarySensorDeviceClass.CONNECTIVITY,
 | 
			
		||||
            on_value="CONNECTED",
 | 
			
		||||
            icon="mdi:remote"
 | 
			
		||||
            icon="mdi:remote",
 | 
			
		||||
        ),
 | 
			
		||||
        HonBinarySensorEntityDescription(
 | 
			
		||||
            key="startProgram.prewash",
 | 
			
		||||
@@ -102,21 +107,21 @@ BINARY_SENSORS: dict[str, tuple[HonBinarySensorEntityDescription, ...]] = {
 | 
			
		||||
            name="Online",
 | 
			
		||||
            device_class=BinarySensorDeviceClass.CONNECTIVITY,
 | 
			
		||||
            on_value="CONNECTED",
 | 
			
		||||
            icon="mdi:wifi"
 | 
			
		||||
            icon="mdi:wifi",
 | 
			
		||||
        ),
 | 
			
		||||
        HonBinarySensorEntityDescription(
 | 
			
		||||
            key="attributes.parameters.remoteCtrValid",
 | 
			
		||||
            name="On",
 | 
			
		||||
            device_class=BinarySensorDeviceClass.CONNECTIVITY,
 | 
			
		||||
            on_value="1",
 | 
			
		||||
            icon="mdi:remote"
 | 
			
		||||
            icon="mdi:remote",
 | 
			
		||||
        ),
 | 
			
		||||
        HonBinarySensorEntityDescription(
 | 
			
		||||
            key="attributes.parameters.onOffStatus",
 | 
			
		||||
            name="On",
 | 
			
		||||
            device_class=BinarySensorDeviceClass.RUNNING,
 | 
			
		||||
            on_value="1",
 | 
			
		||||
            icon="mdi:power-cycle"
 | 
			
		||||
            icon="mdi:power-cycle",
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
}
 | 
			
		||||
@@ -137,10 +142,16 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
        if descriptions := BINARY_SENSORS.get(device.appliance_type):
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if not device.get(description.key):
 | 
			
		||||
                    _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key)
 | 
			
		||||
                    _LOGGER.warning(
 | 
			
		||||
                        "[%s] Can't setup %s", device.appliance_type, description.key
 | 
			
		||||
                    )
 | 
			
		||||
                    continue
 | 
			
		||||
                appliances.extend([
 | 
			
		||||
                    HonBinarySensorEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                appliances.extend(
 | 
			
		||||
                    [
 | 
			
		||||
                        HonBinarySensorEntity(
 | 
			
		||||
                            hass, coordinator, entry, device, description
 | 
			
		||||
                        )
 | 
			
		||||
                    ]
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
@@ -159,9 +170,15 @@ class HonBinarySensorEntity(HonEntity, BinarySensorEntity):
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_on(self) -> bool:
 | 
			
		||||
        return self._device.get(self.entity_description.key, "") == self.entity_description.on_value
 | 
			
		||||
        return (
 | 
			
		||||
            self._device.get(self.entity_description.key, "")
 | 
			
		||||
            == self.entity_description.on_value
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @callback
 | 
			
		||||
    def _handle_coordinator_update(self):
 | 
			
		||||
        self._attr_native_value = self._device.get(self.entity_description.key, "") == self.entity_description.on_value
 | 
			
		||||
        self._attr_native_value = (
 | 
			
		||||
            self._device.get(self.entity_description.key, "")
 | 
			
		||||
            == self.entity_description.on_value
 | 
			
		||||
        )
 | 
			
		||||
        self.async_write_ha_state()
 | 
			
		||||
 
 | 
			
		||||
@@ -38,15 +38,17 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if not device.commands.get(description.key):
 | 
			
		||||
                    continue
 | 
			
		||||
                appliances.extend([
 | 
			
		||||
                    HonButtonEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                appliances.extend(
 | 
			
		||||
                    [HonButtonEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HonButtonEntity(HonEntity, ButtonEntity):
 | 
			
		||||
    def __init__(self, hass, coordinator, entry, device: HonAppliance, description) -> None:
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self, hass, coordinator, entry, device: HonAppliance, description
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        super().__init__(hass, entry, coordinator, device)
 | 
			
		||||
 | 
			
		||||
        self._coordinator = coordinator
 | 
			
		||||
 
 | 
			
		||||
@@ -20,8 +20,12 @@ class HonFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
 | 
			
		||||
 | 
			
		||||
    async def async_step_user(self, user_input=None):
 | 
			
		||||
        if user_input is None:
 | 
			
		||||
            return self.async_show_form(step_id="user", data_schema=vol.Schema(
 | 
			
		||||
                {vol.Required(CONF_EMAIL): str, vol.Required(CONF_PASSWORD): str}))
 | 
			
		||||
            return self.async_show_form(
 | 
			
		||||
                step_id="user",
 | 
			
		||||
                data_schema=vol.Schema(
 | 
			
		||||
                    {vol.Required(CONF_EMAIL): str, vol.Required(CONF_PASSWORD): str}
 | 
			
		||||
                ),
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        self._email = user_input[CONF_EMAIL]
 | 
			
		||||
        self._password = user_input[CONF_PASSWORD]
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,9 @@ class HonEntity(CoordinatorEntity):
 | 
			
		||||
        return DeviceInfo(
 | 
			
		||||
            identifiers={(DOMAIN, self._device.mac_address)},
 | 
			
		||||
            manufacturer=self._device.get("brand", ""),
 | 
			
		||||
            name=self._device.nick_name if self._device.nick_name else self._device.model_name,
 | 
			
		||||
            name=self._device.nick_name
 | 
			
		||||
            if self._device.nick_name
 | 
			
		||||
            else self._device.model_name,
 | 
			
		||||
            model=self._device.model_name,
 | 
			
		||||
            sw_version=self._device.get("fwVersion", ""),
 | 
			
		||||
        )
 | 
			
		||||
@@ -38,7 +40,12 @@ class HonEntity(CoordinatorEntity):
 | 
			
		||||
class HonCoordinator(DataUpdateCoordinator):
 | 
			
		||||
    def __init__(self, hass, device: HonAppliance):
 | 
			
		||||
        """Initialize my coordinator."""
 | 
			
		||||
        super().__init__(hass, _LOGGER, name=device.mac_address, update_interval=timedelta(seconds=30))
 | 
			
		||||
        super().__init__(
 | 
			
		||||
            hass,
 | 
			
		||||
            _LOGGER,
 | 
			
		||||
            name=device.mac_address,
 | 
			
		||||
            update_interval=timedelta(seconds=30),
 | 
			
		||||
        )
 | 
			
		||||
        self._device = device
 | 
			
		||||
 | 
			
		||||
    async def _async_update_data(self):
 | 
			
		||||
 
 | 
			
		||||
@@ -9,4 +9,3 @@
 | 
			
		||||
  "requirements": ["pyhOn==0.6.2"],
 | 
			
		||||
  "version": "0.5.0-beta.3"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,20 +22,20 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
 | 
			
		||||
            name="Delay Time",
 | 
			
		||||
            icon="mdi:timer-plus",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.rinseIterations",
 | 
			
		||||
            name="Rinse Iterations",
 | 
			
		||||
            icon="mdi:rotate-right",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.mainWashTime",
 | 
			
		||||
            name="Main Wash Time",
 | 
			
		||||
            icon="mdi:clock-start",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "TD": (
 | 
			
		||||
@@ -44,34 +44,34 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
 | 
			
		||||
            name="Delay time",
 | 
			
		||||
            icon="mdi:timer-plus",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.dryLevel",
 | 
			
		||||
            name="Dry level",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:hair-dryer",
 | 
			
		||||
            translation_key="tumbledryerdrylevel"
 | 
			
		||||
            translation_key="tumbledryerdrylevel",
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.tempLevel",
 | 
			
		||||
            name="Temperature level",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:thermometer",
 | 
			
		||||
            translation_key="tumbledryertemplevel"
 | 
			
		||||
            translation_key="tumbledryertemplevel",
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.antiCreaseTime",
 | 
			
		||||
            name="Anti-Crease time",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:timer",
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.sterilizationStatus",
 | 
			
		||||
            name="Sterilization status",
 | 
			
		||||
            icon="mdi:clock-start",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "WD": (
 | 
			
		||||
@@ -80,7 +80,7 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
 | 
			
		||||
            name="Delay Time",
 | 
			
		||||
            icon="mdi:timer-plus",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "OV": (
 | 
			
		||||
@@ -89,22 +89,21 @@ NUMBERS: dict[str, tuple[NumberEntityDescription, ...]] = {
 | 
			
		||||
            name="Delay time",
 | 
			
		||||
            icon="mdi:timer-plus",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.tempSel",
 | 
			
		||||
            name="Target Temperature",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:thermometer",
 | 
			
		||||
            native_unit_of_measurement=UnitOfTemperature.CELSIUS
 | 
			
		||||
            native_unit_of_measurement=UnitOfTemperature.CELSIUS,
 | 
			
		||||
        ),
 | 
			
		||||
 | 
			
		||||
        NumberEntityDescription(
 | 
			
		||||
            key="startProgram.prTime",
 | 
			
		||||
            name="Program Duration",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:timelapse",
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            native_unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
}
 | 
			
		||||
@@ -126,8 +125,8 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if not device.settings.get(description.key):
 | 
			
		||||
                    continue
 | 
			
		||||
                appliances.extend([
 | 
			
		||||
                    HonNumberEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                appliances.extend(
 | 
			
		||||
                    [HonNumberEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
 
 | 
			
		||||
@@ -24,20 +24,20 @@ SELECTS = {
 | 
			
		||||
            name="Spin speed",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:numeric",
 | 
			
		||||
            unit_of_measurement=REVOLUTIONS_PER_MINUTE
 | 
			
		||||
            unit_of_measurement=REVOLUTIONS_PER_MINUTE,
 | 
			
		||||
        ),
 | 
			
		||||
        SelectEntityDescription(
 | 
			
		||||
            key="startProgram.temp",
 | 
			
		||||
            name="Temperature",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:thermometer",
 | 
			
		||||
            unit_of_measurement=UnitOfTemperature.CELSIUS
 | 
			
		||||
            unit_of_measurement=UnitOfTemperature.CELSIUS,
 | 
			
		||||
        ),
 | 
			
		||||
        SelectEntityDescription(
 | 
			
		||||
            key="startProgram.program",
 | 
			
		||||
            name="Program",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            translation_key="programs"
 | 
			
		||||
            translation_key="programs",
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "TD": (
 | 
			
		||||
@@ -45,14 +45,14 @@ SELECTS = {
 | 
			
		||||
            key="startProgram.program",
 | 
			
		||||
            name="Program",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            translation_key="programs"
 | 
			
		||||
            translation_key="programs",
 | 
			
		||||
        ),
 | 
			
		||||
        SelectEntityDescription(
 | 
			
		||||
            key="startProgram.dryTimeMM",
 | 
			
		||||
            name="Time",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            icon="mdi:timer",
 | 
			
		||||
            unit_of_measurement=UnitOfTime.MINUTES
 | 
			
		||||
            unit_of_measurement=UnitOfTime.MINUTES,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "WD": (
 | 
			
		||||
@@ -60,7 +60,7 @@ SELECTS = {
 | 
			
		||||
            key="startProgram.program",
 | 
			
		||||
            name="Program",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            translation_key="programs"
 | 
			
		||||
            translation_key="programs",
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "OV": (
 | 
			
		||||
@@ -72,7 +72,7 @@ SELECTS = {
 | 
			
		||||
        SelectEntityDescription(
 | 
			
		||||
            key="startProgram.preheatStatus",
 | 
			
		||||
            name="Preheat",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
}
 | 
			
		||||
@@ -94,14 +94,16 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if not device.settings.get(description.key):
 | 
			
		||||
                    continue
 | 
			
		||||
                appliances.extend([
 | 
			
		||||
                    HonSelectEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                appliances.extend(
 | 
			
		||||
                    [HonSelectEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                )
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class HonSelectEntity(HonEntity, SelectEntity):
 | 
			
		||||
    def __init__(self, hass, coordinator, entry, device: HonAppliance, description) -> None:
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self, hass, coordinator, entry, device: HonAppliance, description
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        super().__init__(hass, entry, coordinator, device)
 | 
			
		||||
 | 
			
		||||
        self._coordinator = coordinator
 | 
			
		||||
@@ -128,7 +130,9 @@ class HonSelectEntity(HonEntity, SelectEntity):
 | 
			
		||||
    @callback
 | 
			
		||||
    def _handle_coordinator_update(self):
 | 
			
		||||
        setting = self._device.settings[self.entity_description.key]
 | 
			
		||||
        if not isinstance(self._device.settings[self.entity_description.key], HonParameterFixed):
 | 
			
		||||
        if not isinstance(
 | 
			
		||||
            self._device.settings[self.entity_description.key], HonParameterFixed
 | 
			
		||||
        ):
 | 
			
		||||
            self._attr_options: list[str] = setting.values
 | 
			
		||||
        else:
 | 
			
		||||
            self._attr_options = [setting.value]
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ from homeassistant.const import (
 | 
			
		||||
    UnitOfMass,
 | 
			
		||||
    UnitOfPower,
 | 
			
		||||
    UnitOfTime,
 | 
			
		||||
    UnitOfTemperature
 | 
			
		||||
    UnitOfTemperature,
 | 
			
		||||
)
 | 
			
		||||
from homeassistant.core import callback
 | 
			
		||||
from homeassistant.helpers.entity import EntityCategory
 | 
			
		||||
@@ -34,20 +34,20 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            name="Total Power",
 | 
			
		||||
            device_class=SensorDeviceClass.ENERGY,
 | 
			
		||||
            state_class=SensorStateClass.TOTAL_INCREASING,
 | 
			
		||||
            native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR
 | 
			
		||||
            native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="totalWaterUsed",
 | 
			
		||||
            name="Total Water",
 | 
			
		||||
            device_class=SensorDeviceClass.WATER,
 | 
			
		||||
            state_class=SensorStateClass.TOTAL_INCREASING,
 | 
			
		||||
            native_unit_of_measurement=UnitOfVolume.LITERS
 | 
			
		||||
            native_unit_of_measurement=UnitOfVolume.LITERS,
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="totalWashCycle",
 | 
			
		||||
            name="Total Wash Cycle",
 | 
			
		||||
            state_class=SensorStateClass.TOTAL_INCREASING,
 | 
			
		||||
            icon="mdi:counter"
 | 
			
		||||
            icon="mdi:counter",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="currentElectricityUsed",
 | 
			
		||||
@@ -55,13 +55,13 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            state_class=SensorStateClass.MEASUREMENT,
 | 
			
		||||
            device_class=SensorDeviceClass.POWER,
 | 
			
		||||
            native_unit_of_measurement=UnitOfPower.KILO_WATT,
 | 
			
		||||
            icon="mdi:lightning-bolt"
 | 
			
		||||
            icon="mdi:lightning-bolt",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="currentWaterUsed",
 | 
			
		||||
            name="Current Water Used",
 | 
			
		||||
            state_class=SensorStateClass.MEASUREMENT,
 | 
			
		||||
            icon="mdi:water"
 | 
			
		||||
            icon="mdi:water",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="startProgram.weight",
 | 
			
		||||
@@ -69,19 +69,16 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            state_class=SensorStateClass.MEASUREMENT,
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
            native_unit_of_measurement=UnitOfMass.KILOGRAMS,
 | 
			
		||||
            icon="mdi:weight-kilogram"
 | 
			
		||||
            icon="mdi:weight-kilogram",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="machMode",
 | 
			
		||||
            name="Machine Status",
 | 
			
		||||
            icon="mdi:information",
 | 
			
		||||
            translation_key="mode"
 | 
			
		||||
            translation_key="mode",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="errors",
 | 
			
		||||
            name="Error",
 | 
			
		||||
            icon="mdi:math-log",
 | 
			
		||||
            translation_key="errors"
 | 
			
		||||
            key="errors", name="Error", icon="mdi:math-log", translation_key="errors"
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="remainingTimeMM",
 | 
			
		||||
@@ -103,13 +100,10 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            key="machMode",
 | 
			
		||||
            name="Machine Status",
 | 
			
		||||
            icon="mdi:information",
 | 
			
		||||
            translation_key="mode"
 | 
			
		||||
            translation_key="mode",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="errors",
 | 
			
		||||
            name="Error",
 | 
			
		||||
            icon="mdi:math-log",
 | 
			
		||||
            translation_key="errors"
 | 
			
		||||
            key="errors", name="Error", icon="mdi:math-log", translation_key="errors"
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="remainingTimeMM",
 | 
			
		||||
@@ -129,25 +123,25 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            key="prCode",
 | 
			
		||||
            name="Program",
 | 
			
		||||
            icon="mdi:tumble-dryer",
 | 
			
		||||
            translation_key="tumbledryerprogram"
 | 
			
		||||
            translation_key="tumbledryerprogram",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="prPhase",
 | 
			
		||||
            name="Program Phase",
 | 
			
		||||
            icon="mdi:tumble-dryer",
 | 
			
		||||
            translation_key="tumbledryerprogramphase"
 | 
			
		||||
            translation_key="tumbledryerprogramphase",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="dryLevel",
 | 
			
		||||
            name="Dry level",
 | 
			
		||||
            icon="mdi:hair-dryer",
 | 
			
		||||
            translation_key="tumbledryerdrylevel"
 | 
			
		||||
            translation_key="tumbledryerdrylevel",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="tempLevel",
 | 
			
		||||
            name="Temperature level",
 | 
			
		||||
            icon="mdi:thermometer",
 | 
			
		||||
            translation_key="tumbledryertemplevel"
 | 
			
		||||
            translation_key="tumbledryertemplevel",
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "WD": (
 | 
			
		||||
@@ -155,7 +149,7 @@ SENSORS: dict[str, tuple[SensorEntityDescription, ...]] = {
 | 
			
		||||
            key="machMode",
 | 
			
		||||
            name="Machine Status",
 | 
			
		||||
            icon="mdi:information",
 | 
			
		||||
            translation_key="mode"
 | 
			
		||||
            translation_key="mode",
 | 
			
		||||
        ),
 | 
			
		||||
        SensorEntityDescription(
 | 
			
		||||
            key="spinSpeed",
 | 
			
		||||
@@ -245,10 +239,12 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
        if descriptions := SENSORS.get(device.appliance_type):
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if not device.get(description.key):
 | 
			
		||||
                    _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key)
 | 
			
		||||
                    _LOGGER.warning(
 | 
			
		||||
                        "[%s] Can't setup %s", device.appliance_type, description.key
 | 
			
		||||
                    )
 | 
			
		||||
                    continue
 | 
			
		||||
                appliances.extend([
 | 
			
		||||
                    HonSensorEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                appliances.extend(
 | 
			
		||||
                    [HonSensorEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
 
 | 
			
		||||
@@ -22,9 +22,9 @@ class HonSwitchEntityDescriptionMixin:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@dataclass
 | 
			
		||||
class HonSwitchEntityDescription(HonSwitchEntityDescriptionMixin,
 | 
			
		||||
                                 SwitchEntityDescription
 | 
			
		||||
                                 ):
 | 
			
		||||
class HonSwitchEntityDescription(
 | 
			
		||||
    HonSwitchEntityDescriptionMixin, SwitchEntityDescription
 | 
			
		||||
):
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -48,13 +48,13 @@ SWITCHES: dict[str, tuple[HonSwitchEntityDescription, ...]] = {
 | 
			
		||||
            key="startProgram.delayStatus",
 | 
			
		||||
            name="Delay Status",
 | 
			
		||||
            icon="mdi:timer-check",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
        ),
 | 
			
		||||
        HonSwitchEntityDescription(
 | 
			
		||||
            key="startProgram.haier_SoakPrewashSelection",
 | 
			
		||||
            name="Soak Prewash Selection",
 | 
			
		||||
            icon="mdi:tshirt-crew",
 | 
			
		||||
            entity_category=EntityCategory.CONFIG
 | 
			
		||||
            entity_category=EntityCategory.CONFIG,
 | 
			
		||||
        ),
 | 
			
		||||
    ),
 | 
			
		||||
    "TD": (
 | 
			
		||||
@@ -106,12 +106,17 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
 | 
			
		||||
        if descriptions := SWITCHES.get(device.appliance_type):
 | 
			
		||||
            for description in descriptions:
 | 
			
		||||
                if device.get(description.key) is not None or device.commands.get(description.key) is not None:
 | 
			
		||||
                    appliances.extend([
 | 
			
		||||
                        HonSwitchEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                if (
 | 
			
		||||
                    device.get(description.key) is not None
 | 
			
		||||
                    or device.commands.get(description.key) is not None
 | 
			
		||||
                ):
 | 
			
		||||
                    appliances.extend(
 | 
			
		||||
                        [HonSwitchEntity(hass, coordinator, entry, device, description)]
 | 
			
		||||
                    )
 | 
			
		||||
                else:
 | 
			
		||||
                    _LOGGER.warning("[%s] Can't setup %s", device.appliance_type, description.key)
 | 
			
		||||
                    _LOGGER.warning(
 | 
			
		||||
                        "[%s] Can't setup %s", device.appliance_type, description.key
 | 
			
		||||
                    )
 | 
			
		||||
 | 
			
		||||
    async_add_entities(appliances)
 | 
			
		||||
 | 
			
		||||
@@ -119,7 +124,14 @@ async def async_setup_entry(hass, entry: ConfigEntry, async_add_entities) -> Non
 | 
			
		||||
class HonSwitchEntity(HonEntity, SwitchEntity):
 | 
			
		||||
    entity_description: HonSwitchEntityDescription
 | 
			
		||||
 | 
			
		||||
    def __init__(self, hass, coordinator, entry, device: HonAppliance, description: HonSwitchEntityDescription) -> None:
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self,
 | 
			
		||||
        hass,
 | 
			
		||||
        coordinator,
 | 
			
		||||
        entry,
 | 
			
		||||
        device: HonAppliance,
 | 
			
		||||
        description: HonSwitchEntityDescription,
 | 
			
		||||
    ) -> None:
 | 
			
		||||
        super().__init__(hass, entry, coordinator, device)
 | 
			
		||||
        self._coordinator = coordinator
 | 
			
		||||
        self._device = device
 | 
			
		||||
@@ -128,7 +140,9 @@ class HonSwitchEntity(HonEntity, SwitchEntity):
 | 
			
		||||
 | 
			
		||||
    def available(self) -> bool:
 | 
			
		||||
        if self.entity_category == EntityCategory.CONFIG:
 | 
			
		||||
            return self._device.settings[self.entity_description.key].typology != "fixed"
 | 
			
		||||
            return (
 | 
			
		||||
                self._device.settings[self.entity_description.key].typology != "fixed"
 | 
			
		||||
            )
 | 
			
		||||
        return True
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
@@ -136,7 +150,11 @@ class HonSwitchEntity(HonEntity, SwitchEntity):
 | 
			
		||||
        """Return True if entity is on."""
 | 
			
		||||
        if self.entity_category == EntityCategory.CONFIG:
 | 
			
		||||
            setting = self._device.settings[self.entity_description.key]
 | 
			
		||||
            return setting.value == "1" or hasattr(setting, "min") and setting.value != setting.min
 | 
			
		||||
            return (
 | 
			
		||||
                setting.value == "1"
 | 
			
		||||
                or hasattr(setting, "min")
 | 
			
		||||
                and setting.value != setting.min
 | 
			
		||||
            )
 | 
			
		||||
        return self._device.get(self.entity_description.key, False)
 | 
			
		||||
 | 
			
		||||
    async def async_turn_on(self, **kwargs: Any) -> None:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user