Templet Helfer zwei Werte vergleichen

Ich versuche mit einem Templet Helfer zwei Werte zu vergleichen.

Das ist aktuell mein Code:

{% if now().day, now().month, now().year == states.sensor.ical_adler_gameday_event_0.attributes.start.day, states.sensor.ical_adler_gameday_event_0.attributes.start.month, states.sensor.ical_adler_gameday_event_0.attributes.start.year %}
 on
{% else %}
 off
{% endif %}

Inhaltlich steht im ersten Teil:
(25, 8, 2024)
Und im zweiten Teil:
(30, 8, 2024)

Also sind die zwei Werte ja nicht =
Aber trotzdem bekomme ich mit meinem Code die ausgabe on.

Was mache ich hier denn falsch?

Mal abgesehen davon, dass Du das ganze sehr kompliziert machst, da wäre interessant zu wissen welchen Wert der Sensor sensor.ical_adler_gameday_event_0 liefert.

In Deinem Template fehlen Klammern.

{% if (now().day, now().month, now().year) == (states.sensor.ical_adler_gameday_event_0.attributes.start.day, states.sensor.ical_adler_gameday_event_0.attributes.start.month, states.sensor.ical_adler_gameday_event_0.attributes.start.year) %}
 on
{% else %}
 off
{% endif %}

Gruß
Osorkon

Vielen dank für deine Antwort. Die Klammern hab ich tatsächlich nicht dran gedacht.

Ja das mag sein, dass es sehr kompliziert ist, das ist aber das erste was mir für diesen Zweck eingefallen ist :smile:

Der Sensor hat folgendes:

Zustand: EV Zug vs. Adler Mannheim - 30 August 2024 19:30
summary: EV Zug vs. Adler Mannheim
description: null
location: ""
start: "2024-08-30T19:30:00+02:00"
end: "2024-08-30T19:30:00+02:00"
eta: 6
all_day: false
icon: mdi:calendar
friendly_name: EV Zug vs. Adler Mannheim

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Wenn Du nur das Datum vergleichen willst, wäre das mal eine kürzere Version:

{{ iif((now() | string).split(" ")[0] == (states.sensor.ical_adler_gameday_event_0.attributes.start | string).split("T")[0], "on", "off") }}

Gruß
Osorkon

Ok vielen Dank für den viel kürzeren Code.

Könntest du mir da noch etwas den Code erklären?

Ich muss zugeben von dem Code verstehe ich nicht wirklich viel.

Dann noch eine Frage, wenn ich einen solchen Helfer habe, wann wird der denn dann immer aktualisiert?

Fangen wir mal mit IMMEDIATE IF (IIF)
Ist eine kurze Form von if/else
Dis Syntax lautet:

iif(condition, if_true, if_false, if_none)

Zum Template selbst:

  1. now() hint das aktuelle Datum und Urzeit zurück
  2. Das ganze wird als string formatiert
  3. Dann an der Stelle wo ein Leerzeichen sitzt aufgetrennt.
  4. Und schließlich der erste String ausgegeben

Das gleiche erfolgt mit states.sensor.ical_adler_gameday_event_0.attributes.start, nur das hier das T zur Auftrennung des Strings Verwendung findet.

Und im Anschluß werden die Zwei Strings miteinander verglichen.
Wenn sie gleich sind, dann “on”, sonst “off”

{{ iif((now() | string).split(" ")[0] == (states.sensor.ical_adler_gameday_event_0.attributes.start | string).split("T")[0], "on", "off") }}

Siehe auch die Templating Dokumentation

Gruß
Osorkon

super vielen Dank.

Ich find in den Dokus nie das richtige für mein Thema :see_no_evil:

Dann noch die letzte offene Frage, wann wird dieser Helfer neu gesetzt? Ist das dann wirklich immer Punkt 0 Uhr?

Wenn Du now() in templates verwenden tust, erfolgt die Aktualisierung jede Minute.

Bei Verwendung von Sensoren, in Deinem fall sensor.ical_adler_gameday_event_0, sobald sich das Attribut start ändert.

Also oft genug. :grinning:

Gruß
Osorkon

Super vielen Danke :blush:

Irgendwie passt da doch etwas nicht.

der Sensor hat folgenden Inhalt wenn ich unter Zustände ihn mir anschaue:

start: "2024-08-30T19:30:00+02:00"

und mit dem Code:

{{ iif((now() | string).split(" ")[0] == (states.sensor.ical_adler_gameday_event_0.attributes.start | string).split("T")[0], "on", "off") }}

steht der Helfer auf off.

Wenn ich mir jetzt aber mit dem Teilcode den Inhalt im Entwicklerwerkzeug anschaue:

{{ states.sensor.ical_adler_gameday_event_0.attributes.start }}

kommt folgende Ausgabe:

2024-08-30 19:30:00+02:00

Damit müsste ich den Helfer Code in folgendes ändern:

{{ iif((now() | string).split(" ")[0] == (states.sensor.ical_adler_gameday_event_0.attributes.start | string).split(" ")[0], "on", "off") }}

Aber wieso wird mir im Entwicklerwerkzeug etwas anders angezeigt als wenn ich mir den Sensor unter Zustände anschaue?