core/homeassistant/components/lamarzocco/button.py

60 lines
1.7 KiB
Python

"""Button platform for La Marzocco espresso machines."""
from collections.abc import Callable, Coroutine
from dataclasses import dataclass
from typing import Any
from lmcloud import LMCloud as LaMarzoccoClient
from homeassistant.components.button import ButtonEntity, ButtonEntityDescription
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
from .entity import LaMarzoccoEntity, LaMarzoccoEntityDescription
@dataclass(frozen=True, kw_only=True)
class LaMarzoccoButtonEntityDescription(
LaMarzoccoEntityDescription,
ButtonEntityDescription,
):
"""Description of a La Marzocco button."""
press_fn: Callable[[LaMarzoccoClient], Coroutine[Any, Any, None]]
ENTITIES: tuple[LaMarzoccoButtonEntityDescription, ...] = (
LaMarzoccoButtonEntityDescription(
key="start_backflush",
translation_key="start_backflush",
press_fn=lambda lm: lm.start_backflush(),
),
)
async def async_setup_entry(
hass: HomeAssistant,
config_entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up button entities."""
coordinator = hass.data[DOMAIN][config_entry.entry_id]
async_add_entities(
LaMarzoccoButtonEntity(coordinator, description)
for description in ENTITIES
if description.supported_fn(coordinator)
)
class LaMarzoccoButtonEntity(LaMarzoccoEntity, ButtonEntity):
"""La Marzocco Button Entity."""
entity_description: LaMarzoccoButtonEntityDescription
async def async_press(self) -> None:
"""Press button."""
await self.entity_description.press_fn(self.coordinator.lm)