A custom component for Home Assistant providing a client for the HAFAS API. It can be used to retrieve connection data for a number of public transport companies in Europe, most notably Deutsche Bahn.
Credit goes to @kilimnik and pyhafas.
Once configured, this integration provides a sensor to show the next connections between two stations.
The state
of the sensor is the timestamp
of the next non-cancelled departure including delay. This allows to use the state
programmatically, e.g., to compute a timedelta
from it. Also, the sensor will be shown natively in Lovelace as a relative time, such as "in 5 minutes".
The attributes
will contain the following additional data:
connections
: a list of all connections retrieved (see below)legs
Note: The connections
attribute is not recorded in history, because it contains a lot of data.
And we don't want to bloat your home assistant database.
Each entry in the connections
list contains the following data:
origin
: name of origin station departure
: timestamp of planned departure delay
: timedelta of departure delay destination
: name of destination station arrival
: timestamp of planned arrival delay_arrival
: timedelta of arrival delay transfers
: number of legs minus oneduration
: timedelta from departure to arrivalcanceled
: Boolean, true
if any leg is canceled else false
ontime
: Boolean, true
if zero departure delay else false
products
: comma-separated list of line nameslegs
: list of legs with more detailed informationEach connection can consist of multiple legs (different trains with transfers in between). A leg contains the following data:
origin
: name of origin stationdeparture
: timestamp of planned departureplatform
: departure platformdelay
: timedelta of departure delaydestination
: name of destination station arrival
: timestamp of planned arrival platform_arrival
: arrival platform delay_arrival
: timedelta of arrival delaymode
: transport mode such as train
name
: name of transport line such as RE123
canceled
: Boolean, if this leg is canceleddistance
: walking distance if any (only walking legs)remarks
: list of stringsstopovers
: list of station namesGenerate an output as in the old db
integration, e.g., 11:11 + 11
:
{%- set departure = state_attr('sensor.koln_hbf_to_frankfurt_main_hbf', 'departure') | as_local %}
{%- set delay = state_attr('sensor.koln_hbf_to_frankfurt_main_hbf', 'delay') | as_timedelta %}
{{- departure.strftime('%H:%M') }}
{%- if delay -%}
{{- ' + ' ~ (delay.total_seconds() // 60) | int -}}
{%- endif -%}
Only retrieve the planned departure timestamps of all non-canceled connections:
{{ state_attr('sensor.koln_hbf_to_frankfurt_main_hbf', 'connections')
| rejectattr('canceled')
| map(attribute='departure')
| list }}