from __future__ import annotations from datetime import datetime import logging from homeassistant.components.binary_sensor import ( BinarySensorDeviceClass, BinarySensorEntity, ) from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import CoordinatorEntity from .const import DOMAIN from .reos_api import ReosApi, ReosLockModel async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: AddEntitiesCallback) -> None: coordinator = hass.data[DOMAIN][config_entry.data["username"]]["coordinator"] async_add_entities(ReosDoorIsFavorite(lock, coordinator) for _, lock in coordinator.data.items()) class BinarySensorBase(CoordinatorEntity, BinarySensorEntity): def update_value(self) -> None: pass def __format_id(self, name: str) -> str: return name.lower().replace(' ', '_') def __init__(self, model: ReosLockModel, coordinator, name: str) -> None: super().__init__(coordinator, context=model.lock_id) self._model = model self.idx = self._model.lock_id self._attr_unique_id = f"reos_lock_{self._model.lock_id}_{self.__format_id(name)}" self._attr_name = f"{self._model.display} {name}" self.update_value() @callback def _handle_coordinator_update(self) -> None: self._model = self.coordinator.data[self.idx] self.update_value() self.async_write_ha_state() @property def device_info(self) -> DeviceInfo | None: return DeviceInfo( identifiers={(DOMAIN, self.idx)}, ) class ReosDoorIsFavorite(BinarySensorBase): def update_value(self) -> None: self._attr_is_on = self._model.is_favorite def __init__(self, model: ReosLockModel, coordinator) -> None: super().__init__(model, coordinator, "Is Favorite")