1 """Button platform for La Marzocco espresso machines."""
4 from collections.abc
import Callable, Coroutine
5 from dataclasses
import dataclass
8 from pylamarzocco.exceptions
import RequestNotSuccessful
15 from .const
import DOMAIN
16 from .coordinator
import LaMarzoccoConfigEntry, LaMarzoccoUpdateCoordinator
17 from .entity
import LaMarzoccoEntity, LaMarzoccoEntityDescription
20 BACKFLUSH_ENABLED_DURATION = 15
23 @dataclass(frozen=True, kw_only=True)
25 LaMarzoccoEntityDescription,
26 ButtonEntityDescription,
28 """Description of a La Marzocco button."""
30 press_fn: Callable[[LaMarzoccoUpdateCoordinator], Coroutine[Any, Any,
None]]
34 """Press backflush button."""
35 await coordinator.device.start_backflush()
37 coordinator.async_set_updated_data(
None)
40 await asyncio.sleep(BACKFLUSH_ENABLED_DURATION + 1)
41 await coordinator.async_request_refresh()
44 ENTITIES: tuple[LaMarzoccoButtonEntityDescription, ...] = (
46 key=
"start_backflush",
47 translation_key=
"start_backflush",
48 press_fn=async_backflush_and_update,
55 entry: LaMarzoccoConfigEntry,
56 async_add_entities: AddEntitiesCallback,
58 """Set up button entities."""
60 coordinator = entry.runtime_data
63 for description
in ENTITIES
64 if description.supported_fn(coordinator)
69 """La Marzocco Button Entity."""
71 entity_description: LaMarzoccoButtonEntityDescription
77 except RequestNotSuccessful
as exc:
79 translation_domain=DOMAIN,
80 translation_key=
"button_error",
81 translation_placeholders={