1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-19 06:50:15 +01:00
Files
core/homeassistant/components/simplisafe/button.py
T
epenet 3758d606c9 Use runtime_data in simplisafe integration (#167858)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 11:47:58 +02:00

89 lines
2.5 KiB
Python

"""Buttons for the SimpliSafe integration."""
from __future__ import annotations
from collections.abc import Awaitable, Callable
from dataclasses import dataclass
from simplipy.errors import SimplipyError
from simplipy.system import System
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
from homeassistant.const import EntityCategory
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from . import SimpliSafe, SimpliSafeConfigEntry
from .entity import SimpliSafeEntity
from .typing import SystemType
@dataclass(frozen=True, kw_only=True)
class SimpliSafeButtonDescription(ButtonEntityDescription):
"""Describe a SimpliSafe button entity."""
push_action: Callable[[System], Awaitable]
BUTTON_KIND_CLEAR_NOTIFICATIONS = "clear_notifications"
async def _async_clear_notifications(system: System) -> None:
"""Reboot the SimpliSafe."""
await system.async_clear_notifications()
BUTTON_DESCRIPTIONS = (
SimpliSafeButtonDescription(
key=BUTTON_KIND_CLEAR_NOTIFICATIONS,
translation_key=BUTTON_KIND_CLEAR_NOTIFICATIONS,
push_action=_async_clear_notifications,
),
)
async def async_setup_entry(
hass: HomeAssistant,
entry: SimpliSafeConfigEntry,
async_add_entities: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up SimpliSafe buttons based on a config entry."""
simplisafe = entry.runtime_data
async_add_entities(
[
SimpliSafeButton(simplisafe, system, description)
for system in simplisafe.systems.values()
for description in BUTTON_DESCRIPTIONS
]
)
class SimpliSafeButton(SimpliSafeEntity, ButtonEntity):
"""Define a SimpliSafe button."""
_attr_entity_category = EntityCategory.CONFIG
entity_description: SimpliSafeButtonDescription
def __init__(
self,
simplisafe: SimpliSafe,
system: SystemType,
description: SimpliSafeButtonDescription,
) -> None:
"""Initialize the SimpliSafe alarm."""
super().__init__(simplisafe, system)
self.entity_description = description
async def async_press(self) -> None:
"""Send out a restart command."""
try:
await self.entity_description.push_action(self._system)
except SimplipyError as err:
raise HomeAssistantError(
f'Error while pressing button "{self.entity_id}": {err}'
) from err