Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Button support for Bravia TV."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable, Coroutine
6 from dataclasses import dataclass
7 
9  ButtonDeviceClass,
10  ButtonEntity,
11  ButtonEntityDescription,
12 )
13 from homeassistant.const import EntityCategory
14 from homeassistant.core import HomeAssistant
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from . import BraviaTVConfigEntry
18 from .coordinator import BraviaTVCoordinator
19 from .entity import BraviaTVEntity
20 
21 
22 @dataclass(frozen=True, kw_only=True)
24  """Bravia TV Button description."""
25 
26  press_action: Callable[[BraviaTVCoordinator], Coroutine]
27 
28 
29 BUTTONS: tuple[BraviaTVButtonDescription, ...] = (
31  key="reboot",
32  device_class=ButtonDeviceClass.RESTART,
33  entity_category=EntityCategory.CONFIG,
34  press_action=lambda coordinator: coordinator.async_reboot_device(),
35  ),
37  key="terminate_apps",
38  translation_key="terminate_apps",
39  entity_category=EntityCategory.CONFIG,
40  press_action=lambda coordinator: coordinator.async_terminate_apps(),
41  ),
42 )
43 
44 
46  hass: HomeAssistant,
47  config_entry: BraviaTVConfigEntry,
48  async_add_entities: AddEntitiesCallback,
49 ) -> None:
50  """Set up the Bravia TV Button entities."""
51 
52  coordinator = config_entry.runtime_data
53  unique_id = config_entry.unique_id
54  assert unique_id is not None
55 
57  BraviaTVButton(coordinator, unique_id, config_entry.title, description)
58  for description in BUTTONS
59  )
60 
61 
63  """Representation of a Bravia TV Button."""
64 
65  entity_description: BraviaTVButtonDescription
66 
67  def __init__(
68  self,
69  coordinator: BraviaTVCoordinator,
70  unique_id: str,
71  model: str,
72  description: BraviaTVButtonDescription,
73  ) -> None:
74  """Initialize the button."""
75  super().__init__(coordinator, unique_id, model)
76  self._attr_unique_id_attr_unique_id_attr_unique_id = f"{unique_id}_{description.key}"
77  self.entity_descriptionentity_description = description
78 
79  async def async_press(self) -> None:
80  """Trigger the button action."""
81  await self.entity_descriptionentity_description.press_action(self.coordinator)
None __init__(self, BraviaTVCoordinator coordinator, str unique_id, str model, BraviaTVButtonDescription description)
Definition: button.py:73
None async_setup_entry(HomeAssistant hass, BraviaTVConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: button.py:49