1 """Support for Lektrico binary sensors entities."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
8 BinarySensorDeviceClass,
10 BinarySensorEntityDescription,
16 from .
import LektricoConfigEntry, LektricoDeviceDataUpdateCoordinator
17 from .entity
import LektricoEntity
20 @dataclass(frozen=True, kw_only=True)
22 """Describes Lektrico binary sensor entity."""
24 value_fn: Callable[[dict[str, Any]], bool]
27 BINARY_SENSORS: tuple[LektricoBinarySensorEntityDescription, ...] = (
29 key=
"state_e_activated",
30 translation_key=
"state_e_activated",
31 entity_category=EntityCategory.DIAGNOSTIC,
32 device_class=BinarySensorDeviceClass.PROBLEM,
33 value_fn=
lambda data:
bool(data[
"state_e_activated"]),
37 translation_key=
"overtemp",
38 entity_category=EntityCategory.DIAGNOSTIC,
39 device_class=BinarySensorDeviceClass.PROBLEM,
40 value_fn=
lambda data:
bool(data[
"overtemp"]),
44 translation_key=
"critical_temp",
45 entity_category=EntityCategory.DIAGNOSTIC,
46 device_class=BinarySensorDeviceClass.PROBLEM,
47 value_fn=
lambda data:
bool(data[
"critical_temp"]),
51 translation_key=
"overcurrent",
52 entity_category=EntityCategory.DIAGNOSTIC,
53 device_class=BinarySensorDeviceClass.PROBLEM,
54 value_fn=
lambda data:
bool(data[
"overcurrent"]),
58 translation_key=
"meter_fault",
59 entity_category=EntityCategory.DIAGNOSTIC,
60 device_class=BinarySensorDeviceClass.PROBLEM,
61 value_fn=
lambda data:
bool(data[
"meter_fault"]),
65 translation_key=
"undervoltage",
66 entity_category=EntityCategory.DIAGNOSTIC,
67 device_class=BinarySensorDeviceClass.PROBLEM,
68 value_fn=
lambda data:
bool(data[
"undervoltage_error"]),
72 translation_key=
"overvoltage",
73 entity_category=EntityCategory.DIAGNOSTIC,
74 device_class=BinarySensorDeviceClass.PROBLEM,
75 value_fn=
lambda data:
bool(data[
"overvoltage_error"]),
79 translation_key=
"rcd_error",
80 entity_category=EntityCategory.DIAGNOSTIC,
81 device_class=BinarySensorDeviceClass.PROBLEM,
82 value_fn=
lambda data:
bool(data[
"rcd_error"]),
85 key=
"cp_diode_failure",
86 translation_key=
"cp_diode_failure",
87 entity_category=EntityCategory.DIAGNOSTIC,
88 device_class=BinarySensorDeviceClass.PROBLEM,
89 value_fn=
lambda data:
bool(data[
"cp_diode_failure"]),
92 key=
"contactor_failure",
93 translation_key=
"contactor_failure",
94 entity_category=EntityCategory.DIAGNOSTIC,
95 device_class=BinarySensorDeviceClass.PROBLEM,
96 value_fn=
lambda data:
bool(data[
"contactor_failure"]),
103 entry: LektricoConfigEntry,
104 async_add_entities: AddEntitiesCallback,
106 """Set up Lektrico binary sensor entities based on a config entry."""
107 coordinator = entry.runtime_data
113 f
"{entry.data[CONF_TYPE]}_{entry.data[ATTR_SERIAL_NUMBER]}",
115 for description
in BINARY_SENSORS
120 """Defines a Lektrico binary sensor entity."""
122 entity_description: LektricoBinarySensorEntityDescription
126 description: LektricoBinarySensorEntityDescription,
127 coordinator: LektricoDeviceDataUpdateCoordinator,
130 """Initialize Lektrico binary sensor."""
131 super().
__init__(coordinator, device_name)
134 self.
_attr_unique_id_attr_unique_id = f
"{coordinator.serial_number}_{description.key}"
138 """Return the state of the binary sensor."""
None __init__(self, LektricoBinarySensorEntityDescription description, LektricoDeviceDataUpdateCoordinator coordinator, str device_name)
None async_setup_entry(HomeAssistant hass, LektricoConfigEntry entry, AddEntitiesCallback async_add_entities)