Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Reads vehicle status from StarLine API."""
2 
3 from __future__ import annotations
4 
6  BinarySensorDeviceClass,
7  BinarySensorEntity,
8  BinarySensorEntityDescription,
9 )
10 from homeassistant.config_entries import ConfigEntry
11 from homeassistant.const import EntityCategory
12 from homeassistant.core import HomeAssistant
13 from homeassistant.helpers.entity_platform import AddEntitiesCallback
14 
15 from .account import StarlineAccount, StarlineDevice
16 from .const import DOMAIN
17 from .entity import StarlineEntity
18 
19 BINARY_SENSOR_TYPES: tuple[BinarySensorEntityDescription, ...] = (
21  key="hbrake",
22  translation_key="hand_brake",
23  ),
25  key="hood",
26  translation_key="hood",
27  device_class=BinarySensorDeviceClass.DOOR,
28  ),
30  key="trunk",
31  translation_key="trunk",
32  device_class=BinarySensorDeviceClass.DOOR,
33  ),
35  key="alarm",
36  translation_key="alarm",
37  device_class=BinarySensorDeviceClass.PROBLEM,
38  ),
40  key="door",
41  translation_key="doors",
42  device_class=BinarySensorDeviceClass.LOCK,
43  ),
45  key="run",
46  translation_key="is_running",
47  device_class=BinarySensorDeviceClass.RUNNING,
48  ),
50  key="hfree",
51  translation_key="handsfree",
52  entity_category=EntityCategory.DIAGNOSTIC,
53  ),
55  key="neutral",
56  translation_key="neutral",
57  entity_category=EntityCategory.DIAGNOSTIC,
58  ),
60  key="arm_moving_pb",
61  translation_key="moving_ban",
62  entity_category=EntityCategory.DIAGNOSTIC,
63  ),
64 )
65 
66 
68  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
69 ) -> None:
70  """Set up the StarLine sensors."""
71  account: StarlineAccount = hass.data[DOMAIN][entry.entry_id]
72  entities = [
73  sensor
74  for device in account.api.devices.values()
75  for description in BINARY_SENSOR_TYPES
76  if description.key in device.car_state
77  if (sensor := StarlineSensor(account, device, description)).is_on is not None
78  ]
79  async_add_entities(entities)
80 
81 
83  """Representation of a StarLine binary sensor."""
84 
85  def __init__(
86  self,
87  account: StarlineAccount,
88  device: StarlineDevice,
89  description: BinarySensorEntityDescription,
90  ) -> None:
91  """Initialize sensor."""
92  super().__init__(account, device, description.key)
93  self.entity_descriptionentity_description = description
94 
95  @property
96  def is_on(self):
97  """Return the state of the binary sensor."""
98  return self._device_device.car_state.get(self._key_key)
None __init__(self, StarlineAccount account, StarlineDevice device, BinarySensorEntityDescription description)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)