Home Assistant Unofficial Reference 2024.12.1
binary_sensor.py
Go to the documentation of this file.
1 """Plugged In Status Support for the Nissan Leaf."""
2 
3 from __future__ import annotations
4 
5 import logging
6 
8  BinarySensorDeviceClass,
9  BinarySensorEntity,
10 )
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
14 
15 from . import LeafDataStore
16 from .const import DATA_CHARGING, DATA_LEAF, DATA_PLUGGED_IN
17 from .entity import LeafEntity
18 
19 _LOGGER = logging.getLogger(__name__)
20 
21 
23  hass: HomeAssistant,
24  config: ConfigType,
25  add_entities: AddEntitiesCallback,
26  discovery_info: DiscoveryInfoType | None = None,
27 ) -> None:
28  """Set up of a Nissan Leaf binary sensor."""
29  if discovery_info is None:
30  return
31 
32  entities: list[LeafEntity] = []
33  for vin, datastore in hass.data[DATA_LEAF].items():
34  _LOGGER.debug("Adding binary_sensors for vin=%s", vin)
35  entities.append(LeafPluggedInSensor(datastore))
36  entities.append(LeafChargingSensor(datastore))
37 
38  add_entities(entities, True)
39 
40 
42  """Plugged In Sensor class."""
43 
44  _attr_device_class = BinarySensorDeviceClass.PLUG
45 
46  def __init__(self, car: LeafDataStore) -> None:
47  """Set up plug status sensor."""
48  super().__init__(car)
49  self._attr_unique_id_attr_unique_id = f"{self.car.leaf.vin.lower()}_plugstatus"
50 
51  @property
52  def name(self) -> str:
53  """Sensor name."""
54  return f"{self.car.leaf.nickname} Plug Status"
55 
56  @property
57  def available(self) -> bool:
58  """Sensor availability."""
59  return self.carcar.data[DATA_PLUGGED_IN] is not None
60 
61  @property
62  def is_on(self) -> bool:
63  """Return true if plugged in."""
64  return bool(self.carcar.data[DATA_PLUGGED_IN])
65 
66 
68  """Charging Sensor class."""
69 
70  _attr_device_class = BinarySensorDeviceClass.BATTERY_CHARGING
71 
72  def __init__(self, car: LeafDataStore) -> None:
73  """Set up charging status sensor."""
74  super().__init__(car)
75  self._attr_unique_id_attr_unique_id = f"{self.car.leaf.vin.lower()}_chargingstatus"
76 
77  @property
78  def name(self) -> str:
79  """Sensor name."""
80  return f"{self.car.leaf.nickname} Charging Status"
81 
82  @property
83  def available(self) -> bool:
84  """Sensor availability."""
85  return self.carcar.data[DATA_CHARGING] is not None
86 
87  @property
88  def is_on(self) -> bool:
89  """Return true if charging."""
90  return bool(self.carcar.data[DATA_CHARGING])
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)