Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Representation of Idasen Desk buttons."""
2 
3 from collections.abc import Callable, Coroutine
4 from dataclasses import dataclass
5 import logging
6 from typing import Any, Final
7 
8 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
9 from homeassistant.config_entries import ConfigEntry
10 from homeassistant.const import EntityCategory
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.device_registry import DeviceInfo
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from . import DeskData, IdasenDeskCoordinator
16 from .const import DOMAIN
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 
21 @dataclass(frozen=True, kw_only=True)
23  """Class to describe a IdasenDesk button entity."""
24 
25  press_action: Callable[
26  [IdasenDeskCoordinator], Callable[[], Coroutine[Any, Any, Any]]
27  ]
28 
29 
30 BUTTONS: Final = [
32  key="connect",
33  translation_key="connect",
34  entity_category=EntityCategory.CONFIG,
35  press_action=lambda coordinator: coordinator.async_connect,
36  ),
38  key="disconnect",
39  translation_key="disconnect",
40  entity_category=EntityCategory.CONFIG,
41  press_action=lambda coordinator: coordinator.async_disconnect,
42  ),
43 ]
44 
45 
47  hass: HomeAssistant,
48  entry: ConfigEntry,
49  async_add_entities: AddEntitiesCallback,
50 ) -> None:
51  """Set buttons for device."""
52  data: DeskData = hass.data[DOMAIN][entry.entry_id]
54  IdasenDeskButton(data.address, data.device_info, data.coordinator, button)
55  for button in BUTTONS
56  )
57 
58 
60  """Defines a IdasenDesk button."""
61 
62  entity_description: IdasenDeskButtonDescription
63  _attr_has_entity_name = True
64 
65  def __init__(
66  self,
67  address: str,
68  device_info: DeviceInfo,
69  coordinator: IdasenDeskCoordinator,
70  description: IdasenDeskButtonDescription,
71  ) -> None:
72  """Initialize the IdasenDesk button entity."""
73  self.entity_descriptionentity_description = description
74 
75  self._attr_unique_id_attr_unique_id = f"{description.key}-{address}"
76  self._attr_device_info_attr_device_info = device_info
77  self._address_address = address
78  self._coordinator_coordinator = coordinator
79 
80  async def async_press(self) -> None:
81  """Triggers the IdasenDesk button press service."""
82  _LOGGER.debug(
83  "Trigger %s for %s",
84  self.entity_descriptionentity_description.key,
85  self._address_address,
86  )
87  await self.entity_descriptionentity_description.press_action(self._coordinator_coordinator)()
None __init__(self, str address, DeviceInfo device_info, IdasenDeskCoordinator coordinator, IdasenDeskButtonDescription description)
Definition: button.py:71
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:50