1 """Support for the QNAP QSW buttons."""
3 from __future__
import annotations
5 from collections.abc
import Awaitable, Callable
6 from dataclasses
import dataclass
7 from typing
import Final
9 from aioqsw.localapi
import QnapQswApi
14 ButtonEntityDescription,
21 from .const
import DOMAIN, QSW_COORD_DATA, QSW_REBOOT
22 from .coordinator
import QswDataCoordinator
23 from .entity
import QswDataEntity
26 @dataclass(frozen=True, kw_only=True)
28 """Class to describe a Button entity."""
30 press_action: Callable[[QnapQswApi], Awaitable[bool]]
33 BUTTON_TYPES: Final[tuple[QswButtonDescription, ...]] = (
35 device_class=ButtonDeviceClass.RESTART,
36 entity_category=EntityCategory.CONFIG,
38 press_action=
lambda qsw: qsw.reboot(),
44 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
46 """Add QNAP QSW buttons from a config_entry."""
47 coordinator: QswDataCoordinator = hass.data[DOMAIN][entry.entry_id][QSW_COORD_DATA]
49 QswButton(coordinator, description, entry)
for description
in BUTTON_TYPES
54 """Define a QNAP QSW button."""
56 _attr_has_entity_name =
True
58 entity_description: QswButtonDescription
62 coordinator: QswDataCoordinator,
63 description: QswButtonDescription,
72 """Triggers the QNAP QSW button action."""