"""Support for Lutron Homeworks buttons.""" from __future__ import annotations import asyncio from pyhomeworks.pyhomeworks import Homeworks from homeassistant.components.button import ButtonEntity from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceInfo from homeassistant.helpers.entity_platform import AddEntitiesCallback from . import HomeworksData, HomeworksEntity from .const import ( CONF_ADDR, CONF_BUTTONS, CONF_CONTROLLER_ID, CONF_KEYPADS, CONF_NUMBER, CONF_RELEASE_DELAY, DOMAIN, ) async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback ) -> None: """Set up Homeworks buttons.""" data: HomeworksData = hass.data[DOMAIN][entry.entry_id] controller = data.controller controller_id = entry.options[CONF_CONTROLLER_ID] entities = [] for keypad in entry.options.get(CONF_KEYPADS, []): for button in keypad[CONF_BUTTONS]: entity = HomeworksButton( controller, controller_id, keypad[CONF_ADDR], keypad[CONF_NAME], button[CONF_NAME], button[CONF_NUMBER], button[CONF_RELEASE_DELAY], ) entities.append(entity) async_add_entities(entities, True) class HomeworksButton(HomeworksEntity, ButtonEntity): """Homeworks Button.""" def __init__( self, controller: Homeworks, controller_id: str, addr: str, keypad_name: str, button_name: str, button_number: int, release_delay: float, ) -> None: """Create device with Addr, name, and rate.""" super().__init__(controller, controller_id, addr, button_number, button_name) self._attr_device_info = DeviceInfo( identifiers={(DOMAIN, f"{controller_id}.{addr}")}, name=keypad_name ) self._release_delay = release_delay async def async_press(self) -> None: """Press the button.""" await self.hass.async_add_executor_job( self._controller._send, # noqa: SLF001 f"KBP, {self._addr}, {self._idx}", ) if not self._release_delay: return await asyncio.sleep(self._release_delay) await self.hass.async_add_executor_job( self._controller._send, # noqa: SLF001 f"KBR, {self._addr}, {self._idx}", )