mirror of
https://github.com/home-assistant/core.git
synced 2026-06-01 21:24:17 +01:00
100 lines
3.0 KiB
Python
100 lines
3.0 KiB
Python
"""Button platform for Kiosker."""
|
|
|
|
from collections.abc import Callable
|
|
from dataclasses import dataclass
|
|
|
|
from kiosker import KioskerAPI
|
|
|
|
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
|
|
from homeassistant.const import EntityCategory
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
|
|
|
|
from . import KioskerConfigEntry
|
|
from .entity import KioskerEntity
|
|
|
|
PARALLEL_UPDATES = 1
|
|
|
|
|
|
@dataclass(frozen=True, kw_only=True)
|
|
class KioskerButtonEntityDescription(ButtonEntityDescription):
|
|
"""Describe a Kiosker button."""
|
|
|
|
action_fn: Callable[[KioskerAPI], None] | None = None
|
|
|
|
|
|
BUTTONS: tuple[KioskerButtonEntityDescription, ...] = (
|
|
KioskerButtonEntityDescription(
|
|
key="ping",
|
|
translation_key="ping",
|
|
entity_category=EntityCategory.DIAGNOSTIC,
|
|
action_fn=lambda api: api.ping(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="navigateRefresh",
|
|
translation_key="navigate_refresh",
|
|
action_fn=lambda api: api.navigate_refresh(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="navigateHome",
|
|
translation_key="navigate_home",
|
|
action_fn=lambda api: api.navigate_home(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="navigateForward",
|
|
translation_key="navigate_forward",
|
|
action_fn=lambda api: api.navigate_forward(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="navigateBackward",
|
|
translation_key="navigate_backward",
|
|
action_fn=lambda api: api.navigate_backward(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="print",
|
|
translation_key="print",
|
|
action_fn=lambda api: api.print(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="clearCache",
|
|
translation_key="clear_cache",
|
|
entity_category=EntityCategory.CONFIG,
|
|
action_fn=lambda api: api.clear_cache(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="clearCookies",
|
|
translation_key="clear_cookies",
|
|
entity_category=EntityCategory.CONFIG,
|
|
action_fn=lambda api: api.clear_cookies(),
|
|
),
|
|
KioskerButtonEntityDescription(
|
|
key="screensaverInteract",
|
|
translation_key="screensaver_interact",
|
|
action_fn=lambda api: api.screensaver_interact(),
|
|
),
|
|
)
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: KioskerConfigEntry,
|
|
async_add_entities: AddConfigEntryEntitiesCallback,
|
|
) -> None:
|
|
"""Set up Kiosker buttons based on a config entry."""
|
|
coordinator = entry.runtime_data
|
|
|
|
async_add_entities(
|
|
KioskerButton(coordinator, description) for description in BUTTONS
|
|
)
|
|
|
|
|
|
class KioskerButton(KioskerEntity, ButtonEntity):
|
|
"""Representation of a Kiosker button."""
|
|
|
|
entity_description: KioskerButtonEntityDescription
|
|
|
|
async def async_press(self) -> None:
|
|
"""Handle button press."""
|
|
if action_fn := self.entity_description.action_fn:
|
|
await self.hass.async_add_executor_job(action_fn, self.coordinator.api)
|