Dropdown für Automatisierung nutzen

Hi,
ich möchte eine variable Automatisierung für mein Rollo im Büro anlegen.
Dafür habe ich unter Einstellungen/Geräte & Dienste/Helfer zwei Helfer erstellt und dabei das Dropdown Menü gewählt.

Beim ersten Helfer (der soll die Rollos schließen), habe ich als Optionen diese Eingaben gemacht:
kein automatisches Schließen
2 Std vor Sonnenuntergang
Bei Sonnenuntergang
2 Std nach Sonnenuntergang
22 Uhr
Die dadurch erstellte Entitäts-ID heißt “input_select.rollo_buero_schliessen”

Beim zweiten Helfer (der soll die Rollos wieder öffnen), habe ich als Optionen diese Eingaben gemacht:
kein automatisches Öffnen
2 Std vor Sonnenaufgang
Bei Sonnenaufgang
2 Std nach Sonnenaufgang
8 Uhr
Die dadurch erstellte Entitäts-ID heißt “input_select.rollo_buero_oeffnen”

Auf meinem Dashboard für die Rollos habe ich eine Karte angelegt, mit der ich auswählen möchte, wann das Rolloim Büro schließen bzw. öffnen:

square: false
type: grid
cards:
  - type: entity
    entity: input_select.rollo_buero_schliessen
    name: Rollo schließen
  - type: entity
    entity: input_select.rollo_buero_oeffnen
    name: Rollo öffnen
columns: 1
title: Rollozeitschaltung Büro

Im Dashboard kann ich nun auf die Karte klicken und auswählen, wie sich das Rollo verhalten soll. Z.B.:

Beispiel 1
Schließen: 2 Std nach Sonnenuntergang
Öffnen: 8 Uhr
→ Das Rollo im Büro soll 2 Std nach Sonnenuntergang schließen und um 08:00:00 Uhr wieder öffnen

Oder
Beispiel 2
Schließen: 22 Uhr
Öffnen: kein automatisches Öffnen
→ Das Rollo im Büro soll um 22 Uhr schließen und nicht mehr automatisch öffnen

Ich habe jetzt versucht, eine Automatisierung zu erstellen, die das Rollo im Büro entsprechend der Auswahl öffnet/schließt, aber ich bekomme es nicht hin.
Die Entität heißt: cover.rollo_buero

Ich habe das Problem, dass ich in der Automatisierung zwar eine ODER Bedingung eingeben kann, aber nur eine Aktion. Es ist also egal, was als Eingabe gewählt ist (2 Std vor Sonnenuntergang oder 22 Uhr…), das Rollo schließt dann um die Uhrzeit, die ich in der Aktion eingestellt habe.
Ich brauche aber je nach Eingabe eine andere Aktion.

Kann mir da bitte jemand helfen?

Hier mal ein Beispiel wie du es umsetzen könntest:

Erstelle dir einen Template-Helfer

{% set wert = states('input_select.rollo_buero_oeffnen') %}
{% if wert == '2 Std vor Sonnenaufgang' %}
  {% set time = state_attr('sun.sun','next_rising') |as_datetime + timedelta(hours=-2) %}
{% elif wert == '2 Std nach Sonnenaufgang' %}
  {% set time = state_attr('sun.sun','next_rising') |as_datetime + timedelta(hours=2) %}
{% elif wert == 'Bei Sonnenaufgang' %}
  {% set time = state_attr('sun.sun','next_rising') |as_datetime %}
{% elif wert == 'kein automatisches Öffnen' %}
  {% set time = state_attr('sun.sun','next_rising') |as_datetime + timedelta(days=10)%}
{% elif wert == '8 Uhr' %}
  {% set time = (state_attr('sun.sun','next_rising') | as_datetime | as_local).replace(hour=8, minute=0)  %}
{% endif %}

Das erstellt den Sensor mit einem Inhalt, der z.B. so aussieht:

2025-02-02 05:58

Sonnenaufgang morgen minus 2 Stunden

Dann setzt du in deiner Automation als Trigger folgendes

triggers:
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') == time | as_timestamp |  timestamp_custom('%Y-%m-%d %H:%M') }}

So zumindest funktioniert es hier bei mir mit eine paar Testzeiten.

