from __future__ import annotations import logging from homeassistant.components.button import ButtonEntity 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 _LOGGER = logging.getLogger(__name__) 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(ReosDoorButton(lock, coordinator) for _, lock in coordinator.data.items()) class ReosDoorButton(CoordinatorEntity, ButtonEntity): def __init__(self, model: ReosLockModel, coordinator) -> 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}_buzzer" self._attr_name = f"{self._model.display} Buzzer" self._attr_device_class = "door" self._attr_icon = "mdi:door" @callback def _handle_coordinator_update(self) -> None: self._model = self.coordinator.data[self.idx] _LOGGER.info("_handle_coordinator_update for %s", self.idx) self.async_write_ha_state() def press(self, **kwargs) -> None: self.hass.create_task(self._model.open()) @property def device_info(self) -> DeviceInfo | None: return DeviceInfo( identifiers={(DOMAIN, self.idx)}, name=self._model.display, serial_number=self._model.name )