Wasserfilterwechsel anzeigen im Dashboard

Hallo zusammen.

ich würde gerne eine Erinnerungsfunktion haben auf meinem Dashboard, die mir sagt wann mein Wasserfilter zuletzt gewechselt wurde und bis wann spätestens der nächste Filterwechsel erledigt sein sollte.

Es gibt quasi 1 Event: Filterwechsel.
Dann möchte ich auf einen Button drücken, und dieser Button soll dann das aktuelle Datum in einem Helfer “letzter Filterwechsel” speichern. Das funktioniert soweit auch.

Nur, wie kann ich damit nun Berechnungen durchführen in diesen Templates? Oder würde man besser eine zweite Variable “nächster Filterwechsel” (= letzter Filterwechsel + 90 Tage) machen? – Oder immer alles dynamisch rechnen?

Die Offsets (“nächster Wechsel in xyz Tagen”, “letzter Wechsel liegt abc Tage zurück”, die müssten ja sowieso ständig neu gerechnet werden.

grafik

Frage 1: Wie gehe ich hier am besten vor, um mit Datum und Offsets zu rechnen?
Frage 2: Ist es möglich, das Datumsfeld nur anzuzeigen, aber nicht editierbar zu machen? Es soll sich ausschließlich durch Drücken auf den Knopf aktualisieren.

Danke und viele Grüße,
Marcus

Hier geht es zwar um Blumen Gießen, aber grundsätzlich gleiche Aufgabenstellung.

Gruß
Osorkon

1 „Gefällt mir“

Das ist ja super schön, was du da gemacht hast. Chapeau!

Ich schaue mir das mal an.
Mein Skript hatte bisher das Datum des letzten Filterwechsels gesetzt, aber es macht wohl mehr Sinn, im Helfer den nächsten Wechsel zu speichern. Das funktioniert schon mal mit deinem Input!

Danke dir!

EDIT:
Nochmal eine Frage zur Formatierung:
Ich habe das nun so gelöst, dass mein Markdown mir die relative Zeit anzeigt. Aber die wird Englisch formatiert, was wohl technisch begründet ist.

Wie bekomme ich diese Zeit lokalisiert? - Ich finde viele Beiträge im Internet, aber bei allen Versuchen zeigt das Template nichts mehr an, ich habe irgendwo Probleme mit der Syntax.

Der Wasserfilter soll spätestens nach 91 Tagen gewechselt werden. 
Der letzte Filterwechsel liegt {{ relative_time(states.input_datetime.water_filter_next_replacement_date.last_changed) }} zurück.
1 „Gefällt mir“

Das ist ein mühseliges Geschäft mit diesen Templates. :slight_smile:

Ich habe es nun so gebaut:

  • nur noch ein Helfer für das zukünftige Datum.
  • Im Markdown formatiere ich mit as_timpstamp() | timestamp_custom(“%d. %B”), damit er mir das nur mit “15. November” anzeigt.
  • der rote Text ist ausgeblendet, bis ich den fälligen Filterwechseltermin verpasst habe.
  • Die Entität habe ich mit type: simple-entity auf read-only gesetzt, damit es hübscher ausschaut.
  • Der Button startet ein Skript, und setzt darin den Helfer auf das aktuelle Datum

grafik

.
Was nun noch nicht funktioniert sind 2-3 Sachen:

  1. Der Vergleich meines Helfers mit dem aktuellen Datum. Hier ist zum Testen ein Datum fest einzementiert, weil local() an der Stelle nicht funktioniert.
  2. Wenn der Filterwechsel überschritten ist, dann soll er mir die Differenz (in Tagen seit dem letzten Filterwechsel anzeigen. (gelb markiert). Das ist aber Englisch und sollte lokalisiert sein.
  3. Gibt es noch eine Möglichkeit, all das in eine einzige Kachel rein zu bekommen? – Aktuell sind es ja drei Stück, aber es ist ein zusammenhängendes Thema.

Hier mein aktueller Template-Code:

{% if (as_timestamp(states('input_datetime.water_filter_next_replacement_date')) <  as_timestamp("2024-11-16") ) -%}
  <font color='red'><ha-icon icon="mdi:alert-circle-outline"></ha-icon> Der Filterwechsel liegt {{ relative_time(states.input_datetime.water_filter_next_replacement_date.last_changed) }} zurück und muss **dringend** durchgeführt werden.
  
{%- endif %}

Sowas zum Beispiel

{% set jetzt = as_timestamp(now()) %}
{% set fällig = as_timestamp(states('input_datetime.water_filter_next_replacement_date')) %}
{% set fälligkeit = ((fällig - jetzt) / (24*60*60)) | int(0) %}
{% if fälligkeit < 0 %}
  <font color='red'><ha-icon icon="mdi:alert-circle-outline"></ha-icon> Der Filterwechsel liegt {{ fälligkeit | abs }} Tage zurück und muss **dringend** durchgeführt werden.
{% elif fälligkeit == 0 %}
  <font color='orange'> Der Filterwechsel ist heute fällig
{% elif fälligkeit > 0 %}
  <font color='green'> Der Filterwechsel ist erst in {{ fälligkeit | abs }} fällig
{% endif %}

Du kannst einen Vertikal Stapel nehmen und die Karten da rein packen, oder hast Du diesen schon in verwendung?

Gruß
Osorkon

Tausend Dank, sehr schön gelöst. Ich muss mich da noch mehr mit beschäftigen!

Ja genau, ich habe bereits einen vertikalen Stapel. Ich teste nun mal mit der “Stack in Card” Erweiterung aus HACS.