1 „Gefällt mir“

Hi,
ich bekomme das mit dem Template Helfer leider schon nicht hin.

Welchen soll ich da wählen?

Template für eine Alarmzentrale erstellen
Template für einen Binärsensor erstellen
Template für eine Taste erstellen
Template für ein Bild erstellen
Template für eine Nummer erstellen
Template für eine Auswahl erstellen
Template für einen Sensor erstellen
Template für eines Schalter erstellen

Ich habe versucht, deinen Code in “Einstellungen/Geräte & Dienste/Helfer” mit “+ HELFER ERSTELLEN” unter “Template” versucht, einzugeben.

Template → Template für einen Sensor:
Im Code oben fehlte noch die Ausgabe, habe ihn daher noch einmal leicht angepasst. Zusätzlich habe ich auch die Basiszeit in eine Variable gepackt:

{% set wert = states('input_select.rollo_buero_oeffnen') %}
{% set basis = state_attr('sun.sun','next_rising') %}
{% if wert == '2 Std vor Sonnenaufgang' %}
  {% set time = basis |as_datetime + timedelta(hours=-2) %}
{% elif wert == '2 Std nach Sonnenaufgang' %}
  {% set time = basis |as_datetime + timedelta(hours=2) %}
{% elif wert == 'Bei Sonnenaufgang' %}
  {% set time = basis |as_datetime %}
{% elif wert == 'kein automatisches Öffnen' %}
  {% set time = basis |as_datetime + timedelta(days=10)%}
{% elif wert == '8 Uhr' %}
  {% set time = (basis | as_datetime | as_local).replace(hour=8, minute=0)  %}
{% endif %}
{{ time  | as_timestamp | timestamp_custom('%Y-%m-%d %H:%M') }}

Sieht dann mit der Ausgabe so aus:


(Select und Auswahl sind hier Werte von mir)

Und als Trigger musst du dann natürlich deinen neuen Sensor verwenden:

triggers:
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') == states('sensor.xyz')  }}
1 „Gefällt mir“

Ich danke dir vielmals!

Ich habe es jetzt für die Auswahl der Schließzeit hinbekommen.
Unter meinem Dropdown habe ich eine Karte eingesetzt, der die Zeit, zu der das Rollo geschlossen wird, anzeigt. Es wird immer der ausgewählte Wert angezeigt. Das funktioniert also schonmal super.

Ich erledige es jetzt noch für das Öffnen am nächsten Morgen.

Insgesamt wird die Karte im Dashboard dann doch relativ groß. Ich würde daher gerne noch eine Sache ändern und die Zeitschaltung generell mit einem boolean sensor (aus/ein) ausschalten.
Ich habe den boolean Sensor “input_boolean.automatisierung_rollo_buero_aktivierung”
genannt und in der Karte auf dem Dashboard eine Bedingung gebaut, dass die Auswahl der Schließ/Öffnungszeit und deren Wert (aus dem Template von dir) nur angezeit wird, wenn input_boolean.automatisierung_rollo_buero_aktivierung auf ein steht.
Das funktioniert auch im Dashboard. Wenn ich auf aus stelle, klappt die Karte sozusagen zusammen und ich sehe nur den Schalter, der auf aus steht.

Wie würde das in der Automatisierung gehen?
Und vorerst als letztes: Ich vermute, dass ich eine Automatisierung für das Schließen und eien fürs Öffnen erstellen muss. Alles in eine geht wahrscheinlich nicht oder?

Ich bin zuversichtlich, dass ich es jetzt habe.
Der YAML der Automatisierung sieht so aus:

alias: Zeitschaltung Rollo Buero schliessen
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') ==
      states('input_select.rollo_buero_schliessen')  }}
conditions:
  - condition: state
    entity_id: input_boolean.automatisierung_rollo_buero_aktivierung
    state: "on"
actions:
  - action: cover.set_cover_position
    metadata: {}
    data:
      position: 18
    target:
      device_id: yxz
mode: single

Ich werde heute um 16 Uhr sehen, ob es klappt.

Das geht, z.B. so.

alias: Zeitschaltung Rollo Buero
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') ==
      states('input_select.rollo_buero_schliessen')  }}
    id: Zu
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') ==
      states('input_select.rollo_buero_oeffnen')  }}
    id: Auf
