Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Bizkaibus, Biscay (Basque Country, Spain) Bus service."""
2 
3 from __future__ import annotations
4 
5 from contextlib import suppress
6 
7 from bizkaibus.bizkaibus import BizkaibusData
8 import voluptuous as vol
9 
11  PLATFORM_SCHEMA as SENSOR_PLATFORM_SCHEMA,
12  SensorEntity,
13 )
14 from homeassistant.const import CONF_NAME, UnitOfTime
15 from homeassistant.core import HomeAssistant
17 from homeassistant.helpers.entity_platform import AddEntitiesCallback
18 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
19 
20 ATTR_DUE_IN = "Due in"
21 
22 CONF_STOP_ID = "stopid"
23 CONF_ROUTE = "route"
24 
25 DEFAULT_NAME = "Next bus"
26 
27 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
28  {
29  vol.Required(CONF_STOP_ID): cv.string,
30  vol.Required(CONF_ROUTE): cv.string,
31  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
32  }
33 )
34 
35 
37  hass: HomeAssistant,
38  config: ConfigType,
39  add_entities: AddEntitiesCallback,
40  discovery_info: DiscoveryInfoType | None = None,
41 ) -> None:
42  """Set up the Bizkaibus public transport sensor."""
43  name = config[CONF_NAME]
44  stop = config[CONF_STOP_ID]
45  route = config[CONF_ROUTE]
46 
47  data = Bizkaibus(stop, route)
48  add_entities([BizkaibusSensor(data, name)], True)
49 
50 
52  """The class for handling the data."""
53 
54  _attr_native_unit_of_measurement = UnitOfTime.MINUTES
55 
56  def __init__(self, data, name):
57  """Initialize the sensor."""
58  self.datadata = data
59  self._attr_name_attr_name = name
60 
61  def update(self) -> None:
62  """Get the latest data from the webservice."""
63  self.datadata.update()
64  with suppress(TypeError):
65  self._attr_native_value_attr_native_value = self.datadata.info[0][ATTR_DUE_IN]
66 
67 
68 class Bizkaibus:
69  """The class for handling the data retrieval."""
70 
71  def __init__(self, stop, route):
72  """Initialize the data object."""
73  self.stopstop = stop
74  self.routeroute = route
75  self.infoinfo = None
76 
77  def update(self):
78  """Retrieve the information from API."""
79  bridge = BizkaibusData(self.stopstop, self.routeroute)
80  bridge.getNextBus()
81  self.infoinfo = bridge.info
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: sensor.py:41
def add_entities(account, async_add_entities, tracked)
Definition: sensor.py:40