TRMNL: Dashboard Update
Sendet alle 15 Minuten aktuelle Dashboard-Daten (Energie, Solar, Wetter, YouTube, Webseiten, Kalender) an ein TRMNL E-Ink Display per Webhook. Vollständige Automation mit allen Variablen zum Anpassen.
Entitäten:rest_commandautomationsensorweathercalendarinput_number
Was brauchst du dafür?
Integrationen
- REST Command
Geräte
- Sensor
Helper
- Input Number Helper
TRMNL: Dashboard Update
# Entity-IDs sind anonymisiert. Ersetze sie durch deine eigenen.
# Beispiel: light.dein_wohnzimmer_licht -> light.wohnzimmer_deckenlampe
# TRMNL: Dashboard Update
# Sendet alle 15 Minuten aktuelle Dashboard-Daten an das TRMNL E-Ink Display.
# Passe die Entity-IDs an dein Setup an. Entferne Quadranten, die du nicht brauchst.
alias: "TRMNL: Dashboard Update"
description: >-
Sendet alle 15 Minuten aktuelle Dashboard-Daten (Energie, Solar, Wetter, YouTube, etc.)
an das TRMNL E-Ink Display via Webhook.
triggers:
- trigger: time_pattern
minutes: /15
alias: Alle 15 Minuten
conditions: []
actions:
- action: rest_command.trmnl_dashboard
alias: Dashboard-Daten an TRMNL senden
data:
# --- Smart Home ---
power_current: "{{ states('sensor.stromverbrauch') | round(0) }}"
solar_production: "{{ states('sensor.solar_produktion') | round(1) }}"
energy_today: "{{ states('sensor.solar_energie_heute') | round(1) }}"
grid_label: >-
{% if states('sensor.netz_leistung') | float > 0 %}Bezug{% else %}Einspeisung{% endif %}
grid_value: "{{ states('sensor.netz_leistung') | float | abs | round(0) }}"
energy_balance: "{{ (states('sensor.einspeisung_heute') | float - states('sensor.netzbezug_heute') | float) | abs | round(1) }}"
energy_balance_positive: "{{ (states('sensor.einspeisung_heute') | float - states('sensor.netzbezug_heute') | float) > 0 }}"
battery_level: "{{ states('sensor.batterie_ladezustand') | round(0) }}"
power_price: "{{ states('sensor.strompreis') | round(2) }}"
temp_indoor: "{{ states('sensor.temperatur_wohnzimmer') | round(1) }}"
temp_outdoor: "{{ states('sensor.temperatur_aussen') | round(1) }}"
# --- YouTube ---
aa_subs: "{{ states('sensor.youtube_kanal_1_abonnenten') }}"
aa_views: "{{ states('sensor.youtube_kanal_1_aufrufe') }}"
aa_videos: "{{ states('sensor.youtube_kanal_1_videos') }}"
kk_subs: "{{ states('sensor.youtube_kanal_2_abonnenten') }}"
kk_views: "{{ states('sensor.youtube_kanal_2_aufrufe') }}"
kk_videos: "{{ states('sensor.youtube_kanal_2_videos') }}"
# --- Webseiten ---
cf_pg_h: "{{ states('sensor.cloudflare_seite_1_heute') }}"
cf_pg_g: "{{ states('sensor.cloudflare_seite_1_gestern') }}"
cf_pg_m: "{{ states('sensor.cloudflare_seite_1_monat') }}"
cf_db_h: "{{ states('sensor.cloudflare_seite_2_heute') }}"
cf_db_g: "{{ states('sensor.cloudflare_seite_2_gestern') }}"
cf_db_m: "{{ states('sensor.cloudflare_seite_2_monat') }}"
cf_bs_h: "{{ states('sensor.cloudflare_seite_3_heute') }}"
cf_bs_g: "{{ states('sensor.cloudflare_seite_3_gestern') }}"
cf_bs_m: "{{ states('sensor.cloudflare_seite_3_monat') }}"
spark_pg: "{{ states('sensor.sparkline_seite_1') }}"
spark_db: "{{ states('sensor.sparkline_seite') }}"
spark_bs: "{{ states('sensor.sparkline_seite_3') }}"
# --- Wetter ---
weather_temp: "{{ state_attr('weather.zuhause', 'temperature') | round(0) }}"
weather_desc: "{{ states('weather.zuhause') }}"
weather_max: "{{ state_attr('weather.zuhause', 'forecast')[0].temperature | default(0) | round(0) }}"
weather_min: "{{ state_attr('weather.zuhause', 'forecast')[0].templow | default(0) | round(0) }}"
sunrise: "{{ as_timestamp(state_attr('sun.sun', 'next_rising')) | timestamp_custom('%H:%M') }}"
sunset: "{{ as_timestamp(state_attr('sun.sun', 'next_setting')) | timestamp_custom('%H:%M') }}"
# --- Kalender ---
next_event_time: >-
{% set e = state_attr('calendar.privat', 'start_time') %}
{% if e %}{{ as_timestamp(e) | timestamp_custom('%H:%M') }}{% else %}--:--{% endif %}
next_event: "{{ state_attr('calendar.privat', 'message') | default('Kein Termin') | truncate(30) }}"
# --- Persönlich ---
skate_km: "{{ states('input_number.skating_km_jahr') | round(0) }}"
skate_goal: "{{ states('input_number.skating_jahresziel') | round(0) }}"
skate_pct: "{{ ((states('input_number.skating_km_jahr') | float / states('input_number.skating_jahresziel') | float) * 100) | round(0) }}"
skate_remaining: "{{ (states('input_number.skating_jahresziel') | float - states('input_number.skating_km_jahr') | float) | round(0) }}"
skate_sessions: "{{ states('sensor.skating_einheiten_jahr') | default(0) }}"
next_birthday_date: "{{ states('sensor.naechster_geburtstag_datum') | default('') }}"
next_birthday: "{{ states('sensor.naechster_geburtstag_name') | default('') }}"
# --- Meta ---
greeting: >-
{% set h = now().hour %}
{% if h < 12 %}Guten Morgen{% elif h < 18 %}Guten Tag{% else %}Guten Abend{% endif %}
updated_at: "{{ now().strftime('%d.%m. %H:%M') }}"
mode: single