conditions:
  - condition: state
    entity_id: input_boolean.automatisierung_rollo_buero_aktivierung
    state: "on"
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Zu
        sequence:
          - action: cover.set_cover_position
            metadata: {}
            data:
              position: 18
            target:
              device_id: yxz
      - conditions:
          - condition: trigger
            id:
              - Auf
        sequence:
          - action: cover.set_cover_position
            metadata: {}
            data:
              position: 100
            target:
              device_id: yxz
mode: single

1 „Gefällt mir“

Beim Trigger hast du den falschen Sensor drin.
Er soll mit deinem erstellten Template-Sensor vergleichen und nicht mit dem Dropdown.
Im Dropdown steht ja ein Text und kein Zeitstempel.

Mein Code oben ist für das öffnen.
Für das schließen entsprechend einen weiteren Template-Sensor mit den Werten aus deinem Schließen Dropdown und

{% set wert = states('input_select.rollo_buero_schliessen') %}
{% set basis = state_attr('sun.sun','next_setting') %}

Wie man das in eine Automation packt, hat rstuck ja bereits gezeigt

1 „Gefällt mir“

Es funktioniert leider nicht.
Ich vermute, dass das an “'input_select.rollo_buero_schliessen” aus dem Code von rstuck liegt:

alias: Zeitschaltung Rollo Buero
description: ""
triggers:
  - trigger: template
    value_template: >
      {{ now().strftime('%Y-%m-%d %H:%M') ==
      states('input_select.rollo_buero_schliessen')  }}

input_select.rollo_buero_schliessen ist das Dropdown.
Müsste das nicht der Sensor sein, den ich mit dem Template mit deiner Hilfe neu anglegt habe? Also der, der immer den Wert anzeigt, den ich ausgewähjlt habe.

Der Template Sensor, den ich angelegt habe, heißt:
“sensor.rollo_buero_ausgabe_zeitschaltung_oeffnen”

Bei

{{ now().strftime('%Y-%m-%d %H:%M') ==
      states('sensor.118_rollo_buero_ausgabe_zeitschaltung_oeffnen')  }}

muss stehen:

{{ now().strftime('%Y-%m-%d %H:%M') ==
      states('sensor.rollo_buero_ausgabe_zeitschaltung_oeffn')  }}

Damit hat es gerad geklappt, als ich die Auswahl auf 17 Uhr gestellt habe.

Danke euch sehr. Ich hätte das alleine nie geschafft.

Ich habe noch einen Nachtrag:
Das Rollo ist vorhin zum Testen um 17 Uhr runter gefahren. Ich hab es dann wieder manuell geöffnet, weil mir 17 Uhr heute zu früh war. Wenn ich jetzt schließen auf 18 Uhr setze, zeigt mir der Helfer an, dass das Rollo morgen um 18 Uhr geschlossen wird. Das Gleiche ist bei allen anderen Uhrzeiten.
Ist das, weil die Automatisierung heute schon stattgefunden hat? Kann man das ändern?

Das liegt daran, dass der Sonnenuntergang um 17:23 war. Mein Code oben zieht das Datum aus dem nächsten Sonnenuntergang und der ist um 18:00 dann bereits am nächsten Tag und würde nie auslösen…
Es muss also dafür das aktuelle Datum genutzt werden, statt des sensors für den nächsten Untergang.

Falls du es nicht bereits hast, gehe zu “Einstellungen → Geräte und Dienste → Integration hinzufügen → Uhrzeit und Datum → Datum”.
Das erstellt einen sensor.date mit dem aktuellen Datum.

Dann ersetzt du in deinem Template Sensor den Abschnitt für die Uhrzeit mit diesem:

{% elif wert == '18 Uhr' %}
  {% set time = (states('sensor.date') | as_datetime ).replace(hour=18, minute=0)  %}

2025-02-02 18:00
Dann steht im Sensor das aktuelle Datum und die Auslösezeit 18:00, egal ob es jetzt 00:01, 13:25 oder 23:59 ist.

1 „Gefällt mir“

