1 """PrusaLink binary sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import Generic, TypeVar
9 from pyprusalink.types
import JobInfo, PrinterInfo, PrinterStatus
10 from pyprusalink.types_legacy
import LegacyPrinterStatus
14 BinarySensorEntityDescription,
20 from .const
import DOMAIN
21 from .coordinator
import PrusaLinkUpdateCoordinator
22 from .entity
import PrusaLinkEntity
24 T = TypeVar(
"T", PrinterStatus, LegacyPrinterStatus, JobInfo, PrinterInfo)
27 @dataclass(frozen=True)
29 """Mixin for required keys."""
31 value_fn: Callable[[T], bool]
34 @dataclass(frozen=True)
36 BinarySensorEntityDescription,
37 PrusaLinkBinarySensorEntityDescriptionMixin[T],
40 """Describes PrusaLink sensor entity."""
42 available_fn: Callable[[T], bool] =
lambda _:
True
45 BINARY_SENSORS: dict[str, tuple[PrusaLinkBinarySensorEntityDescription, ...]] = {
47 PrusaLinkBinarySensorEntityDescription[PrinterInfo](
49 translation_key=
"mmu",
50 value_fn=
lambda data: data[
"mmu"],
51 entity_registry_enabled_default=
False,
60 async_add_entities: AddEntitiesCallback,
62 """Set up PrusaLink sensor based on a config entry."""
63 coordinators: dict[str, PrusaLinkUpdateCoordinator] = hass.data[DOMAIN][
67 entities: list[PrusaLinkEntity] = []
68 for coordinator_type, binary_sensors
in BINARY_SENSORS.items():
69 coordinator = coordinators[coordinator_type]
72 for sensor_description
in binary_sensors
79 """Defines a PrusaLink binary sensor."""
81 entity_description: PrusaLinkBinarySensorEntityDescription
85 coordinator: PrusaLinkUpdateCoordinator,
86 description: PrusaLinkBinarySensorEntityDescription,
88 """Initialize a PrusaLink sensor entity."""
89 super().
__init__(coordinator=coordinator)
91 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.config_entry.entry_id}_{description.key}"
95 """Return the state of the sensor."""
None __init__(self, PrusaLinkUpdateCoordinator coordinator, PrusaLinkBinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)