Use enums in xiaomi_miio (#61979)

This commit is contained in:
Robert Hillis 2021-12-16 16:31:51 -05:00 committed by GitHub
parent 32e1a3d063
commit 83cb2d11d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 101 additions and 115 deletions

View file

@ -6,14 +6,12 @@ from dataclasses import dataclass
import logging import logging
from homeassistant.components.binary_sensor import ( from homeassistant.components.binary_sensor import (
DEVICE_CLASS_CONNECTIVITY, BinarySensorDeviceClass,
DEVICE_CLASS_PLUG,
DEVICE_CLASS_PROBLEM,
BinarySensorEntity, BinarySensorEntity,
BinarySensorEntityDescription, BinarySensorEntityDescription,
) )
from homeassistant.const import ENTITY_CATEGORY_DIAGNOSTIC
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import EntityCategory
from . import VacuumCoordinatorDataAttributes from . import VacuumCoordinatorDataAttributes
from .const import ( from .const import (
@ -56,21 +54,21 @@ BINARY_SENSOR_TYPES = (
key=ATTR_NO_WATER, key=ATTR_NO_WATER,
name="Water Tank Empty", name="Water Tank Empty",
icon="mdi:water-off-outline", icon="mdi:water-off-outline",
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
XiaomiMiioBinarySensorDescription( XiaomiMiioBinarySensorDescription(
key=ATTR_WATER_TANK_DETACHED, key=ATTR_WATER_TANK_DETACHED,
name="Water Tank", name="Water Tank",
icon="mdi:car-coolant-level", icon="mdi:car-coolant-level",
device_class=DEVICE_CLASS_CONNECTIVITY, device_class=BinarySensorDeviceClass.CONNECTIVITY,
value=lambda value: not value, value=lambda value: not value,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
XiaomiMiioBinarySensorDescription( XiaomiMiioBinarySensorDescription(
key=ATTR_POWERSUPPLY_ATTACHED, key=ATTR_POWERSUPPLY_ATTACHED,
name="Power Supply", name="Power Supply",
device_class=DEVICE_CLASS_PLUG, device_class=BinarySensorDeviceClass.PLUG,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
) )
@ -83,8 +81,8 @@ VACUUM_SENSORS = {
icon="mdi:square-rounded", icon="mdi:square-rounded",
parent_key=VacuumCoordinatorDataAttributes.status, parent_key=VacuumCoordinatorDataAttributes.status,
entity_registry_enabled_default=True, entity_registry_enabled_default=True,
device_class=DEVICE_CLASS_CONNECTIVITY, device_class=BinarySensorDeviceClass.CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_WATER_BOX_ATTACHED: XiaomiMiioBinarySensorDescription( ATTR_WATER_BOX_ATTACHED: XiaomiMiioBinarySensorDescription(
key=ATTR_WATER_BOX_ATTACHED, key=ATTR_WATER_BOX_ATTACHED,
@ -92,8 +90,8 @@ VACUUM_SENSORS = {
icon="mdi:water", icon="mdi:water",
parent_key=VacuumCoordinatorDataAttributes.status, parent_key=VacuumCoordinatorDataAttributes.status,
entity_registry_enabled_default=True, entity_registry_enabled_default=True,
device_class=DEVICE_CLASS_CONNECTIVITY, device_class=BinarySensorDeviceClass.CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_WATER_SHORTAGE: XiaomiMiioBinarySensorDescription( ATTR_WATER_SHORTAGE: XiaomiMiioBinarySensorDescription(
key=ATTR_WATER_SHORTAGE, key=ATTR_WATER_SHORTAGE,
@ -101,8 +99,8 @@ VACUUM_SENSORS = {
icon="mdi:water", icon="mdi:water",
parent_key=VacuumCoordinatorDataAttributes.status, parent_key=VacuumCoordinatorDataAttributes.status,
entity_registry_enabled_default=True, entity_registry_enabled_default=True,
device_class=DEVICE_CLASS_PROBLEM, device_class=BinarySensorDeviceClass.PROBLEM,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
} }
@ -114,8 +112,8 @@ VACUUM_SENSORS_SEPARATE_MOP = {
icon="mdi:square-rounded", icon="mdi:square-rounded",
parent_key=VacuumCoordinatorDataAttributes.status, parent_key=VacuumCoordinatorDataAttributes.status,
entity_registry_enabled_default=True, entity_registry_enabled_default=True,
device_class=DEVICE_CLASS_CONNECTIVITY, device_class=BinarySensorDeviceClass.CONNECTIVITY,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
} }

View file

@ -6,11 +6,8 @@ from miio.airhumidifier import OperationMode as AirhumidifierOperationMode
from miio.airhumidifier_miot import OperationMode as AirhumidifierMiotOperationMode from miio.airhumidifier_miot import OperationMode as AirhumidifierMiotOperationMode
from miio.airhumidifier_mjjsq import OperationMode as AirhumidifierMjjsqOperationMode from miio.airhumidifier_mjjsq import OperationMode as AirhumidifierMjjsqOperationMode
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_HUMIDIFIER,
SUPPORT_MODES,
)
from homeassistant.const import ATTR_MODE from homeassistant.const import ATTR_MODE
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.util.percentage import percentage_to_ranged_value from homeassistant.util.percentage import percentage_to_ranged_value
@ -105,7 +102,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
class XiaomiGenericHumidifier(XiaomiCoordinatedMiioEntity, HumidifierEntity): class XiaomiGenericHumidifier(XiaomiCoordinatedMiioEntity, HumidifierEntity):
"""Representation of a generic Xiaomi humidifier device.""" """Representation of a generic Xiaomi humidifier device."""
_attr_device_class = DEVICE_CLASS_HUMIDIFIER _attr_device_class = HumidifierDeviceClass.HUMIDIFIER
_attr_supported_features = SUPPORT_MODES _attr_supported_features = SUPPORT_MODES
def __init__(self, name, device, entry, unique_id, coordinator): def __init__(self, name, device, entry, unique_id, coordinator):

View file

@ -4,8 +4,9 @@ from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from homeassistant.components.number import NumberEntity, NumberEntityDescription from homeassistant.components.number import NumberEntity, NumberEntityDescription
from homeassistant.const import DEGREE, ENTITY_CATEGORY_CONFIG, TIME_MINUTES from homeassistant.const import DEGREE, TIME_MINUTES
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import EntityCategory
from .const import ( from .const import (
CONF_DEVICE, CONF_DEVICE,
@ -106,7 +107,7 @@ NUMBER_TYPES = {
step=10, step=10,
available_with_device_off=False, available_with_device_off=False,
method="async_set_motor_speed", method="async_set_motor_speed",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_FAVORITE_LEVEL: XiaomiMiioNumberDescription( FEATURE_SET_FAVORITE_LEVEL: XiaomiMiioNumberDescription(
key=ATTR_FAVORITE_LEVEL, key=ATTR_FAVORITE_LEVEL,
@ -116,7 +117,7 @@ NUMBER_TYPES = {
max_value=17, max_value=17,
step=1, step=1,
method="async_set_favorite_level", method="async_set_favorite_level",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_FAN_LEVEL: XiaomiMiioNumberDescription( FEATURE_SET_FAN_LEVEL: XiaomiMiioNumberDescription(
key=ATTR_FAN_LEVEL, key=ATTR_FAN_LEVEL,
@ -126,7 +127,7 @@ NUMBER_TYPES = {
max_value=3, max_value=3,
step=1, step=1,
method="async_set_fan_level", method="async_set_fan_level",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_VOLUME: XiaomiMiioNumberDescription( FEATURE_SET_VOLUME: XiaomiMiioNumberDescription(
key=ATTR_VOLUME, key=ATTR_VOLUME,
@ -136,7 +137,7 @@ NUMBER_TYPES = {
max_value=100, max_value=100,
step=1, step=1,
method="async_set_volume", method="async_set_volume",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_OSCILLATION_ANGLE: XiaomiMiioNumberDescription( FEATURE_SET_OSCILLATION_ANGLE: XiaomiMiioNumberDescription(
key=ATTR_OSCILLATION_ANGLE, key=ATTR_OSCILLATION_ANGLE,
@ -147,7 +148,7 @@ NUMBER_TYPES = {
max_value=120, max_value=120,
step=1, step=1,
method="async_set_oscillation_angle", method="async_set_oscillation_angle",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_DELAY_OFF_COUNTDOWN: XiaomiMiioNumberDescription( FEATURE_SET_DELAY_OFF_COUNTDOWN: XiaomiMiioNumberDescription(
key=ATTR_DELAY_OFF_COUNTDOWN, key=ATTR_DELAY_OFF_COUNTDOWN,
@ -158,7 +159,7 @@ NUMBER_TYPES = {
max_value=480, max_value=480,
step=1, step=1,
method="async_set_delay_off_countdown", method="async_set_delay_off_countdown",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_LED_BRIGHTNESS: XiaomiMiioNumberDescription( FEATURE_SET_LED_BRIGHTNESS: XiaomiMiioNumberDescription(
key=ATTR_LED_BRIGHTNESS, key=ATTR_LED_BRIGHTNESS,
@ -168,7 +169,7 @@ NUMBER_TYPES = {
max_value=100, max_value=100,
step=1, step=1,
method="async_set_led_brightness", method="async_set_led_brightness",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_LED_BRIGHTNESS_LEVEL: XiaomiMiioNumberDescription( FEATURE_SET_LED_BRIGHTNESS_LEVEL: XiaomiMiioNumberDescription(
key=ATTR_LED_BRIGHTNESS_LEVEL, key=ATTR_LED_BRIGHTNESS_LEVEL,
@ -178,7 +179,7 @@ NUMBER_TYPES = {
max_value=8, max_value=8,
step=1, step=1,
method="async_set_led_brightness_level", method="async_set_led_brightness_level",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
FEATURE_SET_FAVORITE_RPM: XiaomiMiioNumberDescription( FEATURE_SET_FAVORITE_RPM: XiaomiMiioNumberDescription(
key=ATTR_FAVORITE_RPM, key=ATTR_FAVORITE_RPM,
@ -189,7 +190,7 @@ NUMBER_TYPES = {
max_value=2200, max_value=2200,
step=10, step=10,
method="async_set_favorite_rpm", method="async_set_favorite_rpm",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
} }

View file

@ -11,8 +11,8 @@ from miio.airpurifier_miot import LedBrightness as AirpurifierMiotLedBrightness
from miio.fan import LedBrightness as FanLedBrightness from miio.fan import LedBrightness as FanLedBrightness
from homeassistant.components.select import SelectEntity, SelectEntityDescription from homeassistant.components.select import SelectEntity, SelectEntityDescription
from homeassistant.const import ENTITY_CATEGORY_CONFIG
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import EntityCategory
from .const import ( from .const import (
CONF_DEVICE, CONF_DEVICE,
@ -63,7 +63,7 @@ SELECTOR_TYPES = {
icon="mdi:brightness-6", icon="mdi:brightness-6",
device_class="xiaomi_miio__led_brightness", device_class="xiaomi_miio__led_brightness",
options=("bright", "dim", "off"), options=("bright", "dim", "off"),
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
} }

View file

@ -15,10 +15,10 @@ from miio.gateway.gateway import (
) )
from homeassistant.components.sensor import ( from homeassistant.components.sensor import (
STATE_CLASS_MEASUREMENT, SensorDeviceClass,
STATE_CLASS_TOTAL_INCREASING,
SensorEntity, SensorEntity,
SensorEntityDescription, SensorEntityDescription,
SensorStateClass,
) )
from homeassistant.const import ( from homeassistant.const import (
AREA_SQUARE_METERS, AREA_SQUARE_METERS,
@ -28,17 +28,6 @@ from homeassistant.const import (
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
CONF_HOST, CONF_HOST,
CONF_TOKEN, CONF_TOKEN,
DEVICE_CLASS_BATTERY,
DEVICE_CLASS_CO2,
DEVICE_CLASS_GAS,
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_ILLUMINANCE,
DEVICE_CLASS_PM25,
DEVICE_CLASS_POWER,
DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE,
DEVICE_CLASS_TIMESTAMP,
ENTITY_CATEGORY_DIAGNOSTIC,
LIGHT_LUX, LIGHT_LUX,
PERCENTAGE, PERCENTAGE,
POWER_WATT, POWER_WATT,
@ -49,6 +38,7 @@ from homeassistant.const import (
VOLUME_CUBIC_METERS, VOLUME_CUBIC_METERS,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import EntityCategory
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
from . import VacuumCoordinatorDataAttributes from . import VacuumCoordinatorDataAttributes
@ -148,137 +138,137 @@ SENSOR_TYPES = {
key=ATTR_TEMPERATURE, key=ATTR_TEMPERATURE,
name="Temperature", name="Temperature",
native_unit_of_measurement=TEMP_CELSIUS, native_unit_of_measurement=TEMP_CELSIUS,
device_class=DEVICE_CLASS_TEMPERATURE, device_class=SensorDeviceClass.TEMPERATURE,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_HUMIDITY: XiaomiMiioSensorDescription( ATTR_HUMIDITY: XiaomiMiioSensorDescription(
key=ATTR_HUMIDITY, key=ATTR_HUMIDITY,
name="Humidity", name="Humidity",
native_unit_of_measurement=PERCENTAGE, native_unit_of_measurement=PERCENTAGE,
device_class=DEVICE_CLASS_HUMIDITY, device_class=SensorDeviceClass.HUMIDITY,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_PRESSURE: XiaomiMiioSensorDescription( ATTR_PRESSURE: XiaomiMiioSensorDescription(
key=ATTR_PRESSURE, key=ATTR_PRESSURE,
name="Pressure", name="Pressure",
native_unit_of_measurement=PRESSURE_HPA, native_unit_of_measurement=PRESSURE_HPA,
device_class=DEVICE_CLASS_PRESSURE, device_class=SensorDeviceClass.PRESSURE,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_LOAD_POWER: XiaomiMiioSensorDescription( ATTR_LOAD_POWER: XiaomiMiioSensorDescription(
key=ATTR_LOAD_POWER, key=ATTR_LOAD_POWER,
name="Load Power", name="Load Power",
native_unit_of_measurement=POWER_WATT, native_unit_of_measurement=POWER_WATT,
device_class=DEVICE_CLASS_POWER, device_class=SensorDeviceClass.POWER,
), ),
ATTR_WATER_LEVEL: XiaomiMiioSensorDescription( ATTR_WATER_LEVEL: XiaomiMiioSensorDescription(
key=ATTR_WATER_LEVEL, key=ATTR_WATER_LEVEL,
name="Water Level", name="Water Level",
native_unit_of_measurement=PERCENTAGE, native_unit_of_measurement=PERCENTAGE,
icon="mdi:water-check", icon="mdi:water-check",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_ACTUAL_SPEED: XiaomiMiioSensorDescription( ATTR_ACTUAL_SPEED: XiaomiMiioSensorDescription(
key=ATTR_ACTUAL_SPEED, key=ATTR_ACTUAL_SPEED,
name="Actual Speed", name="Actual Speed",
native_unit_of_measurement="rpm", native_unit_of_measurement="rpm",
icon="mdi:fast-forward", icon="mdi:fast-forward",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_MOTOR_SPEED: XiaomiMiioSensorDescription( ATTR_MOTOR_SPEED: XiaomiMiioSensorDescription(
key=ATTR_MOTOR_SPEED, key=ATTR_MOTOR_SPEED,
name="Motor Speed", name="Motor Speed",
native_unit_of_measurement="rpm", native_unit_of_measurement="rpm",
icon="mdi:fast-forward", icon="mdi:fast-forward",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_MOTOR2_SPEED: XiaomiMiioSensorDescription( ATTR_MOTOR2_SPEED: XiaomiMiioSensorDescription(
key=ATTR_MOTOR2_SPEED, key=ATTR_MOTOR2_SPEED,
name="Second Motor Speed", name="Second Motor Speed",
native_unit_of_measurement="rpm", native_unit_of_measurement="rpm",
icon="mdi:fast-forward", icon="mdi:fast-forward",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_USE_TIME: XiaomiMiioSensorDescription( ATTR_USE_TIME: XiaomiMiioSensorDescription(
key=ATTR_USE_TIME, key=ATTR_USE_TIME,
name="Use Time", name="Use Time",
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
icon="mdi:progress-clock", icon="mdi:progress-clock",
state_class=STATE_CLASS_TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_ILLUMINANCE: XiaomiMiioSensorDescription( ATTR_ILLUMINANCE: XiaomiMiioSensorDescription(
key=ATTR_ILLUMINANCE, key=ATTR_ILLUMINANCE,
name="Illuminance", name="Illuminance",
native_unit_of_measurement=UNIT_LUMEN, native_unit_of_measurement=UNIT_LUMEN,
device_class=DEVICE_CLASS_ILLUMINANCE, device_class=SensorDeviceClass.ILLUMINANCE,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_ILLUMINANCE_LUX: XiaomiMiioSensorDescription( ATTR_ILLUMINANCE_LUX: XiaomiMiioSensorDescription(
key=ATTR_ILLUMINANCE, key=ATTR_ILLUMINANCE,
name="Illuminance", name="Illuminance",
native_unit_of_measurement=LIGHT_LUX, native_unit_of_measurement=LIGHT_LUX,
device_class=DEVICE_CLASS_ILLUMINANCE, device_class=SensorDeviceClass.ILLUMINANCE,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_AIR_QUALITY: XiaomiMiioSensorDescription( ATTR_AIR_QUALITY: XiaomiMiioSensorDescription(
key=ATTR_AIR_QUALITY, key=ATTR_AIR_QUALITY,
native_unit_of_measurement="AQI", native_unit_of_measurement="AQI",
icon="mdi:cloud", icon="mdi:cloud",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_PM25: XiaomiMiioSensorDescription( ATTR_PM25: XiaomiMiioSensorDescription(
key=ATTR_AQI, key=ATTR_AQI,
name="PM2.5", name="PM2.5",
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
device_class=DEVICE_CLASS_PM25, device_class=SensorDeviceClass.PM25,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_FILTER_LIFE_REMAINING: XiaomiMiioSensorDescription( ATTR_FILTER_LIFE_REMAINING: XiaomiMiioSensorDescription(
key=ATTR_FILTER_LIFE_REMAINING, key=ATTR_FILTER_LIFE_REMAINING,
name="Filter Life Remaining", name="Filter Life Remaining",
native_unit_of_measurement=PERCENTAGE, native_unit_of_measurement=PERCENTAGE,
icon="mdi:air-filter", icon="mdi:air-filter",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
attributes=("filter_type",), attributes=("filter_type",),
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_FILTER_USE: XiaomiMiioSensorDescription( ATTR_FILTER_USE: XiaomiMiioSensorDescription(
key=ATTR_FILTER_HOURS_USED, key=ATTR_FILTER_HOURS_USED,
name="Filter Use", name="Filter Use",
native_unit_of_measurement=TIME_HOURS, native_unit_of_measurement=TIME_HOURS,
icon="mdi:clock-outline", icon="mdi:clock-outline",
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_CARBON_DIOXIDE: XiaomiMiioSensorDescription( ATTR_CARBON_DIOXIDE: XiaomiMiioSensorDescription(
key=ATTR_CARBON_DIOXIDE, key=ATTR_CARBON_DIOXIDE,
name="Carbon Dioxide", name="Carbon Dioxide",
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION, native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
device_class=DEVICE_CLASS_CO2, device_class=SensorDeviceClass.CO2,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
), ),
ATTR_PURIFY_VOLUME: XiaomiMiioSensorDescription( ATTR_PURIFY_VOLUME: XiaomiMiioSensorDescription(
key=ATTR_PURIFY_VOLUME, key=ATTR_PURIFY_VOLUME,
name="Purify Volume", name="Purify Volume",
native_unit_of_measurement=VOLUME_CUBIC_METERS, native_unit_of_measurement=VOLUME_CUBIC_METERS,
device_class=DEVICE_CLASS_GAS, device_class=SensorDeviceClass.GAS,
state_class=STATE_CLASS_TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
ATTR_BATTERY: XiaomiMiioSensorDescription( ATTR_BATTERY: XiaomiMiioSensorDescription(
key=ATTR_BATTERY, key=ATTR_BATTERY,
name="Battery", name="Battery",
native_unit_of_measurement=PERCENTAGE, native_unit_of_measurement=PERCENTAGE,
device_class=DEVICE_CLASS_BATTERY, device_class=SensorDeviceClass.BATTERY,
state_class=STATE_CLASS_MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
} }
@ -408,35 +398,35 @@ VACUUM_SENSORS = {
key=ATTR_DND_START, key=ATTR_DND_START,
icon="mdi:minus-circle-off", icon="mdi:minus-circle-off",
name="DnD Start", name="DnD Start",
device_class=DEVICE_CLASS_TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
parent_key=VacuumCoordinatorDataAttributes.dnd_status, parent_key=VacuumCoordinatorDataAttributes.dnd_status,
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"dnd_{ATTR_DND_END}": XiaomiMiioSensorDescription( f"dnd_{ATTR_DND_END}": XiaomiMiioSensorDescription(
key=ATTR_DND_END, key=ATTR_DND_END,
icon="mdi:minus-circle-off", icon="mdi:minus-circle-off",
name="DnD End", name="DnD End",
device_class=DEVICE_CLASS_TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
parent_key=VacuumCoordinatorDataAttributes.dnd_status, parent_key=VacuumCoordinatorDataAttributes.dnd_status,
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"last_clean_{ATTR_LAST_CLEAN_START}": XiaomiMiioSensorDescription( f"last_clean_{ATTR_LAST_CLEAN_START}": XiaomiMiioSensorDescription(
key=ATTR_LAST_CLEAN_START, key=ATTR_LAST_CLEAN_START,
icon="mdi:clock-time-twelve", icon="mdi:clock-time-twelve",
name="Last Clean Start", name="Last Clean Start",
device_class=DEVICE_CLASS_TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
parent_key=VacuumCoordinatorDataAttributes.last_clean_details, parent_key=VacuumCoordinatorDataAttributes.last_clean_details,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"last_clean_{ATTR_LAST_CLEAN_END}": XiaomiMiioSensorDescription( f"last_clean_{ATTR_LAST_CLEAN_END}": XiaomiMiioSensorDescription(
key=ATTR_LAST_CLEAN_END, key=ATTR_LAST_CLEAN_END,
icon="mdi:clock-time-twelve", icon="mdi:clock-time-twelve",
device_class=DEVICE_CLASS_TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
parent_key=VacuumCoordinatorDataAttributes.last_clean_details, parent_key=VacuumCoordinatorDataAttributes.last_clean_details,
name="Last Clean End", name="Last Clean End",
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"last_clean_{ATTR_LAST_CLEAN_TIME}": XiaomiMiioSensorDescription( f"last_clean_{ATTR_LAST_CLEAN_TIME}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -444,7 +434,7 @@ VACUUM_SENSORS = {
key=ATTR_LAST_CLEAN_TIME, key=ATTR_LAST_CLEAN_TIME,
parent_key=VacuumCoordinatorDataAttributes.last_clean_details, parent_key=VacuumCoordinatorDataAttributes.last_clean_details,
name="Last Clean Duration", name="Last Clean Duration",
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"last_clean_{ATTR_LAST_CLEAN_AREA}": XiaomiMiioSensorDescription( f"last_clean_{ATTR_LAST_CLEAN_AREA}": XiaomiMiioSensorDescription(
native_unit_of_measurement=AREA_SQUARE_METERS, native_unit_of_measurement=AREA_SQUARE_METERS,
@ -452,7 +442,7 @@ VACUUM_SENSORS = {
key=ATTR_LAST_CLEAN_AREA, key=ATTR_LAST_CLEAN_AREA,
parent_key=VacuumCoordinatorDataAttributes.last_clean_details, parent_key=VacuumCoordinatorDataAttributes.last_clean_details,
name="Last Clean Area", name="Last Clean Area",
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"clean_history_{ATTR_CLEAN_HISTORY_TOTAL_DURATION}": XiaomiMiioSensorDescription( f"clean_history_{ATTR_CLEAN_HISTORY_TOTAL_DURATION}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -461,7 +451,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.clean_history_status, parent_key=VacuumCoordinatorDataAttributes.clean_history_status,
name="Total duration", name="Total duration",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"clean_history_{ATTR_CLEAN_HISTORY_TOTAL_AREA}": XiaomiMiioSensorDescription( f"clean_history_{ATTR_CLEAN_HISTORY_TOTAL_AREA}": XiaomiMiioSensorDescription(
native_unit_of_measurement=AREA_SQUARE_METERS, native_unit_of_measurement=AREA_SQUARE_METERS,
@ -470,17 +460,17 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.clean_history_status, parent_key=VacuumCoordinatorDataAttributes.clean_history_status,
name="Total Clean Area", name="Total Clean Area",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"clean_history_{ATTR_CLEAN_HISTORY_COUNT}": XiaomiMiioSensorDescription( f"clean_history_{ATTR_CLEAN_HISTORY_COUNT}": XiaomiMiioSensorDescription(
native_unit_of_measurement="", native_unit_of_measurement="",
icon="mdi:counter", icon="mdi:counter",
state_class=STATE_CLASS_TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
key=ATTR_CLEAN_HISTORY_COUNT, key=ATTR_CLEAN_HISTORY_COUNT,
parent_key=VacuumCoordinatorDataAttributes.clean_history_status, parent_key=VacuumCoordinatorDataAttributes.clean_history_status,
name="Total Clean Count", name="Total Clean Count",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"clean_history_{ATTR_CLEAN_HISTORY_DUST_COLLECTION_COUNT}": XiaomiMiioSensorDescription( f"clean_history_{ATTR_CLEAN_HISTORY_DUST_COLLECTION_COUNT}": XiaomiMiioSensorDescription(
native_unit_of_measurement="", native_unit_of_measurement="",
@ -490,7 +480,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.clean_history_status, parent_key=VacuumCoordinatorDataAttributes.clean_history_status,
name="Total Dust Collection Count", name="Total Dust Collection Count",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"consumable_{ATTR_CONSUMABLE_STATUS_MAIN_BRUSH_LEFT}": XiaomiMiioSensorDescription( f"consumable_{ATTR_CONSUMABLE_STATUS_MAIN_BRUSH_LEFT}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -499,7 +489,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.consumable_status, parent_key=VacuumCoordinatorDataAttributes.consumable_status,
name="Main Brush Left", name="Main Brush Left",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"consumable_{ATTR_CONSUMABLE_STATUS_SIDE_BRUSH_LEFT}": XiaomiMiioSensorDescription( f"consumable_{ATTR_CONSUMABLE_STATUS_SIDE_BRUSH_LEFT}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -508,7 +498,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.consumable_status, parent_key=VacuumCoordinatorDataAttributes.consumable_status,
name="Side Brush Left", name="Side Brush Left",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"consumable_{ATTR_CONSUMABLE_STATUS_FILTER_LEFT}": XiaomiMiioSensorDescription( f"consumable_{ATTR_CONSUMABLE_STATUS_FILTER_LEFT}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -517,7 +507,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.consumable_status, parent_key=VacuumCoordinatorDataAttributes.consumable_status,
name="Filter Left", name="Filter Left",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
f"consumable_{ATTR_CONSUMABLE_STATUS_SENSOR_DIRTY_LEFT}": XiaomiMiioSensorDescription( f"consumable_{ATTR_CONSUMABLE_STATUS_SENSOR_DIRTY_LEFT}": XiaomiMiioSensorDescription(
native_unit_of_measurement=TIME_SECONDS, native_unit_of_measurement=TIME_SECONDS,
@ -526,7 +516,7 @@ VACUUM_SENSORS = {
parent_key=VacuumCoordinatorDataAttributes.consumable_status, parent_key=VacuumCoordinatorDataAttributes.consumable_status,
name="Sensor Dirty Left", name="Sensor Dirty Left",
entity_registry_enabled_default=False, entity_registry_enabled_default=False,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
), ),
} }
@ -700,7 +690,7 @@ class XiaomiGenericSensor(XiaomiCoordinatedMiioEntity, SensorEntity):
) )
if ( if (
self.device_class == DEVICE_CLASS_TIMESTAMP self.device_class == SensorDeviceClass.TIMESTAMP
and native_value is not None and native_value is not None
and (native_datetime := dt_util.parse_datetime(str(native_value))) and (native_datetime := dt_util.parse_datetime(str(native_value)))
is not None is not None

View file

@ -11,7 +11,7 @@ from miio.powerstrip import PowerMode
import voluptuous as vol import voluptuous as vol
from homeassistant.components.switch import ( from homeassistant.components.switch import (
DEVICE_CLASS_SWITCH, SwitchDeviceClass,
SwitchEntity, SwitchEntity,
SwitchEntityDescription, SwitchEntityDescription,
) )
@ -21,10 +21,10 @@ from homeassistant.const import (
ATTR_TEMPERATURE, ATTR_TEMPERATURE,
CONF_HOST, CONF_HOST,
CONF_TOKEN, CONF_TOKEN,
ENTITY_CATEGORY_CONFIG,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import EntityCategory
from .const import ( from .const import (
CONF_DEVICE, CONF_DEVICE,
@ -206,7 +206,7 @@ SWITCH_TYPES = (
icon="mdi:volume-high", icon="mdi:volume-high",
method_on="async_set_buzzer_on", method_on="async_set_buzzer_on",
method_off="async_set_buzzer_off", method_off="async_set_buzzer_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_CHILD_LOCK, key=ATTR_CHILD_LOCK,
@ -215,7 +215,7 @@ SWITCH_TYPES = (
icon="mdi:lock", icon="mdi:lock",
method_on="async_set_child_lock_on", method_on="async_set_child_lock_on",
method_off="async_set_child_lock_off", method_off="async_set_child_lock_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_DRY, key=ATTR_DRY,
@ -224,7 +224,7 @@ SWITCH_TYPES = (
icon="mdi:hair-dryer", icon="mdi:hair-dryer",
method_on="async_set_dry_on", method_on="async_set_dry_on",
method_off="async_set_dry_off", method_off="async_set_dry_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_CLEAN, key=ATTR_CLEAN,
@ -234,7 +234,7 @@ SWITCH_TYPES = (
method_on="async_set_clean_on", method_on="async_set_clean_on",
method_off="async_set_clean_off", method_off="async_set_clean_off",
available_with_device_off=False, available_with_device_off=False,
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_LED, key=ATTR_LED,
@ -243,7 +243,7 @@ SWITCH_TYPES = (
icon="mdi:led-outline", icon="mdi:led-outline",
method_on="async_set_led_on", method_on="async_set_led_on",
method_off="async_set_led_off", method_off="async_set_led_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_LEARN_MODE, key=ATTR_LEARN_MODE,
@ -252,7 +252,7 @@ SWITCH_TYPES = (
icon="mdi:school-outline", icon="mdi:school-outline",
method_on="async_set_learn_mode_on", method_on="async_set_learn_mode_on",
method_off="async_set_learn_mode_off", method_off="async_set_learn_mode_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_AUTO_DETECT, key=ATTR_AUTO_DETECT,
@ -260,7 +260,7 @@ SWITCH_TYPES = (
name="Auto Detect", name="Auto Detect",
method_on="async_set_auto_detect_on", method_on="async_set_auto_detect_on",
method_off="async_set_auto_detect_off", method_off="async_set_auto_detect_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
XiaomiMiioSwitchDescription( XiaomiMiioSwitchDescription(
key=ATTR_IONIZER, key=ATTR_IONIZER,
@ -269,7 +269,7 @@ SWITCH_TYPES = (
icon="mdi:shimmer", icon="mdi:shimmer",
method_on="async_set_ionizer_on", method_on="async_set_ionizer_on",
method_off="async_set_ionizer_off", method_off="async_set_ionizer_off",
entity_category=ENTITY_CATEGORY_CONFIG, entity_category=EntityCategory.CONFIG,
), ),
) )
@ -621,7 +621,7 @@ class XiaomiGenericCoordinatedSwitch(XiaomiCoordinatedMiioEntity, SwitchEntity):
class XiaomiGatewaySwitch(XiaomiGatewayDevice, SwitchEntity): class XiaomiGatewaySwitch(XiaomiGatewayDevice, SwitchEntity):
"""Representation of a XiaomiGatewaySwitch.""" """Representation of a XiaomiGatewaySwitch."""
_attr_device_class = DEVICE_CLASS_SWITCH _attr_device_class = SwitchDeviceClass.SWITCH
def __init__(self, coordinator, sub_device, entry, variable): def __init__(self, coordinator, sub_device, entry, variable):
"""Initialize the XiaomiSensor.""" """Initialize the XiaomiSensor."""