Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Volvo On Call sensors."""
2 
3 from __future__ import annotations
4 
5 from volvooncall.dashboard import Instrument
6 
7 from homeassistant.components.sensor import SensorEntity
8 from homeassistant.config_entries import ConfigEntry
9 from homeassistant.core import HomeAssistant, callback
10 from homeassistant.helpers.dispatcher import async_dispatcher_connect
11 from homeassistant.helpers.entity_platform import AddEntitiesCallback
12 
13 from .const import DOMAIN, VOLVO_DISCOVERY_NEW
14 from .coordinator import VolvoUpdateCoordinator
15 from .entity import VolvoEntity
16 
17 
19  hass: HomeAssistant,
20  config_entry: ConfigEntry,
21  async_add_entities: AddEntitiesCallback,
22 ) -> None:
23  """Configure sensors from a config entry created in the integrations UI."""
24  coordinator: VolvoUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id]
25  volvo_data = coordinator.volvo_data
26 
27  @callback
28  def async_discover_device(instruments: list[Instrument]) -> None:
29  """Discover and add a discovered Volvo On Call sensor."""
32  coordinator,
33  instrument.vehicle.vin,
34  instrument.component,
35  instrument.attr,
36  instrument.slug_attr,
37  )
38  for instrument in instruments
39  if instrument.component == "sensor"
40  )
41 
42  async_discover_device([*volvo_data.instruments])
43 
44  config_entry.async_on_unload(
45  async_dispatcher_connect(hass, VOLVO_DISCOVERY_NEW, async_discover_device)
46  )
47 
48 
50  """Representation of a Volvo sensor."""
51 
52  def __init__(
53  self,
54  coordinator: VolvoUpdateCoordinator,
55  vin: str,
56  component: str,
57  attribute: str,
58  slug_attr: str,
59  ) -> None:
60  """Initialize the sensor."""
61  super().__init__(vin, component, attribute, slug_attr, coordinator)
62  self._update_value_and_unit_update_value_and_unit()
63 
64  def _update_value_and_unit(self) -> None:
65  self._attr_native_value_attr_native_value = self.instrumentinstrument.state
66  self._attr_native_unit_of_measurement_attr_native_unit_of_measurement = self.instrumentinstrument.unit
67 
68  @callback
69  def _handle_coordinator_update(self) -> None:
70  """Handle updated data from the coordinator."""
71  self._update_value_and_unit_update_value_and_unit()
72  self.async_write_ha_stateasync_write_ha_state()
None __init__(self, VolvoUpdateCoordinator coordinator, str vin, str component, str attribute, str slug_attr)
Definition: sensor.py:59
ElkSystem|None async_discover_device(HomeAssistant hass, str host)
Definition: discovery.py:78
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:22
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103