1 """Binary sensors for myUplink."""
3 from myuplink
import DeviceConnectionState, DevicePoint
6 BinarySensorDeviceClass,
8 BinarySensorEntityDescription,
14 from .
import MyUplinkConfigEntry, MyUplinkDataCoordinator
15 from .const
import F_SERIES
16 from .entity
import MyUplinkEntity, MyUplinkSystemEntity
17 from .helpers
import find_matching_platform, transform_model_series
19 CATEGORY_BASED_DESCRIPTIONS: dict[str, dict[str, BinarySensorEntityDescription]] = {
23 translation_key=
"elect_add",
29 translation_key=
"elect_add",
35 key=
"connected_state",
36 device_class=BinarySensorDeviceClass.CONNECTIVITY,
41 device_class=BinarySensorDeviceClass.PROBLEM,
42 translation_key=
"alarm",
46 def get_description(device_point: DevicePoint) -> BinarySensorEntityDescription |
None:
47 """Get description for a device point.
50 1. Category specific prefix e.g "NIBEF"
53 prefix, _, _ = device_point.category.partition(
" ")
55 return CATEGORY_BASED_DESCRIPTIONS.get(prefix, {}).
get(device_point.parameter_id)
60 config_entry: MyUplinkConfigEntry,
61 async_add_entities: AddEntitiesCallback,
63 """Set up myUplink binary_sensor."""
64 entities: list[BinarySensorEntity] = []
65 coordinator = config_entry.runtime_data
68 for device_id, point_data
in coordinator.data.points.items():
69 for point_id, device_point
in point_data.items():
75 coordinator=coordinator,
77 device_point=device_point,
78 entity_description=description,
79 unique_id_suffix=point_id,
86 coordinator=coordinator,
88 entity_description=CONNECTED_BINARY_SENSOR_DESCRIPTION,
89 unique_id_suffix=
"connection_state",
91 for system
in coordinator.data.systems
92 for device
in system.devices
96 for system
in coordinator.data.systems:
97 device_id = system.devices[0].id
100 coordinator=coordinator,
103 entity_description=ALARM_BINARY_SENSOR_DESCRIPTION,
104 unique_id_suffix=
"has_alarm",
112 """Representation of a myUplink device point bound binary sensor."""
116 coordinator: MyUplinkDataCoordinator,
118 device_point: DevicePoint,
119 entity_description: BinarySensorEntityDescription |
None,
120 unique_id_suffix: str,
122 """Initialize the binary_sensor."""
124 coordinator=coordinator,
126 unique_id_suffix=unique_id_suffix,
133 if entity_description
is not None:
138 """Binary sensor state value."""
139 device_point = self.coordinator.data.points[self.
device_iddevice_id][self.
point_idpoint_id]
140 return int(device_point.value) != 0
144 """Return device data availability."""
145 return super().available
and (
146 self.coordinator.data.devices[self.
device_iddevice_id].connectionState
147 == DeviceConnectionState.Connected
152 """Representation of a myUplink device bound binary sensor."""
156 coordinator: MyUplinkDataCoordinator,
158 entity_description: BinarySensorEntityDescription |
None,
159 unique_id_suffix: str,
161 """Initialize the binary_sensor."""
163 coordinator=coordinator,
165 unique_id_suffix=unique_id_suffix,
168 if entity_description
is not None:
173 """Binary sensor state value."""
175 self.coordinator.data.devices[self.
device_iddevice_id].connectionState
176 == DeviceConnectionState.Connected
181 """Representation of a myUplink system bound binary sensor."""
185 coordinator: MyUplinkDataCoordinator,
188 entity_description: BinarySensorEntityDescription |
None,
189 unique_id_suffix: str,
191 """Initialize the binary_sensor."""
193 coordinator=coordinator,
196 unique_id_suffix=unique_id_suffix,
199 if entity_description
is not None:
204 """Binary sensor state value."""
206 for system
in self.coordinator.data.systems:
208 retval = system.has_alarm
None __init__(self, MyUplinkDataCoordinator coordinator, str device_id, BinarySensorEntityDescription|None entity_description, str unique_id_suffix)
None __init__(self, MyUplinkDataCoordinator coordinator, str device_id, DevicePoint device_point, BinarySensorEntityDescription|None entity_description, str unique_id_suffix)
None __init__(self, MyUplinkDataCoordinator coordinator, str system_id, str device_id, BinarySensorEntityDescription|None entity_description, str unique_id_suffix)
web.Response get(self, web.Request request, str config_key)
BinarySensorEntityDescription|None get_description(DevicePoint device_point)
None async_setup_entry(HomeAssistant hass, MyUplinkConfigEntry config_entry, AddEntitiesCallback async_add_entities)
str transform_model_series(str prefix)
Platform find_matching_platform(DevicePoint device_point, SensorEntityDescription|NumberEntityDescription|None description=None)