Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for Lutron Homeworks buttons."""
2 
3 from __future__ import annotations
4 
5 import asyncio
6 
7 from pyhomeworks.pyhomeworks import Homeworks
8 
9 from homeassistant.components.button import ButtonEntity
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import CONF_NAME
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.device_registry import DeviceInfo
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from . import HomeworksData
17 from .const import (
18  CONF_ADDR,
19  CONF_BUTTONS,
20  CONF_CONTROLLER_ID,
21  CONF_KEYPADS,
22  CONF_NUMBER,
23  CONF_RELEASE_DELAY,
24  DOMAIN,
25 )
26 from .entity import HomeworksEntity
27 
28 
30  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
31 ) -> None:
32  """Set up Homeworks buttons."""
33  data: HomeworksData = hass.data[DOMAIN][entry.entry_id]
34  controller = data.controller
35  controller_id = entry.options[CONF_CONTROLLER_ID]
36  entities = []
37  for keypad in entry.options.get(CONF_KEYPADS, []):
38  for button in keypad[CONF_BUTTONS]:
39  entity = HomeworksButton(
40  controller,
41  controller_id,
42  keypad[CONF_ADDR],
43  keypad[CONF_NAME],
44  button[CONF_NAME],
45  button[CONF_NUMBER],
46  button[CONF_RELEASE_DELAY],
47  )
48  entities.append(entity)
49  async_add_entities(entities, True)
50 
51 
53  """Homeworks Button."""
54 
55  def __init__(
56  self,
57  controller: Homeworks,
58  controller_id: str,
59  addr: str,
60  keypad_name: str,
61  button_name: str,
62  button_number: int,
63  release_delay: float,
64  ) -> None:
65  """Create device with Addr, name, and rate."""
66  super().__init__(controller, controller_id, addr, button_number, button_name)
67  self._attr_device_info_attr_device_info = DeviceInfo(
68  identifiers={(DOMAIN, f"{controller_id}.{addr}")}, name=keypad_name
69  )
70  self._release_delay_release_delay = release_delay
71 
72  async def async_press(self) -> None:
73  """Press the button."""
74  await self.hasshass.async_add_executor_job(
75  self._controller_controller._send, # noqa: SLF001
76  f"KBP, {self._addr}, {self._idx}",
77  )
78  if not self._release_delay_release_delay:
79  return
80  await asyncio.sleep(self._release_delay_release_delay)
81  await self.hasshass.async_add_executor_job(
82  self._controller_controller._send, # noqa: SLF001
83  f"KBR, {self._addr}, {self._idx}",
84  )
None __init__(self, Homeworks controller, str controller_id, str addr, str keypad_name, str button_name, int button_number, float release_delay)
Definition: button.py:64
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:31