Renten-Countdown

Moin, ich möchte so ein Countdown erstellen, gibt es so etwas?

LG aus Kiel

1 „Gefällt mir“

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 :grinning:

3 „Gefällt mir“

Wäre auch interessiert. noch ca 8 Monate :wink:

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"

:crayon:by HarryP: Zusammenführung Mehrfachpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

1 „Gefällt mir“

Hier mein grafischer Entwurf mit einer Markdown Karte.


Anstelle des Punkt Sliders habe ich als HA Icon die multiplen Herzen genommen.
Auf Millisekunden habe ich verzichtet weil HA sowieso nur Variablen jede Minute aktualisiert.
Die Woche setze ich noch die Logik hinzu.

2 „Gefällt mir“

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

2 „Gefällt mir“

Ok, hier kommt der Code der Markdownkarte.

  • Eingestellt auf 11.11.2025 um 11:11 Uhr
  • Für den echten Rentencountdown beginnend um 00:00 Uhr muß die Variable UhrzeitBeruecksichtigen auf false gesetzt werden
  • Die multiplen Herzen wandern unten mit sobald linker Wert 0 ist
  • Der Hintergrund ist der Hintergrund der Dashboardseite nicht der Markdownkarte. Dieser ist grau und über Card_mod auf 25 % Deckung eingestellt.
  • Kein Helfer etc. ist nötig, nur dieser Code. Kleinigkeiten können über Variablen im oberen Code Bereich angepaßt werden.
  • Codeversion 1.0 heißt es könnten noch kleinere Fehlerkorrekturen kommen (ich hab nichts gefunden aber Erfahrungen zeigen, es gibt immer etwas.)
  • Howto Copy/Paste: Neue Markdownkarte erstellen → Code-Editor anzeigen → vorhanden Text markieren → unteren Code 1:1 hineinkopieren → Variablen anpassen
Zusammenfassung
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 :slight_smile:

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) }}
3 „Gefällt mir“

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>

@ostseereiter

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

1 „Gefällt mir“