Danke, hab ich kapiert und umgesetzt.
Wenn ich jetzt als Schließzeit etwas mit Sonnenuntergang wähle, kommt als Datum der 3. Feb… Warum hast du ja oben erkärt.
Wenn ich eine Uhrzeit wähle, ist es der 2. Februar.
Das ist etwas inkonsistent, weil 20:00 Uhr heute auch schon abgelaufen ist.

Kann man das noch einbauen, dass ein Abgleich stattfindet und das heutige Datum da steht, wenn die Uhrzeit noch nicht um ist? Ansonsten morgen.

Außerdem hat meine Frau vorhin noch einen Wunsch geäußert:
Ist es möglich, noch eine boolesche Eingabe (on/off) einzubauen, die bei off bewirkt, dass zur exakten Uhrzeit geschaltet wird und bei on aus einem zufälligen Zeitkorridor (z.B. +/- 15 Minuten) um die gewählte Uhrzeit schaltet?

Hi, ich wollte nur kurz sagen, dass ich an heute eine Woche Urlaub außerhalb von Europa mache und deshalb keinen Zugriff auf das System habe. Wenn ihr noch was vorschlagt, kann ich es erst nächste Woche umsetzen. Also bitte nicht so interpretieren, dass ich kein Interesse mehr habe, wenn nichts mehr von mir kommt.

Das mit der “unschönen” Datumsangabe lässt sich noch einigermaßen leicht korrigieren:

{% elif wert == '18 Uhr' %}
  {% set time = (states('sensor.date') |as_datetime ).replace(hour=18, minute=0) %}
  {% if now().hour >=18 and now().minute > 0 %}
    {% set time = time + timedelta(days=1)  %}
  {% endif %}

Wenn die gewünschte Uhrzeit vorbei ist, addiert man einfach einen Tag drauf.

Auch das mit dem Zufall ist lösbar, allerdings werde ich vor Wochenende wohl keine Zeit haben, dir hier ein Beispiel zu erstellen.
Da du aber eh weg bist, ist das wohl nicht tragisch

Danke, ich werde das Zuhause übernehmen. Für alle Uhrzeiten.

Beim Rest hat du Recht. Es hat keine Eile.

So, hab jetzt doch schon etwas früher die Zeit gefunden mich mit dem Random zu beschäftigen.
Ob mein Lösungsweg sonderlich elegant ist, weiß ich nicht, aber er funktioniert.

Zu Beginn benötigt man einen weiteren Sensor, der sich einmal am Tag eine neue Random Zahl zwischen -15 und +15 holt:

Folgendes muss in die configuration.yaml oder wo auch immer du deine Templates definierst:

  - trigger:
      - trigger: time
        at: "00:01:00"
    sensor:
      - name: "Randomwert Abends"
        unique_id: "random_abends"
        state: >-
          {{ range(-15, 15) | random }}

Der Auslösezeitpunkt muss später sein, als der spätest mögliche Trigger am Abend, also nach 18:15. Sonst besteht die Gefahr, dass die Automation mehrfach getriggert wird. Wenn es dir nichts ausmacht, dass der Auslösezeitpunkt sich erst um Mitternacht ändert, kannst du es so lassen, ansonsten setze es auf 18:16. Dann steht maximal für 30 Minuten ein anderer Zeitpunkt im Dashboard als es am nächsten Tag wirklich ist.
Wie random diese Funktion ist, weiß ich aber nicht.

Im Template Sensor muss man entsprechend ein paar Sachen ändern:

{% set wert = states('input_select.rollo_buero_schliessen') %}
{% set basis = state_attr('sun.sun','next_rising') %}
{% set rand = states('sensor.randomwert_abends')  %}
...
{% elif wert == '18 Uhr' %}
  {% set time = (states('sensor.date') |as_datetime ).replace(hour=18, minute=00) + timedelta(minutes = rand | int(0)) %}
  {% if now() | as_timestamp > time | as_timestamp %}
    {% set time = time + timedelta(days=1)  %}
  {% endif %}
{% endif %}
{{ time  | as_timestamp | timestamp_custom('%Y-%m-%d %H:%M') }}

Zuerst wird die Zeit auf die Wunschzeit, hier 18 Uhr, eingestellt und dann der random Zeitversatz addiert.
Die Prüfung, ob der Auslösezeitpunkt bereits vergangen ist, muss dann auch dynamisiert werden.