Trigger an bestimmten Datum: Hohe Systemlast?

Hallo zusammen,

die folgende Automation funktioniert und tut folgendes:

Schaltet die Automation “Weihnachtsbeleuchtung” ein, wenn im Kalender
“Feiertage in Deutschland” der Eintrag “Totensonntag” gefunden wird und es 24h
Stunden später ist.

Ausgelöst durch Erreichen des Datums 15.01. eines Jahres wird die Automation
“Weihnachtsbeleuchtung” ausgeschaltet.

Automation:

Zusammenfassung
alias: Kalendertrigger Totensonntag
triggers:
  - event: start
    offset: "24:0:0"
    entity_id: calendar.feiertage_in_deutschland
    id: Totensonntag ein
    trigger: calendar
  - trigger: template
    value_template: |-
      {% set today = (now().month, now().day) %}
      {{ today == (1, 15) }}
    id: Totensonntag aus
conditions: []
actions:
  - if:
      - condition: and
        conditions:
          - condition: trigger
            id:
              - Totensonntag ein
          - condition: template
            value_template: "{{ trigger.calendar_event.summary is search('Totensonntag') }}"
    then:
      - action: automation.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: automation.weihnachtsbeleuchtung
  - if:
      - condition: trigger
        id:
          - Totensonntag aus
    then:
      - action: automation.turn_off
        metadata: {}
        data:
          stop_actions: true
        target:
          entity_id: automation.weihnachtsbeleuchtung
mode: single

Allerdings wundere ich mich, da ich nirgendwo in der GUI der Automationen eine Möglichkeit finde ein bestimmtes Datum einzugeben. Geht das nach wie vor nur mithilfe eines Templates?

Deweiteren habe ich gelesen, dass die Funktion now() minütlich auslöst und damit eine hohe Systemlast bedeutet. (ich benutze solche Templates so oder so ähnlich teils mehrfach in verschiedenen Automationen.

Gibt es eine bessere Art und Weise dasselbe Resultat zu erreichen?

Hallo,

ich habe das anders gelöst, da ich dort Steckdosen im Einsatz habe, die nur zu Weihnachten Ihren Zweck erfüllen. Heißt: Wechseln diese Steckdosen dann von “unavailable” zu “verfügbar”, wird die Automation aktiviert. Wieder zu “unavailable” dann wird die Automation wieder deaktiviert.

trigger: time wird sogar sekündlich evaluiert, da HA den Trigger mit der internen Uhr abgleicht.

Ist das denn wirklich ein Problem fürs System wenn minütlich abgeglichen wird welches Datum (bzw Tag und Monat) ist? Ich kann zumindest bisher keine erhöhte Belastung des Systems feststellen.

Ich hatte mich in meinen HA Anfängen hier auch eher bedenklich geäußert, mittlerweile denke ich theoretisch richtig, praktisch Hardware mäßig nicht relevant.

Edit: habe Raspi4 mit 8GB

1 „Gefällt mir“

Auch wenn technisch vielleicht unbegründet, habe ich auch immer ein Unbehagen verspürt, mit now() ständige Abfragen laufen zu haben. :sweat_smile:

Daher habe ich mir für ähnliche Sachen in der templates.yaml „Trigger Based Template Sensors“ angelegt, die nur zu bestimmten Ereignissen die Abfragen evaluieren.

Vielleicht ist das ja auch was für dich.

Hier mal zwei Beispiele, deren Werte bei mir in unterschiedlichen Automatisierungen genutzt werden:

## "Sensor zur Ermittlung ob in timetuple().tm_isdst Sommerzeit gesetzt ist" ##
- trigger:
    - trigger: time
      at: "03:01:00"
  condition:
    - condition: template
      value_template: >
        {{ now().isoweekday() == 7 }}
  sensor:
    - name: Zeitmodus
      unique_id: zeitmodus
      state: >
        {% if now().timetuple().tm_isdst == 1 %}
          Sommerzeit
        {% else %}
          Normalzeit
        {% endif %}
      icon: mdi:calendar-clock
      attributes:
        Mögliche_Zustände: "Sommerzeit (1), Normalzeit (0)"

## "Sensor zur Anzeige der Tageszeit anhand der Uhrzeiten" ##
- trigger:
    - trigger: time
      at: "00:00:00"
    - trigger: time
      at: "06:00:00"
    - trigger: time
      at: "10:00:00"
    - trigger: time
      at: "12:00:00"
    - trigger: time
      at: "14:00:00"
    - trigger: time
      at: "17:00:00"
    - trigger: time
      at: "18:00:00"
    - trigger: time
      at: "22:00:00"
  sensor:
    - name: Tageszeit
      unique_id:  tageszeit
      state: >
        {% if now().hour >= 0 and now().hour < 6 -%}
          Nacht
        {% elif now().hour >= 6 and now().hour < 10 -%}
          Morgen
        {% elif now().hour >= 10 and now().hour < 12 -%}
          Vormittag
        {% elif now().hour >= 12 and now().hour < 14 -%}
          Mittag
        {% elif is_state('sensor.zeitmodus', 'Sommerzeit') and now().hour >= 14 and now().hour < 18 -%}
          Nachmittag
        {% elif is_state('sensor.zeitmodus', 'Normalzeit') and now().hour >= 14 and now().hour < 17 -%}
          Nachmittag
        {% elif is_state('sensor.zeitmodus', 'Sommerzeit') and now().hour >= 18 and now().hour < 22 -%}
          Abend
        {% elif is_state('sensor.zeitmodus', 'Normalzeit') and now().hour >= 17 and now().hour < 22 -%}
          Abend
        {% elif now().hour >= 22 and now().hour < 24 -%}
          Spätabend
        {%- endif -%}
      attributes:
        Mögliche_Zustände: "Nacht, Morgen, Vormittag, Mittag, Nachmittag, Abend, Spätabend"
      icon: mdi:progress-clock
1 „Gefällt mir“

Ich hab ebenfalls nen Raspi4 mit 4GB und ner SSD am laufen. Verwende einmalig das oben gezeigte Script in der Automation und 2 mal triggere ich in anderen Automationen noch nach einem Jahresbereich, auch mit now().
Wie gesagt, kann bislang auch kein Performance-Problem erkennen.

Dennoch.. irgendwie bin ich der Meinung dass die Möglichkeit ein festes Datum zusetzen, oder Trigger für bestimmte Monate oder Trigger für frei definierbare Datums-Bereiche, in der GUI der Automationen fehlt. Oder ich finde das einfach nicht… Hab das bisher nur über Templates gemacht.

Perfetto! Schaue ich mir auf jeden Fall an. Danke dir.