Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Buttons for the SimpliSafe integration."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 
8 from simplipy.errors import SimplipyError
9 from simplipy.system import System
10 
11 from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
12 from homeassistant.config_entries import ConfigEntry
13 from homeassistant.const import EntityCategory
14 from homeassistant.core import HomeAssistant
15 from homeassistant.exceptions import HomeAssistantError
16 from homeassistant.helpers.entity_platform import AddEntitiesCallback
17 
18 from . import SimpliSafe
19 from .const import DOMAIN
20 from .entity import SimpliSafeEntity
21 from .typing import SystemType
22 
23 
24 @dataclass(frozen=True, kw_only=True)
26  """Describe a SimpliSafe button entity."""
27 
28  push_action: Callable[[System], Awaitable]
29 
30 
31 BUTTON_KIND_CLEAR_NOTIFICATIONS = "clear_notifications"
32 
33 
34 async def _async_clear_notifications(system: System) -> None:
35  """Reboot the SimpliSafe."""
36  await system.async_clear_notifications()
37 
38 
39 BUTTON_DESCRIPTIONS = (
41  key=BUTTON_KIND_CLEAR_NOTIFICATIONS,
42  translation_key=BUTTON_KIND_CLEAR_NOTIFICATIONS,
43  push_action=_async_clear_notifications,
44  ),
45 )
46 
47 
49  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
50 ) -> None:
51  """Set up SimpliSafe buttons based on a config entry."""
52  simplisafe = hass.data[DOMAIN][entry.entry_id]
53 
55  [
56  SimpliSafeButton(simplisafe, system, description)
57  for system in simplisafe.systems.values()
58  for description in BUTTON_DESCRIPTIONS
59  ]
60  )
61 
62 
64  """Define a SimpliSafe button."""
65 
66  _attr_entity_category = EntityCategory.CONFIG
67 
68  entity_description: SimpliSafeButtonDescription
69 
70  def __init__(
71  self,
72  simplisafe: SimpliSafe,
73  system: SystemType,
74  description: SimpliSafeButtonDescription,
75  ) -> None:
76  """Initialize the SimpliSafe alarm."""
77  super().__init__(simplisafe, system)
78 
79  self.entity_descriptionentity_description = description
80 
81  async def async_press(self) -> None:
82  """Send out a restart command."""
83  try:
84  await self.entity_descriptionentity_description.push_action(self._system_system)
85  except SimplipyError as err:
86  raise HomeAssistantError(
87  f'Error while pressing button "{self.entity_id}": {err}'
88  ) from err
None __init__(self, SimpliSafe simplisafe, SystemType system, SimpliSafeButtonDescription description)
Definition: button.py:75
None _async_clear_notifications(System system)
Definition: button.py:34
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:50