191 lines
6.8 KiB
Python
191 lines
6.8 KiB
Python
"""The Homee binary sensor platform."""
|
|
|
|
from pyHomee.const import AttributeType
|
|
from pyHomee.model import HomeeAttribute
|
|
|
|
from homeassistant.components.binary_sensor import (
|
|
BinarySensorDeviceClass,
|
|
BinarySensorEntity,
|
|
BinarySensorEntityDescription,
|
|
)
|
|
from homeassistant.const import EntityCategory
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from . import HomeeConfigEntry
|
|
from .entity import HomeeEntity
|
|
|
|
PARALLEL_UPDATES = 0
|
|
|
|
BINARY_SENSOR_DESCRIPTIONS: dict[AttributeType, BinarySensorEntityDescription] = {
|
|
AttributeType.BATTERY_LOW_ALARM: BinarySensorEntityDescription(
|
|
key="battery",
|
|
device_class=BinarySensorDeviceClass.BATTERY,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.BLACKOUT_ALARM: BinarySensorEntityDescription(
|
|
key="blackout_alarm",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.COALARM: BinarySensorEntityDescription(
|
|
key="carbon_monoxide", device_class=BinarySensorDeviceClass.CO
|
|
),
|
|
AttributeType.CO2ALARM: BinarySensorEntityDescription(
|
|
key="carbon_dioxide", device_class=BinarySensorDeviceClass.PROBLEM
|
|
),
|
|
AttributeType.FLOOD_ALARM: BinarySensorEntityDescription(
|
|
key="flood",
|
|
device_class=BinarySensorDeviceClass.MOISTURE,
|
|
),
|
|
AttributeType.HIGH_TEMPERATURE_ALARM: BinarySensorEntityDescription(
|
|
key="high_temperature",
|
|
device_class=BinarySensorDeviceClass.HEAT,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.LEAK_ALARM: BinarySensorEntityDescription(
|
|
key="leak_alarm",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
),
|
|
AttributeType.LOAD_ALARM: BinarySensorEntityDescription(
|
|
key="load_alarm",
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.LOCK_STATE: BinarySensorEntityDescription(
|
|
key="lock",
|
|
device_class=BinarySensorDeviceClass.LOCK,
|
|
),
|
|
AttributeType.LOW_TEMPERATURE_ALARM: BinarySensorEntityDescription(
|
|
key="low_temperature",
|
|
device_class=BinarySensorDeviceClass.COLD,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.MALFUNCTION_ALARM: BinarySensorEntityDescription(
|
|
key="malfunction",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.MAXIMUM_ALARM: BinarySensorEntityDescription(
|
|
key="maximum",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.MINIMUM_ALARM: BinarySensorEntityDescription(
|
|
key="minimum",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.MOTION_ALARM: BinarySensorEntityDescription(
|
|
key="motion",
|
|
device_class=BinarySensorDeviceClass.MOTION,
|
|
),
|
|
AttributeType.MOTOR_BLOCKED_ALARM: BinarySensorEntityDescription(
|
|
key="motor_blocked",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.ON_OFF: BinarySensorEntityDescription(
|
|
key="plug",
|
|
device_class=BinarySensorDeviceClass.PLUG,
|
|
),
|
|
AttributeType.OPEN_CLOSE: BinarySensorEntityDescription(
|
|
key="opening",
|
|
device_class=BinarySensorDeviceClass.OPENING,
|
|
),
|
|
AttributeType.OVER_CURRENT_ALARM: BinarySensorEntityDescription(
|
|
key="overcurrent",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.OVERLOAD_ALARM: BinarySensorEntityDescription(
|
|
key="overload",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.PRESENCE_ALARM: BinarySensorEntityDescription(
|
|
key="presence",
|
|
device_class=BinarySensorDeviceClass.PRESENCE,
|
|
),
|
|
AttributeType.POWER_SUPPLY_ALARM: BinarySensorEntityDescription(
|
|
key="power",
|
|
device_class=BinarySensorDeviceClass.POWER,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.RAIN_FALL: BinarySensorEntityDescription(
|
|
key="rain",
|
|
device_class=BinarySensorDeviceClass.MOISTURE,
|
|
),
|
|
AttributeType.REPLACE_FILTER_ALARM: BinarySensorEntityDescription(
|
|
key="replace_filter",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.SMOKE_ALARM: BinarySensorEntityDescription(
|
|
key="smoke",
|
|
device_class=BinarySensorDeviceClass.SMOKE,
|
|
),
|
|
AttributeType.STORAGE_ALARM: BinarySensorEntityDescription(
|
|
key="storage",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.SURGE_ALARM: BinarySensorEntityDescription(
|
|
key="surge",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.TAMPER_ALARM: BinarySensorEntityDescription(
|
|
key="tamper",
|
|
device_class=BinarySensorDeviceClass.TAMPER,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.VOLTAGE_DROP_ALARM: BinarySensorEntityDescription(
|
|
key="voltage_drop",
|
|
device_class=BinarySensorDeviceClass.PROBLEM,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
AttributeType.WATER_ALARM: BinarySensorEntityDescription(
|
|
key="water",
|
|
device_class=BinarySensorDeviceClass.MOISTURE,
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
),
|
|
}
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
config_entry: HomeeConfigEntry,
|
|
async_add_devices: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Add the Homee platform for the binary sensor component."""
|
|
|
|
async_add_devices(
|
|
HomeeBinarySensor(
|
|
attribute, config_entry, BINARY_SENSOR_DESCRIPTIONS[attribute.type]
|
|
)
|
|
for node in config_entry.runtime_data.nodes
|
|
for attribute in node.attributes
|
|
if attribute.type in BINARY_SENSOR_DESCRIPTIONS and not attribute.editable
|
|
)
|
|
|
|
|
|
class HomeeBinarySensor(HomeeEntity, BinarySensorEntity):
|
|
"""Representation of a Homee binary sensor."""
|
|
|
|
def __init__(
|
|
self,
|
|
attribute: HomeeAttribute,
|
|
entry: HomeeConfigEntry,
|
|
description: BinarySensorEntityDescription,
|
|
) -> None:
|
|
"""Initialize a Homee binary sensor entity."""
|
|
super().__init__(attribute, entry)
|
|
|
|
self.entity_description = description
|
|
self._attr_translation_key = description.key
|
|
|
|
@property
|
|
def is_on(self) -> bool:
|
|
"""Return true if the binary sensor is on."""
|
|
return bool(self._attribute.current_value)
|