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)- plus all information from the first non-canceled connection, except its list of
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 stationdeparture
: timestamp of planned departuredelay
: timedelta of departure delaydestination
: name of destination stationarrival
: timestamp of planned arrivaldelay_arrival
: timedelta of arrival delaytransfers
: number of legs minus oneduration
: timedelta from departure to arrivalcanceled
: Boolean,true
if any leg is canceled elsefalse
ontime
: Boolean,true
if zero departure delay elsefalse
products
: comma-separated list of line nameslegs
: list of legs with more detailed information
Each 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 stationarrival
: timestamp of planned arrivalplatform_arrival
: arrival platformdelay_arrival
: timedelta of arrival delaymode
: transport mode such astrain
name
: name of transport line such asRE123
canceled
: Boolean, if this leg is canceleddistance
: walking distance if any (only walking legs)remarks
: list of stringsstopovers
: list of station names
Generate 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 }}