akloeckner / hacs-hafas

Port of kilimnik's HAFAS client for HACS
5 stars 2 forks source link
custom-component hacs hacs-integration hafas home-assistant transport

HAFAS (HaCon Fahrplan-Auskunfts-System)

validate with hassfest validate with HACS action GitHub commits since latest release Number of installations

Open this repository inside the Home Assistant Community Store. Show this integration in your Home Assistant.

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.

Sensor data

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:

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:

Each connection can consist of multiple legs (different trains with transfers in between). A leg contains the following data:

Usage examples of attribute data in templates

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 }}