1 """Interfaces with TotalConnect buttons."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
6 from total_connect_client.location
import TotalConnectLocation
7 from total_connect_client.zone
import TotalConnectZone
15 from .const
import DOMAIN
16 from .coordinator
import TotalConnectDataUpdateCoordinator
17 from .entity
import TotalConnectLocationEntity, TotalConnectZoneEntity
20 @dataclass(frozen=True, kw_only=True)
22 """TotalConnect button description."""
24 press_fn: Callable[[TotalConnectLocation],
None]
27 PANEL_BUTTONS: tuple[TotalConnectButtonEntityDescription, ...] = (
30 translation_key=
"clear_bypass",
31 press_fn=
lambda location: location.clear_bypass(),
35 translation_key=
"bypass_all",
36 press_fn=
lambda location: location.zone_bypass_all(),
42 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
44 """Set up TotalConnect buttons based on a config entry."""
46 coordinator: TotalConnectDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
48 for location_id, location
in coordinator.client.locations.items():
51 for description
in PANEL_BUTTONS
56 for zone
in location.zones.values()
57 if zone.can_be_bypassed
64 """Represent a TotalConnect zone bypass button."""
66 _attr_translation_key =
"bypass"
67 _attr_entity_category = EntityCategory.DIAGNOSTIC
71 coordinator: TotalConnectDataUpdateCoordinator,
72 zone: TotalConnectZone,
75 """Initialize the TotalConnect status."""
76 super().
__init__(coordinator, zone, location_id,
"bypass")
79 """Press the bypass button."""
80 self.
_zone_zone.bypass()
84 """Generic TotalConnect panel button."""
86 entity_description: TotalConnectButtonEntityDescription
90 coordinator: TotalConnectDataUpdateCoordinator,
91 location: TotalConnectLocation,
92 entity_description: TotalConnectButtonEntityDescription,
94 """Initialize the TotalConnect button."""
95 super().
__init__(coordinator, location)
97 self.
_attr_unique_id_attr_unique_id = f
"{location.location_id}_{entity_description.key}"
100 """Press the button."""