1 """Support for Ambient Weather Station binary sensors."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from typing
import Literal
9 BinarySensorDeviceClass,
11 BinarySensorEntityDescription,
17 from .
import AmbientStationConfigEntry
18 from .const
import ATTR_LAST_DATA
19 from .entity
import AmbientWeatherEntity
22 TYPE_BATT10 =
"batt10"
31 TYPE_BATTIN =
"battin"
32 TYPE_BATTOUT =
"battout"
33 TYPE_BATT_CO2 =
"batt_co2"
34 TYPE_BATT_LEAK1 =
"batleak1"
35 TYPE_BATT_LEAK2 =
"batleak2"
36 TYPE_BATT_LEAK3 =
"batleak3"
37 TYPE_BATT_LEAK4 =
"batleak4"
38 TYPE_BATT_LIGHTNING =
"batt_lightning"
39 TYPE_BATT_SM1 =
"battsm1"
40 TYPE_BATT_SM10 =
"battsm10"
41 TYPE_BATT_SM2 =
"battsm2"
42 TYPE_BATT_SM3 =
"battsm3"
43 TYPE_BATT_SM4 =
"battsm4"
44 TYPE_BATT_SM5 =
"battsm5"
45 TYPE_BATT_SM6 =
"battsm6"
46 TYPE_BATT_SM7 =
"battsm7"
47 TYPE_BATT_SM8 =
"battsm8"
48 TYPE_BATT_SM9 =
"battsm9"
53 TYPE_PM25IN_BATT =
"batt_25in"
54 TYPE_PM25_BATT =
"batt_25"
55 TYPE_RELAY1 =
"relay1"
56 TYPE_RELAY10 =
"relay10"
57 TYPE_RELAY2 =
"relay2"
58 TYPE_RELAY3 =
"relay3"
59 TYPE_RELAY4 =
"relay4"
60 TYPE_RELAY5 =
"relay5"
61 TYPE_RELAY6 =
"relay6"
62 TYPE_RELAY7 =
"relay7"
63 TYPE_RELAY8 =
"relay8"
64 TYPE_RELAY9 =
"relay9"
67 @dataclass(frozen=True, kw_only=True)
69 """Describe an Ambient PWS binary sensor."""
71 on_state: Literal[0, 1]
74 BINARY_SENSOR_DESCRIPTIONS = (
77 device_class=BinarySensorDeviceClass.BATTERY,
78 entity_category=EntityCategory.DIAGNOSTIC,
83 translation_key=
"battery_1",
84 device_class=BinarySensorDeviceClass.BATTERY,
85 entity_category=EntityCategory.DIAGNOSTIC,
90 translation_key=
"battery_2",
91 device_class=BinarySensorDeviceClass.BATTERY,
92 entity_category=EntityCategory.DIAGNOSTIC,
97 translation_key=
"battery_3",
98 device_class=BinarySensorDeviceClass.BATTERY,
99 entity_category=EntityCategory.DIAGNOSTIC,
104 translation_key=
"battery_4",
105 device_class=BinarySensorDeviceClass.BATTERY,
106 entity_category=EntityCategory.DIAGNOSTIC,
111 translation_key=
"battery_5",
112 device_class=BinarySensorDeviceClass.BATTERY,
113 entity_category=EntityCategory.DIAGNOSTIC,
118 translation_key=
"battery_6",
119 device_class=BinarySensorDeviceClass.BATTERY,
120 entity_category=EntityCategory.DIAGNOSTIC,
125 translation_key=
"battery_7",
126 device_class=BinarySensorDeviceClass.BATTERY,
127 entity_category=EntityCategory.DIAGNOSTIC,
132 translation_key=
"battery_8",
133 device_class=BinarySensorDeviceClass.BATTERY,
134 entity_category=EntityCategory.DIAGNOSTIC,
139 translation_key=
"battery_9",
140 device_class=BinarySensorDeviceClass.BATTERY,
141 entity_category=EntityCategory.DIAGNOSTIC,
146 translation_key=
"interior_battery",
147 device_class=BinarySensorDeviceClass.BATTERY,
148 entity_category=EntityCategory.DIAGNOSTIC,
153 translation_key=
"battery_10",
154 device_class=BinarySensorDeviceClass.BATTERY,
155 entity_category=EntityCategory.DIAGNOSTIC,
160 translation_key=
"leak_detector_battery_1",
161 device_class=BinarySensorDeviceClass.BATTERY,
162 entity_category=EntityCategory.DIAGNOSTIC,
167 translation_key=
"leak_detector_battery_2",
168 device_class=BinarySensorDeviceClass.BATTERY,
169 entity_category=EntityCategory.DIAGNOSTIC,
174 translation_key=
"leak_detector_battery_3",
175 device_class=BinarySensorDeviceClass.BATTERY,
176 entity_category=EntityCategory.DIAGNOSTIC,
181 translation_key=
"leak_detector_battery_4",
182 device_class=BinarySensorDeviceClass.BATTERY,
183 entity_category=EntityCategory.DIAGNOSTIC,
188 translation_key=
"soil_monitor_battery_1",
189 device_class=BinarySensorDeviceClass.BATTERY,
190 entity_category=EntityCategory.DIAGNOSTIC,
195 translation_key=
"soil_monitor_battery_2",
196 device_class=BinarySensorDeviceClass.BATTERY,
197 entity_category=EntityCategory.DIAGNOSTIC,
202 translation_key=
"soil_monitor_battery_3",
203 device_class=BinarySensorDeviceClass.BATTERY,
204 entity_category=EntityCategory.DIAGNOSTIC,
209 translation_key=
"soil_monitor_battery_4",
210 device_class=BinarySensorDeviceClass.BATTERY,
211 entity_category=EntityCategory.DIAGNOSTIC,
216 translation_key=
"soil_monitor_battery_5",
217 device_class=BinarySensorDeviceClass.BATTERY,
218 entity_category=EntityCategory.DIAGNOSTIC,
223 translation_key=
"soil_monitor_battery_6",
224 device_class=BinarySensorDeviceClass.BATTERY,
225 entity_category=EntityCategory.DIAGNOSTIC,
230 translation_key=
"soil_monitor_battery_7",
231 device_class=BinarySensorDeviceClass.BATTERY,
232 entity_category=EntityCategory.DIAGNOSTIC,
237 translation_key=
"soil_monitor_battery_8",
238 device_class=BinarySensorDeviceClass.BATTERY,
239 entity_category=EntityCategory.DIAGNOSTIC,
244 translation_key=
"soil_monitor_battery_9",
245 device_class=BinarySensorDeviceClass.BATTERY,
246 entity_category=EntityCategory.DIAGNOSTIC,
251 translation_key=
"soil_monitor_battery_10",
252 device_class=BinarySensorDeviceClass.BATTERY,
253 entity_category=EntityCategory.DIAGNOSTIC,
258 translation_key=
"co2_battery",
259 device_class=BinarySensorDeviceClass.BATTERY,
260 entity_category=EntityCategory.DIAGNOSTIC,
264 key=TYPE_BATT_LIGHTNING,
265 translation_key=
"lightning_detector_battery",
266 device_class=BinarySensorDeviceClass.BATTERY,
267 entity_category=EntityCategory.DIAGNOSTIC,
272 translation_key=
"leak_detector_1",
273 device_class=BinarySensorDeviceClass.MOISTURE,
278 translation_key=
"leak_detector_2",
279 device_class=BinarySensorDeviceClass.MOISTURE,
284 translation_key=
"leak_detector_3",
285 device_class=BinarySensorDeviceClass.MOISTURE,
290 translation_key=
"leak_detector_4",
291 device_class=BinarySensorDeviceClass.MOISTURE,
295 key=TYPE_PM25IN_BATT,
296 translation_key=
"pm25_indoor_battery",
297 device_class=BinarySensorDeviceClass.BATTERY,
298 entity_category=EntityCategory.DIAGNOSTIC,
303 translation_key=
"pm25_battery",
304 device_class=BinarySensorDeviceClass.BATTERY,
305 entity_category=EntityCategory.DIAGNOSTIC,
310 translation_key=
"relay_1",
311 device_class=BinarySensorDeviceClass.CONNECTIVITY,
312 entity_category=EntityCategory.DIAGNOSTIC,
317 translation_key=
"relay_2",
318 device_class=BinarySensorDeviceClass.CONNECTIVITY,
319 entity_category=EntityCategory.DIAGNOSTIC,
324 translation_key=
"relay_3",
325 device_class=BinarySensorDeviceClass.CONNECTIVITY,
326 entity_category=EntityCategory.DIAGNOSTIC,
331 translation_key=
"relay_4",
332 device_class=BinarySensorDeviceClass.CONNECTIVITY,
333 entity_category=EntityCategory.DIAGNOSTIC,
338 translation_key=
"relay_5",
339 device_class=BinarySensorDeviceClass.CONNECTIVITY,
340 entity_category=EntityCategory.DIAGNOSTIC,
345 translation_key=
"relay_6",
346 device_class=BinarySensorDeviceClass.CONNECTIVITY,
347 entity_category=EntityCategory.DIAGNOSTIC,
352 translation_key=
"relay_7",
353 device_class=BinarySensorDeviceClass.CONNECTIVITY,
354 entity_category=EntityCategory.DIAGNOSTIC,
359 translation_key=
"relay_8",
360 device_class=BinarySensorDeviceClass.CONNECTIVITY,
361 entity_category=EntityCategory.DIAGNOSTIC,
366 translation_key=
"relay_9",
367 device_class=BinarySensorDeviceClass.CONNECTIVITY,
368 entity_category=EntityCategory.DIAGNOSTIC,
373 translation_key=
"relay_10",
374 device_class=BinarySensorDeviceClass.CONNECTIVITY,
375 entity_category=EntityCategory.DIAGNOSTIC,
383 entry: AmbientStationConfigEntry,
384 async_add_entities: AddEntitiesCallback,
386 """Set up Ambient PWS binary sensors based on a config entry."""
387 ambient = entry.runtime_data
391 ambient, mac_address, station[ATTR_NAME], description
393 for mac_address, station
in ambient.stations.items()
394 for description
in BINARY_SENSOR_DESCRIPTIONS
395 if description.key
in station[ATTR_LAST_DATA]
400 """Define an Ambient binary sensor."""
402 entity_description: AmbientBinarySensorDescription
406 """Fetch new state data for the entity."""
409 self.
_attr_is_on_attr_is_on = last_data[description.key] == description.on_state
None update_from_latest_data(self)
None async_setup_entry(HomeAssistant hass, AmbientStationConfigEntry entry, AddEntitiesCallback async_add_entities)