1 """Support for TMB (Transports Metropolitans de Barcelona) Barcelona public transport."""
3 from __future__
import annotations
5 from datetime
import timedelta
8 from requests
import HTTPError
10 import voluptuous
as vol
13 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
23 _LOGGER = logging.getLogger(__name__)
25 CONF_APP_ID =
"app_id"
26 CONF_APP_KEY =
"app_key"
28 CONF_BUS_STOP =
"stop"
29 CONF_BUS_STOPS =
"stops"
30 ATTR_BUS_STOP =
"stop"
35 LINE_STOP_SCHEMA = vol.Schema(
37 vol.Required(CONF_BUS_STOP): cv.string,
38 vol.Required(CONF_LINE): cv.string,
39 vol.Optional(CONF_NAME): cv.string,
43 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
45 vol.Required(CONF_APP_ID): cv.string,
46 vol.Required(CONF_APP_KEY): cv.string,
47 vol.Required(CONF_BUS_STOPS): vol.All(cv.ensure_list, [LINE_STOP_SCHEMA]),
55 add_entities: AddEntitiesCallback,
56 discovery_info: DiscoveryInfoType |
None =
None,
58 """Set up the sensors."""
59 ibus_client = IBus(config[CONF_APP_ID], config[CONF_APP_KEY])
63 for line_stop
in config[CONF_BUS_STOPS]:
64 line = line_stop[CONF_LINE]
65 stop = line_stop[CONF_BUS_STOP]
66 if line_stop.get(CONF_NAME):
67 name = f
"{line} - {line_stop[CONF_NAME]} ({stop})"
69 name = f
"{line} - {stop}"
70 sensors.append(
TMBSensor(ibus_client, stop, line, name))
76 """Implementation of a TMB line/stop Sensor."""
78 _attr_attribution =
"Data provided by Transport Metropolitans de Barcelona"
79 _attr_icon =
"mdi:bus-clock"
81 def __init__(self, ibus_client, stop, line, name):
82 """Initialize the sensor."""
87 self.
_unit_unit = UnitOfTime.MINUTES
92 """Return the name of the sensor."""
93 return self.
_name_name
97 """Return the unit of measurement."""
98 return self.
_unit_unit
102 """Return a unique, HASS-friendly identifier for this entity."""
103 return f
"{self._stop}_{self._line}"
107 """Return the next departure time."""
112 """Return the state attributes of the last update."""
114 ATTR_BUS_STOP: self.
_stop_stop,
115 ATTR_LINE: self.
_line_line,
118 @Throttle(MIN_TIME_BETWEEN_UPDATES)
120 """Get the next bus information."""
125 "Unable to fetch data from TMB API. Please check your API keys are"
def __init__(self, ibus_client, stop, line, name)
def native_unit_of_measurement(self)
def extra_state_attributes(self)
def add_entities(account, async_add_entities, tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)