Helfer mit dyn. Zeitberechnung als Trigger für Automatisierung funktioniert nicht

Moin zusammen,

bin relativ neu auf HA (15 Jahre FHEM) und probiere jetzt schon seit ein paar Tagen mit dem Helfer und Automationen herum. Und eine Sache klappt nicht.

Ich möchte eine Aktion ausführen (Weihnachtsbeleuchtung), die abhängig vom Sonnenuntergang ist, aber dies nur in einem festen Zeitfenster. Beispiel: 15:45 bis 16:30 Uhr, wenn der Sonnenuntergang vor 15:45 ist, soll die Aktion um 15:45 auslösen, wenn er nach 16:30 Uhr ist, um 16:30 Uhr.

Zuerst hatte ich es nur mit einer Automation versucht, die hat aber nie ausgelöst.

Folgender YAML-Code:

alias: Weihnachtsbeleuchtung_abends_on
description: >-
  Schaltet Licht ein, zum Sonnenuntergang, aber frühestens um 15:45 und
  spätestens um 16:30
triggers:
  - at: >
      {% set setting_dt = state_attr('sun.sun', 'next_setting') |
      as_datetime | as_local %}  
      {% set adjusted_setting_dt = setting_dt - timedelta(seconds=606) %}  
      {% set adjusted_setting = adjusted_setting_dt.time() %} 
      {% set result_time = ([today_at('15:45').time(), adjusted_setting, today_at('16:30').time()] | sort)[1] %} 
      {{ result_time.strftime("%H:%M:%S") }}
    trigger: time
conditions: []
actions:
  - type: turn_on
    device_id: xxxx-1
    entity_id: xxxx-2
    domain: switch
mode: single

Wenn ich den Template-Code (hinter dem at:) im Entwicklerwerkzeug/Template eingebe, erhalte ich dort als Ergebnis “15:51:04”. Das sieht für mich zunächst plausibel aus.
Ausgelöst, wird aber trotzdem nicht.

Danach habe ich es mit einem Helfer und einer Automation probiert. Geht auch nicht.

Den Helfer lege ich an mit “+ Helfer erstellen” → “Template” → “Sensor” und dort bei Zustand gebe ich den Code ein:

{% set sun_setting = state_attr('sun.sun', 'next_setting') | default(now().strftime("%Y-%m-%dT17:00:00+00:00")) %}
{% set setting_dt = sun_setting | as_datetime | as_local %}

{# Verschiebung um -606 Sekunden (ca. -10 Minuten) #}
{% set adjusted_setting_dt = setting_dt - timedelta(seconds=606) %}
{% set adjusted_setting = adjusted_setting_dt.time() %}

{# Logik zur Begrenzung auf 15:45:00 / 16:30:00 #}
{% set result_time = ([today_at('15:45:00').time(), adjusted_setting, today_at('16:30:00').time()] | sort)[1] %}

{{ result_time.strftime("%H:%M:%S") }}

Auch hier wird der Zustand korrekt berechnet (“15:51:04”), sehe ich in der Vorschau, ohne weitere Maßeinheit oder Geräteklasse. Auch in Entwicklerwerkzeuge/Zustände sehe ich diese Uhrzeit.

Dazu habe ich mir eine Automation angelegt:

alias: Weihnachtsstern_abends_on
description: >-
  Schaltet Licht ein zur Zeit, die im Sensor berechnet wird (Begrenzung
  15:45-16:30).
triggers:
  - at: sensor.weihnachtsstern_einschaltzeit
    trigger: time
conditions: []
actions:
  - type: turn_on
    device_id: xxxx-1
    entity_id: xxxx-2
    domain: switch
mode: single

Funktioniert auch nicht. Auch diese Automation wird nicht ausgelöst.

Ich bin jetzt etwas ratlos. Wo liegt mein Fehler?

Vielen Dank für Eure Mühe!

Axel

Einfach die Uhrzeit 15:45 und 16:30 als Auslöser verwenden.

15:45 → Auslöser: frühestens
16:30 → Auslöser: spätestens

Dann als Aktion den Baustein Auswählen:
Option 1:

  • Wenn ausgelöst durch frühestens und nach Sonnenuntergang
  • Aktion: Licht einschalten

Option:

  • Wenn ausgelöst durch spätestens und licht ist aus
  • Aktion: Licht einschalten
description: ""
mode: single
triggers:
  - trigger: time
    at: "15:45:00"
    id: frühestens
  - trigger: time
    at: "16:30:00"
    id: spätestens
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - frühestens
          - condition: sun
            after: sunset
        sequence:
          - action: light.turn_on
            metadata: {}
            target:
              entity_id: light.xyz
            data: {}
      - conditions:
          - condition: trigger
            id:
              - spätestens
          - condition: state
            entity_id: light.xyz
            state:
              - "off"
        sequence:
          - action: light.turn_on
            metadata: {}
            target:
              entity_id: light.xyz
            data: {}

Wenn Du es flexibel gestalten willst, kannst Du anstatt einer festen Uhrzeit auch ein Input Date Time für den Trigger frühestens/ spätestens verwenden.

triggers:
  - trigger: time
    at: input_datetime.xyz1
    id: frühestens
  - trigger: time
    at: "16:30:00"
    id: input_datetime.xyz2

Den Input Datetime kannst Du Dir in der GUI als Helfer erstellen.

EDIT:
Habe die Sonne vergessen, also wenn diese nach 15:45 und vor 16:30 untergeht.

description: ""
mode: single
triggers:
  - trigger: time
    at: "15:45:00"
    id: frühestens
  - trigger: time
    at: "16:30:00"
    id: spätestens
  - trigger: sun
    event: sunset
    offset: 0
    id: sonne
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - frühestens
          - condition: sun
            after: sunset
        sequence:
          - action: light.turn_on
            metadata: {}
            target:
              entity_id: light.xyz
            data: {}
      - conditions:
          - condition: trigger
            id:
              - spätestens
          - condition: state
            entity_id: light.xyz
            state:
              - "off"
        sequence:
          - action: light.turn_on
            metadata: {}
            target:
              entity_id: light.xyz
            data: {}
      - conditions:
          - condition: trigger
            id:
              - sonne
          - condition: time
            after: "15:45:00"
            before: "16:30:00"
        sequence:
          - action: light.turn_on
            metadata: {}
            target:
              entity_id: light.xyz
            data: {}

Gruß Osorkon

Wow, vielen Dank für die prompte Hilfe!

Das ist ein ganz anderer, strukturierter Ansatz, gefällt mir aber sehr gut bzw. sogar viel besser :). Habe ich sofort übernommen und bin schon ganz gespannt auf morgen.
Werde berichten, ob das so geht.

Obwohl ich in den letzten Tagen und Wochen viel zu HA gelesen habe und viele Tutorials geschaut habe, ist mir diese Variante der “Programmierung” bei einer Automation noch nicht untergekommen. Aber ich glaube, so eine Art ist sehr hilfreich und mir bei bei meinen künftigen Ideen sehr nützlich!

Besten Dank,
Axel

Der Test heute war erfolgreich, hat wie gewünscht funktioniert!

Und wieder etwas gelernt.

Besten Dank!

1 „Gefällt mir“