Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Support for Ambient Weather Station binary sensors."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 from typing import Literal
7 
9  BinarySensorDeviceClass,
10  BinarySensorEntity,
11  BinarySensorEntityDescription,
12 )
13 from homeassistant.const import ATTR_NAME, EntityCategory
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.entity_platform import AddEntitiesCallback
16 
17 from . import AmbientStationConfigEntry
18 from .const import ATTR_LAST_DATA
19 from .entity import AmbientWeatherEntity
20 
21 TYPE_BATT1 = "batt1"
22 TYPE_BATT10 = "batt10"
23 TYPE_BATT2 = "batt2"
24 TYPE_BATT3 = "batt3"
25 TYPE_BATT4 = "batt4"
26 TYPE_BATT5 = "batt5"
27 TYPE_BATT6 = "batt6"
28 TYPE_BATT7 = "batt7"
29 TYPE_BATT8 = "batt8"
30 TYPE_BATT9 = "batt9"
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"
49 TYPE_LEAK1 = "leak1"
50 TYPE_LEAK2 = "leak2"
51 TYPE_LEAK3 = "leak3"
52 TYPE_LEAK4 = "leak4"
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"
65 
66 
67 @dataclass(frozen=True, kw_only=True)
69  """Describe an Ambient PWS binary sensor."""
70 
71  on_state: Literal[0, 1]
72 
73 
74 BINARY_SENSOR_DESCRIPTIONS = (
76  key=TYPE_BATTOUT,
77  device_class=BinarySensorDeviceClass.BATTERY,
78  entity_category=EntityCategory.DIAGNOSTIC,
79  on_state=0,
80  ),
82  key=TYPE_BATT1,
83  translation_key="battery_1",
84  device_class=BinarySensorDeviceClass.BATTERY,
85  entity_category=EntityCategory.DIAGNOSTIC,
86  on_state=0,
87  ),
89  key=TYPE_BATT2,
90  translation_key="battery_2",
91  device_class=BinarySensorDeviceClass.BATTERY,
92  entity_category=EntityCategory.DIAGNOSTIC,
93  on_state=0,
94  ),
96  key=TYPE_BATT3,
97  translation_key="battery_3",
98  device_class=BinarySensorDeviceClass.BATTERY,
99  entity_category=EntityCategory.DIAGNOSTIC,
100  on_state=0,
101  ),
103  key=TYPE_BATT4,
104  translation_key="battery_4",
105  device_class=BinarySensorDeviceClass.BATTERY,
106  entity_category=EntityCategory.DIAGNOSTIC,
107  on_state=0,
108  ),
110  key=TYPE_BATT5,
111  translation_key="battery_5",
112  device_class=BinarySensorDeviceClass.BATTERY,
113  entity_category=EntityCategory.DIAGNOSTIC,
114  on_state=0,
115  ),
117  key=TYPE_BATT6,
118  translation_key="battery_6",
119  device_class=BinarySensorDeviceClass.BATTERY,
120  entity_category=EntityCategory.DIAGNOSTIC,
121  on_state=0,
122  ),
124  key=TYPE_BATT7,
125  translation_key="battery_7",
126  device_class=BinarySensorDeviceClass.BATTERY,
127  entity_category=EntityCategory.DIAGNOSTIC,
128  on_state=0,
129  ),
131  key=TYPE_BATT8,
132  translation_key="battery_8",
133  device_class=BinarySensorDeviceClass.BATTERY,
134  entity_category=EntityCategory.DIAGNOSTIC,
135  on_state=0,
136  ),
138  key=TYPE_BATT9,
139  translation_key="battery_9",
140  device_class=BinarySensorDeviceClass.BATTERY,
141  entity_category=EntityCategory.DIAGNOSTIC,
142  on_state=0,
143  ),
145  key=TYPE_BATTIN,
146  translation_key="interior_battery",
147  device_class=BinarySensorDeviceClass.BATTERY,
148  entity_category=EntityCategory.DIAGNOSTIC,
149  on_state=0,
150  ),
152  key=TYPE_BATT10,
153  translation_key="battery_10",
154  device_class=BinarySensorDeviceClass.BATTERY,
155  entity_category=EntityCategory.DIAGNOSTIC,
156  on_state=0,
157  ),
159  key=TYPE_BATT_LEAK1,
160  translation_key="leak_detector_battery_1",
161  device_class=BinarySensorDeviceClass.BATTERY,
162  entity_category=EntityCategory.DIAGNOSTIC,
163  on_state=1,
164  ),
166  key=TYPE_BATT_LEAK2,
167  translation_key="leak_detector_battery_2",
168  device_class=BinarySensorDeviceClass.BATTERY,
169  entity_category=EntityCategory.DIAGNOSTIC,
170  on_state=1,
171  ),
173  key=TYPE_BATT_LEAK3,
174  translation_key="leak_detector_battery_3",
175  device_class=BinarySensorDeviceClass.BATTERY,
176  entity_category=EntityCategory.DIAGNOSTIC,
177  on_state=1,
178  ),
180  key=TYPE_BATT_LEAK4,
181  translation_key="leak_detector_battery_4",
182  device_class=BinarySensorDeviceClass.BATTERY,
183  entity_category=EntityCategory.DIAGNOSTIC,
184  on_state=1,
185  ),
187  key=TYPE_BATT_SM1,
188  translation_key="soil_monitor_battery_1",
189  device_class=BinarySensorDeviceClass.BATTERY,
190  entity_category=EntityCategory.DIAGNOSTIC,
191  on_state=0,
192  ),
194  key=TYPE_BATT_SM2,
195  translation_key="soil_monitor_battery_2",
196  device_class=BinarySensorDeviceClass.BATTERY,
197  entity_category=EntityCategory.DIAGNOSTIC,
198  on_state=0,
199  ),
201  key=TYPE_BATT_SM3,
202  translation_key="soil_monitor_battery_3",
203  device_class=BinarySensorDeviceClass.BATTERY,
204  entity_category=EntityCategory.DIAGNOSTIC,
205  on_state=0,
206  ),
208  key=TYPE_BATT_SM4,
209  translation_key="soil_monitor_battery_4",
210  device_class=BinarySensorDeviceClass.BATTERY,
211  entity_category=EntityCategory.DIAGNOSTIC,
212  on_state=0,
213  ),
215  key=TYPE_BATT_SM5,
216  translation_key="soil_monitor_battery_5",
217  device_class=BinarySensorDeviceClass.BATTERY,
218  entity_category=EntityCategory.DIAGNOSTIC,
219  on_state=0,
220  ),
222  key=TYPE_BATT_SM6,
223  translation_key="soil_monitor_battery_6",
224  device_class=BinarySensorDeviceClass.BATTERY,
225  entity_category=EntityCategory.DIAGNOSTIC,
226  on_state=0,
227  ),
229  key=TYPE_BATT_SM7,
230  translation_key="soil_monitor_battery_7",
231  device_class=BinarySensorDeviceClass.BATTERY,
232  entity_category=EntityCategory.DIAGNOSTIC,
233  on_state=0,
234  ),
236  key=TYPE_BATT_SM8,
237  translation_key="soil_monitor_battery_8",
238  device_class=BinarySensorDeviceClass.BATTERY,
239  entity_category=EntityCategory.DIAGNOSTIC,
240  on_state=0,
241  ),
243  key=TYPE_BATT_SM9,
244  translation_key="soil_monitor_battery_9",
245  device_class=BinarySensorDeviceClass.BATTERY,
246  entity_category=EntityCategory.DIAGNOSTIC,
247  on_state=0,
248  ),
250  key=TYPE_BATT_SM10,
251  translation_key="soil_monitor_battery_10",
252  device_class=BinarySensorDeviceClass.BATTERY,
253  entity_category=EntityCategory.DIAGNOSTIC,
254  on_state=0,
255  ),
257  key=TYPE_BATT_CO2,
258  translation_key="co2_battery",
259  device_class=BinarySensorDeviceClass.BATTERY,
260  entity_category=EntityCategory.DIAGNOSTIC,
261  on_state=0,
262  ),
264  key=TYPE_BATT_LIGHTNING,
265  translation_key="lightning_detector_battery",
266  device_class=BinarySensorDeviceClass.BATTERY,
267  entity_category=EntityCategory.DIAGNOSTIC,
268  on_state=1,
269  ),
271  key=TYPE_LEAK1,
272  translation_key="leak_detector_1",
273  device_class=BinarySensorDeviceClass.MOISTURE,
274  on_state=1,
275  ),
277  key=TYPE_LEAK2,
278  translation_key="leak_detector_2",
279  device_class=BinarySensorDeviceClass.MOISTURE,
280  on_state=1,
281  ),
283  key=TYPE_LEAK3,
284  translation_key="leak_detector_3",
285  device_class=BinarySensorDeviceClass.MOISTURE,
286  on_state=1,
287  ),
289  key=TYPE_LEAK4,
290  translation_key="leak_detector_4",
291  device_class=BinarySensorDeviceClass.MOISTURE,
292  on_state=1,
293  ),
295  key=TYPE_PM25IN_BATT,
296  translation_key="pm25_indoor_battery",
297  device_class=BinarySensorDeviceClass.BATTERY,
298  entity_category=EntityCategory.DIAGNOSTIC,
299  on_state=0,
300  ),
302  key=TYPE_PM25_BATT,
303  translation_key="pm25_battery",
304  device_class=BinarySensorDeviceClass.BATTERY,
305  entity_category=EntityCategory.DIAGNOSTIC,
306  on_state=0,
307  ),
309  key=TYPE_RELAY1,
310  translation_key="relay_1",
311  device_class=BinarySensorDeviceClass.CONNECTIVITY,
312  entity_category=EntityCategory.DIAGNOSTIC,
313  on_state=1,
314  ),
316  key=TYPE_RELAY2,
317  translation_key="relay_2",
318  device_class=BinarySensorDeviceClass.CONNECTIVITY,
319  entity_category=EntityCategory.DIAGNOSTIC,
320  on_state=1,
321  ),
323  key=TYPE_RELAY3,
324  translation_key="relay_3",
325  device_class=BinarySensorDeviceClass.CONNECTIVITY,
326  entity_category=EntityCategory.DIAGNOSTIC,
327  on_state=1,
328  ),
330  key=TYPE_RELAY4,
331  translation_key="relay_4",
332  device_class=BinarySensorDeviceClass.CONNECTIVITY,
333  entity_category=EntityCategory.DIAGNOSTIC,
334  on_state=1,
335  ),
337  key=TYPE_RELAY5,
338  translation_key="relay_5",
339  device_class=BinarySensorDeviceClass.CONNECTIVITY,
340  entity_category=EntityCategory.DIAGNOSTIC,
341  on_state=1,
342  ),
344  key=TYPE_RELAY6,
345  translation_key="relay_6",
346  device_class=BinarySensorDeviceClass.CONNECTIVITY,
347  entity_category=EntityCategory.DIAGNOSTIC,
348  on_state=1,
349  ),
351  key=TYPE_RELAY7,
352  translation_key="relay_7",
353  device_class=BinarySensorDeviceClass.CONNECTIVITY,
354  entity_category=EntityCategory.DIAGNOSTIC,
355  on_state=1,
356  ),
358  key=TYPE_RELAY8,
359  translation_key="relay_8",
360  device_class=BinarySensorDeviceClass.CONNECTIVITY,
361  entity_category=EntityCategory.DIAGNOSTIC,
362  on_state=1,
363  ),
365  key=TYPE_RELAY9,
366  translation_key="relay_9",
367  device_class=BinarySensorDeviceClass.CONNECTIVITY,
368  entity_category=EntityCategory.DIAGNOSTIC,
369  on_state=1,
370  ),
372  key=TYPE_RELAY10,
373  translation_key="relay_10",
374  device_class=BinarySensorDeviceClass.CONNECTIVITY,
375  entity_category=EntityCategory.DIAGNOSTIC,
376  on_state=1,
377  ),
378 )
379 
380 
382  hass: HomeAssistant,
383  entry: AmbientStationConfigEntry,
384  async_add_entities: AddEntitiesCallback,
385 ) -> None:
386  """Set up Ambient PWS binary sensors based on a config entry."""
387  ambient = entry.runtime_data
388 
391  ambient, mac_address, station[ATTR_NAME], description
392  )
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]
396  )
397 
398 
400  """Define an Ambient binary sensor."""
401 
402  entity_description: AmbientBinarySensorDescription
403 
404  @callback
405  def update_from_latest_data(self) -> None:
406  """Fetch new state data for the entity."""
407  description = self.entity_descriptionentity_description
408  last_data = self._ambient_ambient.stations[self._mac_address_mac_address][ATTR_LAST_DATA]
409  self._attr_is_on_attr_is_on = last_data[description.key] == description.on_state
None async_setup_entry(HomeAssistant hass, AmbientStationConfigEntry entry, AddEntitiesCallback async_add_entities)