1
0
mirror of https://github.com/home-assistant/core.git synced 2026-06-01 21:24:17 +01:00
Files
2026-05-17 12:50:44 +02:00

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)