1 """Binary Sensor platform for La Marzocco espresso machines."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
6 from pylamarzocco.models
import LaMarzoccoMachineConfig
9 BinarySensorDeviceClass,
11 BinarySensorEntityDescription,
17 from .coordinator
import LaMarzoccoConfigEntry
18 from .entity
import LaMarzoccoEntity, LaMarzoccoEntityDescription
21 @dataclass(frozen=True, kw_only=True)
23 LaMarzoccoEntityDescription,
24 BinarySensorEntityDescription,
26 """Description of a La Marzocco binary sensor."""
28 is_on_fn: Callable[[LaMarzoccoMachineConfig], bool]
31 ENTITIES: tuple[LaMarzoccoBinarySensorEntityDescription, ...] = (
34 translation_key=
"water_tank",
35 device_class=BinarySensorDeviceClass.PROBLEM,
36 is_on_fn=
lambda config:
not config.water_contact,
37 entity_category=EntityCategory.DIAGNOSTIC,
38 supported_fn=
lambda coordinator: coordinator.local_connection_configured,
42 translation_key=
"brew_active",
43 device_class=BinarySensorDeviceClass.RUNNING,
44 is_on_fn=
lambda config: config.brew_active,
45 available_fn=
lambda device: device.websocket_connected,
46 entity_category=EntityCategory.DIAGNOSTIC,
49 key=
"backflush_enabled",
50 translation_key=
"backflush_enabled",
51 device_class=BinarySensorDeviceClass.RUNNING,
52 is_on_fn=
lambda config: config.backflush_enabled,
53 entity_category=EntityCategory.DIAGNOSTIC,
60 entry: LaMarzoccoConfigEntry,
61 async_add_entities: AddEntitiesCallback,
63 """Set up binary sensor entities."""
64 coordinator = entry.runtime_data
68 for description
in ENTITIES
69 if description.supported_fn(coordinator)
74 """Binary Sensor representing espresso machine water reservoir status."""
76 entity_description: LaMarzoccoBinarySensorEntityDescription
80 """Return true if the binary sensor is on."""
81 return self.
entity_descriptionentity_description.is_on_fn(self.coordinator.device.config)
None async_setup_entry(HomeAssistant hass, LaMarzoccoConfigEntry entry, AddEntitiesCallback async_add_entities)