Moin, ich möchte so ein Countdown erstellen, gibt es so etwas?
LG aus Kiel
Der tiefe Wunsch in uns allen präzise auf den Punkt gebracht, da können Sie noch soviel von der Notwendigkeit des längeren Arbeitens reden…
Wenn sich keiner findet, der irgendeine Hacs Karte kennt, baue ich Dir das als Markdownkarte mit Tabellenstruktur, die einen Timer herunterzählt. Unten der Slider wird eine Herausforderung und auch der transparente Hintergrund. Mit ein wenig Kompromissen am Layout ist es möglich.
PS. Ich muß noch 12 Jahre. So lange lohnt sich kein Timer auf dem jetzigen HA Setup
Wäre auch interessiert. noch ca 8 Monate
Hilft das…?
Template:
- sensor:
- name: "Rente Peter Countdown"
state: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days }}
{% else %}
0
{% endif %}
attributes:
years: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 365) }}
{% else %}
0
{% endif %}
months: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 30) % 12 }}
{% else %}
0
{% endif %}
days: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days % 30 }}
{% else %}
0
{% endif %}
hours: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds // 3600 }}
{% else %}
0
{% endif %}
minutes: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).seconds // 60) % 60 }}
{% else %}
0
{% endif %}
seconds: >
{% set target_date = as_datetime("2026-04-12 00:00:00") %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds % 60 }}
{% else %}
0
{% endif %}
type: custom:mushroom-template-card
primary: >
{{ states('sensor.rente_peter_countdown') }} dagen tot pensioen!
secondary: >
{{ state_attr('sensor.rente_peter_countdown', 'years') }} jaar,
{{ state_attr('sensor.rente_peter_countdown', 'months') }} maanden,
{{ state_attr('sensor.rente_peter_countdown', 'days') }} dagen,
{{ state_attr('sensor.rente_peter_countdown', 'hours') }} uur,
{{ state_attr('sensor.rente_peter_countdown', 'minutes') }} minuten,
{{ state_attr('sensor.rente_peter_countdown', 'seconds') }} seconden.
icon: mdi:calendar
background: url('/local/background.jpg')
Entschuldigung, falsche Vorlage…
Template:
- sensor:
- name: "Pensioen Henk Countdown"
state: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days }}
{% else %}
0
{% endif %}
attributes:
years: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 365) }}
{% else %}
0
{% endif %}
months: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 30) % 12 }}
{% else %}
0
{% endif %}
days: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days % 30 }}
{% else %}
0
{% endif %}
hours: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds // 3600 }}
{% else %}
0
{% endif %}
minutes: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).seconds // 60) % 60 }}
{% else %}
0
{% endif %}
seconds: >
{% set target_date = as_datetime("2026-04-12 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds % 60 }}
{% else %}
0
{% endif %}
type: custom:mushroom-template-card
primary: |
{{ states('sensor.pensioen_henk_countdown') }} dagen tot pensioen!
secondary: >
{{ state_attr('sensor.pensioen_henk_countdown', 'years') }} jaar, {{
state_attr('sensor.pensioen_henk_countdown', 'months') }} maanden, {{
state_attr('sensor.pensioen_henk_countdown', 'days') }} dagen, {{
state_attr('sensor.pensioen_henk_countdown', 'hours') }} uur, {{
state_attr('sensor.pensioen_henk_countdown', 'minutes') }} minuten, {{
state_attr('sensor.pensioen_henk_countdown', 'seconds') }} seconden.
icon: mdi:calendar
background: url('/local/background.jpg')
Und die Benachrichtigungen auf Ihrem Telefon …
- id: 'pensioen_henk_1_mnd'
alias: "Pensioen Henk - 1 maand over"
description: "Stuur een notificatie 1 maand voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 30 }}"
actions:
- action: notify.henk
data:
message: "Nog maar 1 maand tot je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_7'
alias: "Pensioen Henk - 7 dagen over"
description: "Stuur een notificatie 7 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 7 }}"
actions:
- action: notify.henk
data:
message: "Nog 7 dagen tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_6'
alias: "Pensioen Henk - 6 dagen over"
description: "Stuur een notificatie 6 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 6 }}"
actions:
- action: notify.henk
data:
message: "Nog 6 dagen tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_5'
alias: "Pensioen Henk - 5 dagen over"
description: "Stuur een notificatie 5 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 5 }}"
actions:
- action: notify.henk
data:
message: "Nog 5 dagen tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_4'
alias: "Pensioen Henk - 4 dagen over"
description: "Stuur een notificatie 4 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 4 }}"
actions:
- action: notify.henk
data:
message: "Nog 4 dagen tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_3'
alias: "Pensioen Henk - 3 dagen over"
description: "Stuur een notificatie 3 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 3 }}"
actions:
- action: notify.henk
data:
message: "Nog 3 dagen tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_2'
alias: "Pensioen Henk - 2 dagen over"
description: "Stuur een notificatie 2 dagen voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 2 }}"
actions:
- action: notify.henk
data:
message: "Let op: nog maar 1 dag tot aan je pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk_1'
alias: "Pensioen Henk - 1 dag over"
description: "Stuur een notificatie 1 dag voor pensioen."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 1 }}"
actions:
- action: notify.henk
data:
message: "Let op: Morgen met pensioen!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'pensioen_henk'
alias: "Pensioen Henk - Op de dag zelf"
description: "Stuur een notificatie op de pensioen-dag."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.pensioen_henk_countdown') | int == 0 }}"
actions:
- action: notify.henk
data:
message: "Eindelijk, je hebt je pensioen gehaald. En nu eindelijk genieten!"
data:
ttl: 0
priority: high
clickAction: "noAction"
by HarryP: Zusammenführung Mehrfachpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)
Hier mein grafischer Entwurf mit einer Markdown Karte.
Da fehlt noch der Merz-Faktor, mit dem du in einem halben Jahr, wenn das Gesetz durch ist, plus 5 Jahre drauf schlagen musst.
/IronieOff
Ok, hier kommt der Code der Markdownkarte.
type: markdown
content: >-
{# --- Eingabe des zukünftigen Zeitpunktes und des Titels--- #}
{% set Namen = 'Rente Peter' %}
{% set TargetDate_str = '11.11.2025 11:11' %}
{#
- Ein reiner Rentencountdown benötigt keine Uhrzeit, es beginnt 00:00 Uhr des
Tages
- Dennoch habe ich untere Berechnung mit Uhrzeit. Damit ist es ein
vollwertiger Countdown für mehr als nur ein Rentencountdown geeignet.
- 'false' ignoriert die Uhrzeit und setzt 00:00 = Rentencountdown
#}
{% set UhrzeitBeruecksichtigen = true %}
{# --- Layout Parameter --- #}
{% set fontsize_zahlen=6 %}
{% set fontsize_worte=4 %}
{% set fontsize_slider=5 %}
{% set spaltenbreite=100 %}
{% set IconCode_active = '<ha-icon icon="mdi:heart-multiple"></ha-icon>' %}
{# --- Datums / Uhrzeit anpassen --- #}
{% set current_time = now() %}
{% if UhrzeitBeruecksichtigen %}
{% set TargetDate = strptime(TargetDate_str, '%d.%m.%Y %H:%M').replace(tzinfo=current_time.tzinfo) %}
{% else %}
{% set TargetDate = strptime(TargetDate_str.split(' ')[0] ~ ' 00:00', '%d.%m.%Y %H:%M').replace(tzinfo=current_time.tzinfo) %}
{% endif %}
{# --- Hilfe für Darstellung Zieldatum --- #}
{# Wandelt englische Monate/Tage in dt #}
{% set wochentag = {
'Monday': 'Montag', 'Tuesday': 'Dienstag', 'Wednesday': 'Mittwoch',
'Thursday': 'Donnerstag', 'Friday': 'Freitag', 'Saturday': 'Samstag', 'Sunday': 'Sonntag'
}[TargetDate.strftime('%A')] %}
{% set monat = {
'January': 'Januar', 'February': 'Februar', 'March': 'März', 'April': 'April',
'May': 'Mai', 'June': 'Juni', 'July': 'Juli', 'August': 'August',
'September': 'September', 'October': 'Oktober', 'November': 'November', 'December': 'Dezember'
}[TargetDate.strftime('%B')] %}
{% set TargetDate_title = wochentag ~ ', ' ~ TargetDate.day ~ '. ' ~ monat ~ '
' ~ TargetDate.year %}
{# --- Berechnung der verbleibenden Zeit --- #}
{% set TimeDiff = TargetDate - current_time %}
{% set total_minutes = TimeDiff.total_seconds() // 60 %}
{% set years = (total_minutes // 525600) | int %}
{% set remaining_min = total_minutes % 525600 %}
{% set months = (remaining_min // 43800) | int %}
{% set remaining_min = remaining_min % 43800 %}
{% set days = (remaining_min // 1440) | int %}
{% set remaining_min = remaining_min % 1440 %}
{% set hours = (remaining_min // 60) | int %}
{% set minutes = (remaining_min % 60) | int %}
{# --- Positionsberechnung --- #}
{% if years > 0 %}
{% set position_slider = 1 %}
{% elif months > 0 %}
{% set position_slider = 2 %}
{% elif days > 0 %}
{% set position_slider = 3 %}
{% elif hours > 0 %}
{% set position_slider = 4 %}
{% else %}
{% set position_slider = 5 %}
{% endif %}
{# --- Darstellung --- #}
<font size=6>{{Namen}}</font>
<font size=4>{{TargetDate_title}}</font>
<table border=0 padding top=0px>
<tr>
<td width={{spaltenbreite}}><center><font
size={{fontsize_zahlen}}>{{years}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_zahlen}}>{{months}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_zahlen}}>{{days}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_zahlen}}>{{hours}}</font></center></td>
<td width={{spaltenbreite}}><center></font><font
size={{fontsize_zahlen}}>{{minutes}}</font></center></td>
</tr>
<tr>
<td width={{spaltenbreite}}><center><font
size={{fontsize_worte}}>Jahre</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_worte}}>Monate</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_worte}}>Tage</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_worte}}>Stunden</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_worte}}>Minuten</font></center></td>
</tr>
<tr>
<td width={{spaltenbreite}}><center><font
size={{fontsize_slider}}>{{IconCode_active if position_slider == 1 else
''}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_slider}}>{{IconCode_active if position_slider == 2 else
''}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_slider}}>{{IconCode_active if position_slider == 3 else
''}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_slider}}>{{IconCode_active if position_slider == 4 else
''}}</font></center></td>
<td width={{spaltenbreite}}><center><font
size={{fontsize_slider}}>{{IconCode_active if position_slider == 5 else
''}}</font></center></td>
</tr>
</table>
card_mod:
style: |
ha-card {
background: rgba(50, 50, 50, 0.25); /* 0,25=25% Deckung */
color: white;
box-shadow: none;
}
Viel Spaß!
@Henk Dein Ansatz hat mir auch gefallen. Einen Rentensensor anlegen mit den Zeitangaben als Attribute und die mushroom-template-card mag ich auch. Was mir weniger gefiel war, daß das Zieldatum an mehreren Stellen eingegeben werden muß sowie ein extra Sensor. Ich mag lieber zentrale variablen Definition und Logik arbeitet mit diesen. Am Ende ist es Geschmackssache und Dein Code führt auch zum Countdown.
EDIT1:
Version 1.1: Bugfix Zieldatum wenn {% set UhrzeitBeruecksichtigen = false %} gestellt war
Ich verweise auch auf die Diskussion unten zur Zeit Differenz Berechnung. Excel berechnet kalendergenau, obige Logik schätz aufgrund der Zeitdifferenz in Minuten.
Ich habe es auch probiert aber irgendwas habe ich falsch gemacht.
type: custom:mushroom-template-card
primary: |
{{ states('sensor.r_henk_countdown') }} dagen tot pensioen!
secondary: >
{{ state_attr('sensor.rente_andreas_countdown', 'years') }} jaar, {{
state_attr('sensor.rente_andreas_countdown', 'months') }} maanden, {{
state_attr('sensor.rente_andreas_countdown', 'days') }} dagen, {{
state_attr('sensor.rente_andreas_countdown', 'hours') }} uur, {{
state_attr('sensor.rente_andreas_countdown', 'minutes') }} minuten, {{
state_attr('sensor.rente_andreas_countdown', 'seconds') }} seconden.
icon: mdi:calendar
background: url('/local/background.jpg')
Template:
- sensor:
- name: "Rente Andreas Countdown"
state: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days }}
{% else %}
0
{% endif %}
attributes:
years: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 365) }}
{% else %}
0
{% endif %}
months: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 30) % 12 }}
{% else %}
0
{% endif %}
days: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days % 30 }}
{% else %}
0
{% endif %}
hours: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds // 3600 }}
{% else %}
0
{% endif %}
minutes: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).seconds // 60) % 60 }}
{% else %}
0
{% endif %}
seconds: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds % 60 }}
{% else %}
dieses habe ich als Ausgabe.
‘sensor.r_henk_countdown’ = ‘sensor.rente_andreas_countdown’
Habe geändert aber immer noch die gleiche Fehlermeldung.
type: custom:mushroom-template-card
primary: |
{{ states('sensor.rente_andreas_countdown') }} dagen tot pensioen!
secondary: >
{{ state_attr('sensor.rente_andreas_countdown', 'years') }} jaar, {{
state_attr('sensor.rente_andreas_countdown', 'months') }} maanden, {{
state_attr('sensor.rente_andreas_countdown', 'days') }} dagen, {{
state_attr('sensor.rente_andreas_countdown', 'hours') }} uur, {{
state_attr('sensor.rente_andreas_countdown', 'minutes') }} minuten, {{
state_attr('sensor.rente_andreas_countdown', 'seconds') }} seconden.
icon: mdi:calendar
background: url('/local/background.jpg')
vielleict sind die Sensoren noch nicht angelegt.
Das kannst du doch selber nachschauen, z. B. in den Entwicklerwerkzeugen - Zustände oder unter Geräte und Dienste.
Ich vermute der Sensor hat die falsche entity_id behalten.
Vielleicht mal HA neu starten.
Habe alles HA gestartet aber keine sensoren gefunden und beim Neustart von Yaml wird dieses angezeigt:
Konfigurationswarnungen
Integration error: Template - Integration 'Template' not found.
Schreib mal Template klein.
Ansonsten poste mal deine configuration.yaml.
Alles geprüft und getestet. Bei mir funktioniert alles.
Muss nur noch ein bisschen Text ins Deutsche übersetzen.
/homeassistant/template/rente.yaml
- sensor:
- name: "rente andreas Countdown"
state: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days }}
{% else %}
0
{% endif %}
attributes:
years: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 365) }}
{% else %}
0
{% endif %}
months: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 30) % 12 }}
{% else %}
0
{% endif %}
days: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days % 30 }}
{% else %}
0
{% endif %}
hours: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds // 3600 }}
{% else %}
0
{% endif %}
minutes: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).seconds // 60) % 60 }}
{% else %}
0
{% endif %}
seconds: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds % 60 }}
{% else %}
0
{% endif %}
/homeassistant/automations/rente.yaml
- id: 'rente_andreas_1_mnd'
alias: "rente andreas - 1 maand over"
description: "Stuur een notificatie 1 maand voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 30 }}"
actions:
- action: notify.andreas
data:
message: "Nog maar 1 maand tot je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_7'
alias: "rente andreas - 7 dagen over"
description: "Stuur een notificatie 7 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 7 }}"
actions:
- action: notify.andreas
data:
message: "Nog 7 dagen tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_6'
alias: "rente andreas - 6 dagen over"
description: "Stuur een notificatie 6 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 6 }}"
actions:
- action: notify.andreas
data:
message: "Nog 6 dagen tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_5'
alias: "rente andreas - 5 dagen over"
description: "Stuur een notificatie 5 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 5 }}"
actions:
- action: notify.andreas
data:
message: "Nog 5 dagen tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_4'
alias: "rente andreas - 4 dagen over"
description: "Stuur een notificatie 4 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 4 }}"
actions:
- action: notify.andreas
data:
message: "Nog 4 dagen tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_3'
alias: "rente andreas - 3 dagen over"
description: "Stuur een notificatie 3 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 3 }}"
actions:
- action: notify.andreas
data:
message: "Nog 3 dagen tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_2'
alias: "rente andreas - 2 dagen over"
description: "Stuur een notificatie 2 dagen voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 2 }}"
actions:
- action: notify.andreas
data:
message: "Let op: nog maar 1 dag tot aan je rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas_1'
alias: "rente andreas - 1 dag over"
description: "Stuur een notificatie 1 dag voor rente."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 1 }}"
actions:
- action: notify.andreas
data:
message: "Let op: Morgen met rente!"
data:
ttl: 0
priority: high
clickAction: "noAction"
- id: 'rente_andreas'
alias: "rente andreas - Op de dag zelf"
description: "Stuur een notificatie op de rente-dag."
triggers:
- trigger: time
at: "08:00:00"
conditions:
- condition: template
value_template: "{{ states('sensor.rente_andreas_countdown') | int == 0 }}"
actions:
- action: notify.andreas
data:
message: "Eindelijk, je hebt je rente gehaald. En nu eindelijk genieten!"
data:
ttl: 0
priority: high
clickAction: "noAction"
type: vertical-stack
cards:
- type: markdown
content: |
### rente andreas Countdown
- type: custom:mushroom-template-card
primary: |
{{ states('sensor.rente_andreas_countdown') }} dagen tot rente!
secondary: >
{{ state_attr('sensor.rente_andreas_countdown', 'years') }} jaar, {{
state_attr('sensor.rente_andreas_countdown', 'months') }} maanden, {{
state_attr('sensor.rente_andreas_countdown', 'days') }} dagen, {{
state_attr('sensor.rente_andreas_countdown', 'hours') }} uur, {{
state_attr('sensor.rente_andreas_countdown', 'minutes') }} minuten, {{
state_attr('sensor.rente_andreas_countdown', 'seconds') }} seconden.
icon: mdi:calendar
@Bacardi
Es gibt einen Unterschied zwischen dem Ergebnis und der Realität. Wenn ich auf ein bestimmtes Datum (12.04.2026 00:00 Uhr) rechne, liegen vier Tage dazwischen. Oder sehe ich das falsch?
Eine interessante Feststellung!
Ich hab mal in Excel nachgestellt, probiert und verglichen.
Excel berechnet kalendergenau.
Der Template Code ermittelt die Zeitdifferenz zwischen now() und dem Zieldatum. Diese Differenz wird in Minuten umgerechnet. Diese werden dann in Jahre, Monate, Tage etc. konvertiert aufgrund von Durchschnittswerten, z.B. hat ein Monat 30,42 Tage. Und das ergibt den Unterschied zwischen der Excel und Template und führt so zu kleineren Abweichungen. Was ist für einen Renten Countdown besser? Hm. Ich werde mal mit Abstand nochmal in mich gehen, heute auf jeden Fall nicht mehr
PS1: Wie kommst Du auf 4 Tage Unterschied?
PS2: Ich hab durch diese Nachkontrolle tatsächlich einen Bug noch gefunden wenn man {% set UhrzeitBeruecksichtigen = false %} auf false setzt. Da hatte ich noch mein festes Testdatum anstelle der Variablen, ändere ich oben gleich ab. Danke
in Yaml habe ich nur dies
Template:
- sensor:
- name: "Rente Andreas Countdown"
state: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days }}
{% else %}
0
{% endif %}
attributes:
years: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 365) }}
{% else %}
0
{% endif %}
months: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).days // 30) % 12 }}
{% else %}
0
{% endif %}
days: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).days % 30 }}
{% else %}
0
{% endif %}
hours: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds // 3600 }}
{% else %}
0
{% endif %}
minutes: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ ((target_date - now).seconds // 60) % 60 }}
{% else %}
0
{% endif %}
seconds: >
{% set target_date = as_datetime("2026-03-01 00:00:00") | as_local %}
{% set now = now() %}
{% if now < target_date %}
{{ (target_date - now).seconds % 60 }}
{% else %}
siehe Fotos
Ich habe einen anderen Ansatz gewählt der dazu noch kürzer ist.
type: markdown
content: |-
{% set rentday = "2035-06-11" -%}
{{ time_until(as_datetime(rentday),5) }}
Das ist ein guter Test.
Datum: 12.04.2026
Ergebnis @Henk : 0 Jahre, 10 Monate, 12 Tage, 14 Stunden
Ergebnis @Bacardi : 0 Jahre, 10 Monate, 8 Tage, 10 Stunden
Ergebnis @Thobi : 0 Jahre, 10 Monate, 12 Tage, 14 Stunden
Wer hat jetzt recht?
Siehe auch meinen Test-Countdown
type: markdown
content: >
{# --- Invoer van de toekomstige datum en titel --- #}
{% set Namen = 'Test Countdown' %}
{% set TargetDate_str = '12.04.2026 00:00' %}
{# Hiermee wordt een volledige countdown weergegeven, inclusief datum en tijd.
#}
{% set TijdRekeningHouden = true %}
{# --- Datum / tijd aanpassen --- #}
{% set huidige_tijd = now() %} {% if TijdRekeningHouden %}
{% set TargetDate = strptime(TargetDate_str, '%d.%m.%Y %H:%M').replace(tzinfo=huidige_tijd.tzinfo) %}
{% else %}
{% set TargetDate_str = TargetDate_str.split(' ')[0] ~ ' 00:00' %}
{% set TargetDate = strptime(TargetDate_str, '%d.%m.%Y %H:%M').replace(tzinfo=huidige_tijd.tzinfo) %}
{% endif %}
{# --- Berekening van de resterende tijd --- #}
{% set TijdVerschil = TargetDate - huidige_tijd %} {% set totale_seconden =
TijdVerschil.total_seconds() %} {% set totale_minuten = totale_seconden // 60
%} {% set totale_dagen = totale_minuten // 1440 %} {% set jaren =
(totale_dagen // 365) | int %} {% set resterende_dagen_na_jaren = totale_dagen
% 365 %} {% set maanden = (resterende_dagen_na_jaren // 30) | int %} {% set
resterende_dagen = resterende_dagen_na_jaren % 30 %} {% set
resterende_min_na_dagen = totale_minuten % 1440 %} {% set uren =
(resterende_min_na_dagen // 60) | int %} {% set minuten =
(resterende_min_na_dagen % 60) | int %}
{# --- Weergave --- #}
<font size=6>{{Namen}}</font>
<table border=0> <tr>
<td>Huidige tijd:</td>
<td>{{ huidige_tijd }}</td>
</tr> <tr>
<td>Doel tijd:</td>
<td>{{ TargetDate }}</td>
</tr> <tr>
<td>Resterende tijd (seconden):</td>
<td>{{ totale_seconden }}</td>
</tr> <tr>
<td>Resterende tijd (jaren:maanden:dagen:uren:minuten):</td>
<td>{{ jaren }} jaren, {{ maanden }} maanden, {{ resterende_dagen }} dagen, {{ uren }} uren, {{ minuten }} minuten</td>
</tr> </table>
Schreib mal Template klein. (template)
Du hast keine weiteren template referenzen in deiner Konfigurationsdatei?
Falls ja, lösche diese template.
Neustart?
Kannst du den Sensor dann finden?
Oder versuchen Sie den Ansatz von thobi