Hi,
folgendes Szenario: Ich würde gerne abhängig von einigen Faktoren die Schließzeit meiner Rollläden berechnen, diese Zeit im Dashboard anzeigen können und, basierend auf dem Eintreten der jeweiligen Schließzeit, einen Node Red Flow triggern, der dann Aktionen startet, wie z.B. ausgewählte Rollläden zu schließen und ggf. noch mehr Schabernack.
Hierzu habe ich mir erst einmal ein paar Helferlein angelegt - was voraussichtlich Overkill ist und mit Sicherheit eleganter geht. Seht mir auch die einzelnen Funktionsaufrufe nach, komprimieren ließe sich der Code sicherlich, wenn es erst einmal funktioniert.
Helfer 1: Die Schließzeit in einem Sensor Template ermitteln. Das ist noch nicht wahnsinnig kompliziert, soll aber dynamischer werden, wenn das Konzept erst einmal steht:
{% set nextSetting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% if is_state('binary_sensor.sommerzeit', 'off') -%}
{% set closeTimeStamp = nextSetting + 1800 %}
{%- else -%}
{% set closeTimeStamp = nextSetting + 0000 %}
{%- endif %}
{% set closeTime = as_datetime(closeTimeStamp) %}
{% set closeTime = closeTime.replace(second = 0, microsecond = 0) %}
{{ as_local(closeTime) }}
Helfer 2: Einfache Konvertierung der Zeit in einen String für das Dashboard
{{ as_timestamp(states('sensor.rolladenschliesszeit')) | timestamp_custom('%d. %b \'%y %H:%M') }}
Helfer 3: Das soll der eigentliche Trigger (State Flip auf on/true) sein für Node Red, aber ich fürchte, ich habe hier eine Race Condition, das, je nachdem, wann das Template evaluiert wurde, Helfer 1 bereits auf den morgigen Tag geflippt ist, weil die “sun.sun[next_setting]” bereits einen neuen Wert bekommen hat und damit die Schließzeit (Helfer 1) neu ermittelt wurde. Demnach greift das Helfer 3 Template ins Leere, wenn es erst ein Mü später evaluiert wird, weil es schon das morgige Datum findet. Ich könnte natürlich eine Unschärfe reinbringen und das Datum ignorieren und nur die Uhrzeit prüfen im Template. Die paar Sekunden Unterschied pro Tag sollen es nicht ausmachen. Aber ich mag es nicht heuristisch ![]()
{% set timeNow = now().replace(second = 0, microsecond = 0) %}
{% set closeTime = as_local(as_datetime(states('sensor.rolladenschliesszeit'))).replace(second = 0, microsecond = 0) %}
{{ closeTime == timeNow }}
Unabhängig von meiner Präferenz, die tatsächlichen Aktionen eher in Node Red zu “malen”, als direkt in Home Assistant YAML/JSON zu schreiben: Was wäre der bessere und deterministische Weg, basierend auf meiner ermittelten Schließzeit, das in Home Assistant zu handhaben? Zeitplan scheint nicht dynamisch ermittelt bzw. an Helfer gebunden werden zu können, was schade ist.
Danke für Euren Input.
Kai
PS: Ja, ich hatte die Suche bemüht, da das Thema sicherlich zigfach abgehandelt wurde, ich habe aber partout nichts gefunden.
