MVV Departure Display - OpenEPaperLink/Home_Assistant_Integration GitHub Wiki
MVV Departure Board Display
This automation creates a real-time departure board display for Munich public transport (MVV) using an E-Paper display. It updates every 5 minutes when you're at home, showing the next 5 departures from your configured station.
Prerequisites
- munich_public_transport integration installed
- Person entity configured in Home Assistant
- Home zone configured
Installation
- Install the munich_public_transport integration in your Home Assistant instance
- Configure your desired station in the integration
- Add the automation code to your Home Assistant configuration
Configuration
Required Customization
Before using this automation, you need to replace the following placeholders in the code:
<YOUR_PERSON_ENTITY>- Your Home Assistant person entity (e.g., person.john)<YOUR_STATION_SENSOR>- Your MVV station sensor ID (e.g., sensor.hauptbahnhof_all_departures)<YOUR_HOME_ZONE>- Your home zone entity ID (e.g., zone.home)
Automation Code
#
alias: MVV Departure Display
description: MVV departure board display
triggers:
# Trigger every 5 minutes to update departure times
- minutes: /5
trigger: time_pattern
conditions:
# Only run when person is at home
- condition: zone
entity_id: <YOUR_PERSON_ENTITY>
zone: <YOUR_HOME_ZONE>
actions:
data:
# Set white background
background: white
rotate: 0
payload:
# Station name header centered at top
- type: text
value: "{{ station_name }}"
x: 148
"y": 15
align: center
anchor: mm
size: 20
# Horizontal line separator under header
- type: line
x_start: 0
x_end: 296
y_start: 25
fill: black
width: 1
# Colored rectangles for line numbers (left column)
- type: rectangle_pattern
x_start: 5
y_start: 28
x_offset: 0
y_offset: 2
x_size: 35
y_size: 18
fill: accent
outline: accent
width: 1
x_repeat: 1
# Create one rectangle per departure
y_repeat: "{{ departures|length }}"
# Line numbers in white text on colored backgrounds
- type: multiline
delimiter: ;
x: 23
font: ppb.ttf
size: 20
start_y: 38
offset_y: 20
color: white
anchor: mm
value: |-
{% for departure in departures %}
{{- departure.line -}}
{%- if not loop.last %};{% endif -%}
{% endfor %}
# Destination names (middle column), truncated to 16 chars
- type: multiline
delimiter: ;
x: 45
font: ppb.ttf
size: 20
start_y: 38
offset_y: 20
color: black
value: |-
{% for departure in departures %}
{{- departure.destination[:16] -}}
{%- if not loop.last %};{% endif -%}
{% endfor %}
# Departure times (right column)
- type: multiline
delimiter: ;
x: 238
font: ppb.ttf
size: 20
start_y: 38
offset_y: 20
color: black
value: |-
{% for departure in departures %}
{{- departure.realtime_departure }}
{%- if not loop.last %};{% endif -%}
{% endfor %}
# Send to OpenEPaperLink display
action: open_epaper_link.drawcustom
variables:
# Extract departure data from MVV sensor
departures: "{{ state_attr('<YOUR_STATION_SENSOR>', 'departures') }}"
# Clean up station name for display
station_name: >-
{{ state_attr('<YOUR_STATION_SENSOR>',
'friendly_name').replace(' All Departures', '') }}
# Prevent multiple instances running simultaneously
mode: single