mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Add water level
and water tank detached
sensors for Xiaomi Miio humidifiers (#54625)
* Add water level and water tank detached sensors * Use elif * Use DEVICE_CLASS_CONNECTIVITY for water tank sensor * Improve docstring * Change the water tank sensor icon * Fix typo
This commit is contained in:
parent
416668c289
commit
8c4a2dc6d2
@ -1,7 +1,12 @@
|
||||
"""Support for Xiaomi Miio binary sensors."""
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from typing import Callable
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
DEVICE_CLASS_CONNECTIVITY,
|
||||
BinarySensorEntity,
|
||||
BinarySensorEntityDescription,
|
||||
)
|
||||
@ -13,6 +18,8 @@ from .const import (
|
||||
DOMAIN,
|
||||
KEY_COORDINATOR,
|
||||
KEY_DEVICE,
|
||||
MODELS_HUMIDIFIER_MIIO,
|
||||
MODELS_HUMIDIFIER_MIOT,
|
||||
MODELS_HUMIDIFIER_MJJSQ,
|
||||
)
|
||||
from .device import XiaomiCoordinatedMiioEntity
|
||||
@ -20,19 +27,31 @@ from .device import XiaomiCoordinatedMiioEntity
|
||||
ATTR_NO_WATER = "no_water"
|
||||
ATTR_WATER_TANK_DETACHED = "water_tank_detached"
|
||||
|
||||
|
||||
@dataclass
|
||||
class XiaomiMiioBinarySensorDescription(BinarySensorEntityDescription):
|
||||
"""A class that describes binary sensor entities."""
|
||||
|
||||
value: Callable | None = None
|
||||
|
||||
|
||||
BINARY_SENSOR_TYPES = (
|
||||
BinarySensorEntityDescription(
|
||||
XiaomiMiioBinarySensorDescription(
|
||||
key=ATTR_NO_WATER,
|
||||
name="Water Tank Empty",
|
||||
icon="mdi:water-off-outline",
|
||||
),
|
||||
BinarySensorEntityDescription(
|
||||
XiaomiMiioBinarySensorDescription(
|
||||
key=ATTR_WATER_TANK_DETACHED,
|
||||
name="Water Tank Detached",
|
||||
icon="mdi:flask-empty-off-outline",
|
||||
name="Water Tank",
|
||||
icon="mdi:car-coolant-level",
|
||||
device_class=DEVICE_CLASS_CONNECTIVITY,
|
||||
value=lambda value: not value,
|
||||
),
|
||||
)
|
||||
|
||||
HUMIDIFIER_MIIO_BINARY_SENSORS = (ATTR_WATER_TANK_DETACHED,)
|
||||
HUMIDIFIER_MIOT_BINARY_SENSORS = (ATTR_WATER_TANK_DETACHED,)
|
||||
HUMIDIFIER_MJJSQ_BINARY_SENSORS = (ATTR_NO_WATER, ATTR_WATER_TANK_DETACHED)
|
||||
|
||||
|
||||
@ -43,7 +62,11 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
||||
if config_entry.data[CONF_FLOW_TYPE] == CONF_DEVICE:
|
||||
model = config_entry.data[CONF_MODEL]
|
||||
sensors = []
|
||||
if model in MODELS_HUMIDIFIER_MJJSQ:
|
||||
if model in MODELS_HUMIDIFIER_MIIO:
|
||||
sensors = HUMIDIFIER_MIIO_BINARY_SENSORS
|
||||
elif model in MODELS_HUMIDIFIER_MIOT:
|
||||
sensors = HUMIDIFIER_MIOT_BINARY_SENSORS
|
||||
elif model in MODELS_HUMIDIFIER_MJJSQ:
|
||||
sensors = HUMIDIFIER_MJJSQ_BINARY_SENSORS
|
||||
for description in BINARY_SENSOR_TYPES:
|
||||
if description.key not in sensors:
|
||||
@ -74,9 +97,13 @@ class XiaomiGenericBinarySensor(XiaomiCoordinatedMiioEntity, BinarySensorEntity)
|
||||
@property
|
||||
def is_on(self):
|
||||
"""Return true if the binary sensor is on."""
|
||||
return self._extract_value_from_attribute(
|
||||
state = self._extract_value_from_attribute(
|
||||
self.coordinator.data, self.entity_description.key
|
||||
)
|
||||
if self.entity_description.value is not None and state is not None:
|
||||
return self.entity_description.value(state)
|
||||
|
||||
return state
|
||||
|
||||
@staticmethod
|
||||
def _extract_value_from_attribute(state, attribute):
|
||||
|
@ -234,8 +234,13 @@ SENSOR_TYPES = {
|
||||
),
|
||||
}
|
||||
|
||||
HUMIDIFIER_MIIO_SENSORS = (ATTR_HUMIDITY, ATTR_TEMPERATURE)
|
||||
HUMIDIFIER_CA1_CB1_SENSORS = (ATTR_HUMIDITY, ATTR_TEMPERATURE, ATTR_MOTOR_SPEED)
|
||||
HUMIDIFIER_MIIO_SENSORS = (ATTR_HUMIDITY, ATTR_TEMPERATURE, ATTR_WATER_LEVEL)
|
||||
HUMIDIFIER_CA1_CB1_SENSORS = (
|
||||
ATTR_HUMIDITY,
|
||||
ATTR_TEMPERATURE,
|
||||
ATTR_MOTOR_SPEED,
|
||||
ATTR_WATER_LEVEL,
|
||||
)
|
||||
HUMIDIFIER_MIOT_SENSORS = (
|
||||
ATTR_ACTUAL_SPEED,
|
||||
ATTR_HUMIDITY,
|
||||
|
Loading…
x
Reference in New Issue
Block a user