1 """Support for LaMetric buttons."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
9 from demetriek
import LaMetricDevice
17 from .const
import DOMAIN
18 from .coordinator
import LaMetricDataUpdateCoordinator
19 from .entity
import LaMetricEntity
20 from .helpers
import lametric_exception_handler
23 @dataclass(frozen=True, kw_only=True)
25 """Class describing LaMetric button entities."""
27 press_fn: Callable[[LaMetricDevice], Awaitable[Any]]
33 translation_key=
"app_next",
34 entity_category=EntityCategory.CONFIG,
35 press_fn=
lambda api: api.app_next(),
39 translation_key=
"app_previous",
40 entity_category=EntityCategory.CONFIG,
41 press_fn=
lambda api: api.app_previous(),
44 key=
"dismiss_current",
45 translation_key=
"dismiss_current",
46 entity_category=EntityCategory.CONFIG,
47 press_fn=
lambda api: api.dismiss_current_notification(),
51 translation_key=
"dismiss_all",
52 entity_category=EntityCategory.CONFIG,
53 press_fn=
lambda api: api.dismiss_all_notifications(),
61 async_add_entities: AddEntitiesCallback,
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,
70 for description
in BUTTONS
75 """Representation of a LaMetric number."""
77 entity_description: LaMetricButtonEntityDescription
81 coordinator: LaMetricDataUpdateCoordinator,
82 description: LaMetricButtonEntityDescription,
84 """Initialize the button entity."""
85 super().
__init__(coordinator=coordinator)
87 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.data.serial_number}-{description.key}"
89 @lametric_exception_handler
91 """Send out a command to LaMetric."""