Home Assistant Unofficial Reference 2024.12.1
button.py
Go to the documentation of this file.
1 """Support for LaMetric buttons."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Awaitable, Callable
6 from dataclasses import dataclass
7 from typing import Any
8 
9 from demetriek import LaMetricDevice
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.helpers.entity_platform import AddEntitiesCallback
16 
17 from .const import DOMAIN
18 from .coordinator import LaMetricDataUpdateCoordinator
19 from .entity import LaMetricEntity
20 from .helpers import lametric_exception_handler
21 
22 
23 @dataclass(frozen=True, kw_only=True)
25  """Class describing LaMetric button entities."""
26 
27  press_fn: Callable[[LaMetricDevice], Awaitable[Any]]
28 
29 
30 BUTTONS = [
32  key="app_next",
33  translation_key="app_next",
34  entity_category=EntityCategory.CONFIG,
35  press_fn=lambda api: api.app_next(),
36  ),
38  key="app_previous",
39  translation_key="app_previous",
40  entity_category=EntityCategory.CONFIG,
41  press_fn=lambda api: api.app_previous(),
42  ),
44  key="dismiss_current",
45  translation_key="dismiss_current",
46  entity_category=EntityCategory.CONFIG,
47  press_fn=lambda api: api.dismiss_current_notification(),
48  ),
50  key="dismiss_all",
51  translation_key="dismiss_all",
52  entity_category=EntityCategory.CONFIG,
53  press_fn=lambda api: api.dismiss_all_notifications(),
54  ),
55 ]
56 
57 
59  hass: HomeAssistant,
60  entry: ConfigEntry,
61  async_add_entities: AddEntitiesCallback,
62 ) -> None:
63  """Set up LaMetric button based on a config entry."""
64  coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
67  coordinator=coordinator,
68  description=description,
69  )
70  for description in BUTTONS
71  )
72 
73 
75  """Representation of a LaMetric number."""
76 
77  entity_description: LaMetricButtonEntityDescription
78 
79  def __init__(
80  self,
81  coordinator: LaMetricDataUpdateCoordinator,
82  description: LaMetricButtonEntityDescription,
83  ) -> None:
84  """Initialize the button entity."""
85  super().__init__(coordinator=coordinator)
86  self.entity_descriptionentity_description = description
87  self._attr_unique_id_attr_unique_id = f"{coordinator.data.serial_number}-{description.key}"
88 
89  @lametric_exception_handler
90  async def async_press(self) -> None:
91  """Send out a command to LaMetric."""
92  await self.entity_descriptionentity_description.press_fn(self.coordinator.lametric)
None __init__(self, LaMetricDataUpdateCoordinator coordinator, LaMetricButtonEntityDescription description)
Definition: button.py:83
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: button.py:62