I want to display 3 columns of data on display (eink via OpenEPaperLink integration). Data is time/route/direction of buses from 3 stops close to my place (data comes from GTFS2 integration).
Ugly way creates variable three times (dropped all not needed fields and sensor names):
actions:
- action: open_epaper_link.drawcustom
metadata: {}
data:
payload:
- type: multiline
value: >-
{% set stop1 =
state_attr('sensor.stop1',
'next_departures_lines') %}
{% set stop2 =
state_attr('sensor.stop2',
'next_departures_lines') %}
{% set stop3 =
state_attr('sensor.stop3',
'next_departures_lines') %}
{% for dep in (stop1 + stop2 + stop3)|sort(attribute="departure")
-%}
{{ "%s" % (dep.departure) }}|
{% endfor -%}
x: 0
- type: multiline
value: >-
{% set stop1 =
state_attr('sensor.stop1',
'next_departures_lines') %}
{% set stop2 =
state_attr('sensor.stop2',
'next_departures_lines') %}
{% set stop3 =
state_attr('sensor.stop3',
'next_departures_lines') %}
{% for dep in (stop1 + stop2 + stop3)|sort(attribute="departure")
-%}
{{ "%02s" % ( dep.route) }}|
{% endfor -%}
x: 100
- type: multiline
value: >-
{% set stop1 =
state_attr('sensor.stop1',
'next_departures_lines') %}
{% set stop2 =
state_attr('sensor.stop2',
'next_departures_lines') %}
{% set stop3 =
state_attr('sensor.stop3',
'next_departures_lines') %}
{% for dep in (stop1 + stop2 + stop3)|sort(attribute="departure")
-%}
{{ "%s" % (dep.headsign) }}|
{% endfor -%}
x: 160
So I decided to try to create a list of departures once:
actions:
- action: open_epaper_link.drawcustom
metadata: {}
data:
payload:
- type: multiline
value: |-
{% for dep in odjazdy -%}
{{ dep }}|
{% endfor -%}
x: 0
- type: multiline
value: |-
{% for dep in odjazdy %}
{{ "%02s" % ( dep.route) }}|
{% endfor -%}
x: 100
- type: multiline
value: |-
{% for dep in odjazdy %}
{{ dep.headsign }}|
{% endfor -%}
x: 160
variables:
odjazdy: |-
{% set stop1 =
state_attr('sensor.stop1',
'next_departures_lines') %}
{% set stop2 =
state_attr('sensor.stop2',
'next_departures_lines') %}
{% set stop3 =
state_attr('sensor.stop3',
'next_departures_lines') %}
{{ (stop1 + stop2 + stop3)|sort(attribute="departure") }}
“actions” part is now shorter, easier to read. “odjazdy” variable contains a list of departures:
[{'departure': '09:12', 'departure_datetime': datetime.datetime(2025, 2, 20, 8, 12, tzinfo=datetime.timezone.utc), 'departure_realtime': '-', 'departure_realtime_datetime': '-', 'delay_realtime_derived': '-', 'delay_realtime': '-', 'date': '2025-02-20', 'stop_name': 'Stop 12', 'route': '4', 'route_long': 'Here - There', 'headsign': 'There', 'trip_id': '436291_POW', 'direction_id': 0, 'icon': 'mdi:bus'},
{'departure': '09:12', 'departure_datetime': datetime.datetime(2025, 2, 20, 8, 12, tzinfo=datetime.timezone.utc), 'departure_realtime': '-', 'departure_realtime_datetime': '-', 'delay_realtime_derived': '-', 'delay_realtime': '-', 'date': '2025-02-20', 'stop_name': 'Stop 12', 'route': 'B', 'route_long': 'Somewhere - Otherwhere', 'headsign': 'Otherwhere', 'trip_id': '434102_POWS', 'direction_id': 0, 'icon': 'mdi:bus'},
{'departure': '09:15', 'departure_datetime': datetime.datetime(2025, 2, 20, 8, 15, tzinfo=datetime.timezone.utc), 'departure_realtime': '-', 'departure_realtime_datetime': '-', 'delay_realtime_derived': '-', 'delay_realtime': '-', 'date': '2025-02-20', 'stop_name': 'Stop 13', 'route': '3', 'route_long': 'There - Nowhere', 'headsign': 'Nowhere', 'trip_id': '375423_POW', 'direction_id': 1, 'icon': 'mdi:bus'}]
But in “actions” block it is treated as a string:
[|
{|
'|
d|
e|
p|
a|
r|
t|
u|
r|
e|
'|
:|
What is wrong? Where the mistake was made?