"""Binary sensor entities for MB-Secure.""" from __future__ import annotations from homeassistant.components.binary_sensor import BinarySensorEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from .coordinator import MBSecureCoordinator from .entity import MBSecureEntity, async_setup_dynamic_entities async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry[MBSecureCoordinator], async_add_entities: AddEntitiesCallback, ) -> None: """Set up capability-reported point entities.""" coordinator = entry.runtime_data assert coordinator.info is not None and coordinator.info.bridge_id is not None bridge_id = coordinator.info.bridge_id async_setup_dynamic_entities( entry, async_add_entities, collection_name="points", capability="binary_state", factory=lambda object_id: MBSecurePointEntity( coordinator, bridge_id, object_id ), ) class MBSecurePointEntity(MBSecureEntity, BinarySensorEntity): """Represent one normalized binary point.""" def __init__( self, coordinator: MBSecureCoordinator, bridge_id: str, object_id: str ) -> None: """Initialize a point entity.""" super().__init__(coordinator, bridge_id, "points", object_id) @property def is_on(self) -> bool | None: """Return a conservative normalized binary state.""" item = self.bridge_object if item is None: return None if item.state in {"active", "on", "open", "triggered"}: return True if item.state in {"clear", "closed", "inactive", "off"}: return False return None