Jalousien in Verbindung mit Fenster schließen

Hallo zusammen,

ich würde gerne meine Jalousinen nur schließen, wenn das zugehörige Fenster den Zustand geschlossen hat. Ich kann natürlich eine if-Abfrage in eine Automatisierung packen, allerdings wird das bei 18 Fenstern etwas unübersichtlich und ich hab mich gefragt, ob es einen effizienteren Weg gibt? Hat jmd eine Idee?

Das geht theoretisch alles in einer einzigen Automation. Poste bitte mal 2 entity_ids (Fenster + dazugehöriger Rollladen) und das, was du eventuell schon an Code hast.

Hi, vielen Dank für die schnelle Hilfe:
Jalousie: cover.schlafzimmer_fenster
Fenster: binary_sensor.esp_fenster_binary_sz_fenster

Leider habe ich noch keinen Code, da mir absolut der Ansatz fehlt.

Aber du hast doch sicherlich eine Vorstellung, wann was warum passieren soll? Ich benutze z. B. eine kleine Automation, die bei versehentlichem Runterfahren des Rollos (== Trigger) das Rollo sofort wieder hochfährt, wenn das Fenster noch offensteht.

Oder soll vorher was ganz anderes passieren und der Jalousienschutz nur innerhalb des Action-Blocks greifen? Z. Bsp. Trigger ist 22 Uhr, Aktionen sind a) Lampen x, y, z dimmen, b) Musik anstellen, c) Jalousien runterfahren?

Also ich benutze es aktuell beim Sonnenuntergang:

description: ""
mode: single
triggers:
  - trigger: sun
    event: sunset
    offset: 0
conditions: []
actions:
  - if:
      - condition: state
        entity_id: binary_sensor.esp_fenster_binary_sz_fenster
        state: "off"
    then:
      - action: cover.close_cover
        metadata: {}
        data: {}
        target:
          device_id: a9273af5c8ea2b4d8122a1a60795e83f

Kannst du nicht eine Jalousien Gruppe erstellen?

Hab ich. Wenn die Sonne untergeht, gehen alle Jalousine runter. Ich möchte allerdings nur das die runter gehen, bei denen das Fenster auch geschlossen ist. Bin mir in dem Falle nicht sicher, wie mir die Gruppe da helfen soll?!

Man möchte natürlich mit möglichst wenig Automationen auskommen.
Ich habe trotzdem für jedes Fenster eine eigene Automation.
Es muss ja jeder Rollo in Abhängigkeit des Fensterszustandes seperat gesteuert werden.

Hat zufällig jemand hier im Forum schon eine Möglichkeit gefunden das in EINER Automation zu machen?

Na in Python könnte ich mir sowas vorstellen, wie ein dictonary, was immer ein Paar aus Fenster und Jalousine bildet und da könnte man mit einer Schleife drüber gehen. Ob das in HA irgendwie ähnlich oder überhaupt geht - keine Ahnung :expressionless:

Sehr gut. Wie wäre es damit:

actions:
  - repeat:
      for_each:
        - fenster: binary_sensor.fenster_eins
          rollo: cover.eins
        - fenster: binary_sensor.fenster_zwei
          rollo: cover.zwei
        # usw.
      sequence:
        - variables:
            fenster: "{{ repeat.item.fenster }}"
            rollo: "{{ repeat.item.rollo }}"
        - condition: template
          value_template: "{{ is_state(fenster, 'off') }}"
        - action: cover.close_cover
          target:
            entity_id: "{{ rollo }}"

Einziger Wermutstropfen: ein bisschen Fleißarbeit, weil du 18 Paare anlegen musst.

Quelle: https://www.home-assistant.io/docs/scripts/#for-each

Ich würde die Fenster und Sensoren durchnummerieren.

binary_sensor.fenster_1 … binary_sensor.fenster_18  
cover.fenster_1   … cover.fenster_18

Wie Du sie im Dashboard nennst ist davon ja unabhängig. Und dann läufst Du es einfach in der Automation durch …

alias: Rollläden bei Sonnenuntergang schliessen
description: Schließt alle Rolläden, wenn das dazugehörige Fenster geschlossen ist.
mode: single

trigger:
  - platform: sun
    event: sunset

action:
  - repeat:
      # Erzeugt eine Liste ["1","2",…,"18"]
      for_each: "{{ range(1,19) | map('string') | list }}"
      sequence:
        - variables:
            idx: "{{ repeat.item }}"
            fenster: "binary_sensor.fenster_{{ idx }}"
            # Einfaches Ersetzen des Domain-Teils
            rollo: "{{ fenster.replace('binary_sensor', 'cover') }}"
        - condition: state
          entity_id: "{{ fenster }}"
          state: "off"
        - service: cover.close_cover
          target:
            entity_id: "{{ rollo }}"

Wahlweise eine Gruppe mit allen Fenstern anlegen …

action:
  - repeat:
      for_each: "{{ state_attr('group.fensterkontakte', 'entity_id') }}"
      sequence:
        - variables:
            fenster: "{{ repeat.item }}"
            rollo: "{{ fenster.replace('binary_sensor', 'cover') }}"
        - condition: state
          entity_id: "{{ fenster }}"
          state: "off"
        - service: cover.close_cover
          target:
            entity_id: "{{ rollo }}"

Hallo zusammen,
tatsächlich habe ich genau dieses Thema lange Zeit vor mich hergeschoben - und seit kurzem eine fast fertige Lösung gebaut - die aber “etwas” größer geworden ist. Da ich neu hier bin, bin ich mir auch nicht so sicher, ob 1x Blueprint, 2x Automatisierung, 1x Skript hier erwünscht ist :slight_smile:

Hier die Bescheibung des Blueprints:

:bullseye: Purpose (Zweck)

Diese Automation dient der intelligenten Steuerung von Rollläden in einem Smart Home. Sie berücksichtigt eine Vielzahl von Faktoren wie Wetter, Helligkeit, Anwesenheit, Fensterstatus und Zeit, um den Komfort, die Energieeffizienz und die Sicherheit im Haushalt zu erhöhen. Ziel ist es, manuelle Eingriffe zu minimieren und gleichzeitig auf besondere Situationen wie Feueralarm oder Haustiere flexibel zu reagieren.



:hammer_and_wrench: Features (Funktionen)

Die Automation bietet eine Vielzahl an durchdachten Funktionen:

:wrench: Konfigurierbare Eingaben

  • Auswahl des zu steuernden Rollladens und Soll-Position
  • Fensterflügel-Sensoren (links/rechts) und Türerkennung
  • Katzenanwesenheit und Katzenklappenlogik
  • Fenster-Ausrichtung (Himmelsrichtung)
  • Wetterdaten: Temperatur, Regen, Hagel, Feueralarm
  • Außenhelligkeit (Lux) und Anwesenheitserkennung
  • Zeitsteuerung für Wochentage und Wochenenden
  • Manuelle Preset-Auswahl

:brain: Intelligente Entscheidungslogik mit Prioritäten

  1. Feueralarm → Rollladen vollständig öffnen
  2. Raussperrschutz → Keine Aktion bei offener Tür und Anwesenheit
  3. Hagelwarnung → Rollladen öffnen
  4. Regen bei offenem Fenster → Rollladen schließen
  5. Abwesenheitsschutz → Sichtschutz bei offenem Fenster und niemand zuhause
  6. Sonnenschutz → Temperatur + Sonnenstand → Sichtschutz oder Katzenklappenhöhe
  7. Privatsphäre → Bei Dunkelheit → Sichtschutz oder Katzenklappenhöhe
  8. Zeit+Licht morgens → Spätes Hochfahren auch bei Helligkeit (Langschläfermodus)
  9. Zeit+Licht abends → Frühes Runterfahren auch bei Helligkeit (Kinder ins Bett Modus)

:stopwatch: Trigger

  • Änderungen an Sensoren, Zuständen oder alle 5 Minuten

:puzzle_piece: Modularität

  • Alle Eingaben sind als Helfer (input_boolean, input_number, etc.) definiert
  • Leicht anpassbar für verschiedene Räume, Haustiere oder Nutzerbedürfnisse

Mein Blueprint:
Mit meinen Default Entity und Ausrichtungen
Für meine Fester - die fast alle 2 Flügel haben

offen:
Wie bekomme ich die Tageshöchttemperatur in eine Entity?
Wie bekomme ich Hagelwarnung aus Wetterwarnung in eine Entity?
Wie kann ich Gruppen Helfer (und expand) nutzen, um die Listen in den Automationen zu sparen

Blueprint: Intelligente Rollladensteuerung

################################################################################

Blueprint-Metadaten

################################################################################
blueprint:
name: Intelligente Rollladensteuerung (vollständig kommentiert)
description: >
Automatisierte Rollladensteuerung mit voreingestellten Helfern,
Prioritäten, Positionsprofilen, Wetter- & Licht-Berücksichtigung sowie
optionaler Zeitsteuerung.
domain: automation
homeassistant:
# Minimale HA-Version wegen neuer action-Syntax
min_version: “2024.8.0”

################################################################################

Inputs (Helper), alle mit Kommentaren und sinnvollen Defaults

################################################################################
input:

input_boolean_automatik_aktiv:
  name: Automatikmodus aktiv?
  description: Wenn deaktiviert, werden nur Prioritäten 1–5 ausgeführt
  selector:
    entity:
      domain: input_boolean

# Welches Rollladen-Cover soll gesteuert werden?
entity_rollo:
  name: Rollladen-Entity
  selector:
    entity:
      domain: cover

# Welches Rollladen-Cover SOLL soll gesteuert werden?
entity_rollo_soll:
  name: Rollladen-Entity für SOLL Wert
  selector:
    entity:
      domain: input_number


# Optionale Fensterflügel-Sensoren
entity_fenster_fluegel_links:
  name: Fensterflügel links (optional)
  default: null
  selector:
    entity:
      domain: binary_sensor
entity_fenster_fluegel_rechts:
  name: Fensterflügel rechts (optional)
  default: null
  selector:
    entity:
      domain: binary_sensor

# Tür-Erkennung für Raussperrschutz
ist_tuer:
  name: Ist das Fenster eine Tür?
  description: Für Raussperrschutz (z. B. Balkon-/Terrassentür)
  default: false
  selector:
    boolean: {}

# Katzen-Sensor (optional) und Klappenfunktion
input_boolean_katzen_anwesend:
  name: Katzen Anwesenheit (optional)
  description: True = Katze ist drinnen
  default: input_boolean.anwesenheit_katzen
  selector:
    entity:
      domain: input_boolean
      
katzenklappe_vorhanden:
  name: Katzenklappenfunktion aktiv?
  description: True = Katzenklappe vorhanden
  default: false
  selector:
    boolean: {}

# Ausrichtung des Fensters per Dropdown
ausrichtung_grad:
  name: Fenster-Ausrichtung
  description: Wähle die Himmelsrichtung deines Fensters
  default: "24"     # Default ebenfalls als String
  selector:
    select:
      options:
        - value: "24"
          label: "N (24°)"
        - value: "114"
          label: "O (114°)"
        - value: "204"
          label: "S (204°)"
        - value: "294"
          label: "W (294°)"

# Tages-Maximaltemperatur per Input-Number-Helper
sensor_tages_max_temp:
  name: Tages-Maximaltemperatur (°C)
  description: Prognostizierte Höchsttemperatur des aktuellen Tages
  default: input_number.tages_maximaltemperatur
  selector:
    entity:
      domain: input_number

# Wetterwarnungen
input_boolean_regen_erwartet:
  name: Regen erwartet?
  description: True = Regenprognose aktiv
  default: input_boolean.regen_erwartet
  selector:
    entity:
      domain: input_boolean
      
input_boolean_hagelwarnung:
  name: Hagelwarnung aktiv?
  description: True = Hagelwarnung aktiv
  default: input_boolean.hagelwarnung_aktiv
  selector:
    entity:
      domain: input_boolean
      
input_boolean_feueralarm:
  name: Feueralarm aktiv?
  description: True = Feueralarm läuft
  default: input_boolean.feueralarm_aktiv
  selector:
    entity:
      domain: input_boolean

# Außenhelligkeit und Anwesenheit
sensor_helligkeit:
  name: Außenhelligkeit (Lux)
  description: z. B. Lux-Sensor an der Fassade
  default: sensor.0xa4c13895d1d5a30c_illuminance
  selector:
    entity:
      domain: sensor
      device_class: illuminance
      
input_boolean_anwesenheit:
  name: Anwesenheit Bewohner?
  description: True = jemand zuhause
  default: input_boolean.anwesenheit_bewohner
  selector:
    entity:
      domain: input_boolean

# Positions-Presets (0–100 %)
position_offen:
  name: Offen (100 %)
  default: 100
  selector:
    number:
      min: 0
      max: 100
      unit_of_measurement: "%"
position_geschlossen:
  name: Geschlossen (0 %)
  default: 0
  selector:
    number:
      min: 0
      max: 100
      unit_of_measurement: "%"
position_sichtschutz:
  name: Sichtschutz (z. B. 20 %)
  default: 20
  selector:
    number:
      min: 0
      max: 100
      unit_of_measurement: "%"
position_katzenklappe:
  name: Katzenklappe (z. B. 40 %)
  default: 40
  selector:
    number:
      min: 0
      max: 100
      unit_of_measurement: "%"

# Lux-Schwelle für Privatsphäre
lux_schwelle_privatsphaere:
  name: Lux-Schwelle Privatsphäre
  description: Schwelle für Dunkelheitsschutz
  default: 100
  selector:
    number:
      min: 0
      max: 10000
      unit_of_measurement: "lx"


# Zeit- & Licht-Logik (optional)
zeitlicht_logik_aktiv:
  name: Zeit+Licht-Logik aktiv?
  description: Steuerung anhand Zeitfenstern + Helligkeit
  default: false
  selector:
    boolean: {}
zeitsteuerung_wochentags_auf:
  name: Frühestes Hochfahren (Wochentags)
  default: "06:00"
  selector:
    time: {}
zeitsteuerung_wochentags_zu:
  name: Spätestes Runterfahren (Wochentags)
  default: "19:30"
  selector:
    time: {}
zeitsteuerung_wochenende_auf:
  name: Frühestes Hochfahren (Wochenende)
  default: "08:30"
  selector:
    time: {}
zeitsteuerung_wochenende_zu:
  name: Spätestes Runterfahren (Wochenende)
  default: "21:00"
  selector:
    time: {}

# Manueller Preset-Selector (optional)
preset_position:
  name: Preset-Selector (optional)
  description: Manuelle Auswahl von Position-Presets
  default: null
  selector:
    entity:
      domain: input_select

################################################################################

Modus & Variablen

################################################################################
mode: restart
variables:
rollo_soll: !input entity_rollo_soll
rollo: !input entity_rollo
fl_l: !input entity_fenster_fluegel_links
fl_r: !input entity_fenster_fluegel_rechts
ist_tuer: !input ist_tuer
katzen_anwesend: !input input_boolean_katzen_anwesend
katzenklappe: !input katzenklappe_vorhanden
anwesend: !input input_boolean_anwesenheit
regen: !input input_boolean_regen_erwartet
hagel: !input input_boolean_hagelwarnung
feuer: !input input_boolean_feueralarm
automatik_aktiv: !input input_boolean_automatik_aktiv
ausrichtung: !input ausrichtung_grad
temp_sensor: !input sensor_tages_max_temp
lux_sensor: !input sensor_helligkeit
lux_schwelle: !input lux_schwelle_privatsphaere
zeit_auf_wt: !input zeitsteuerung_wochentags_auf
zeit_zu_wt: !input zeitsteuerung_wochentags_zu
zeit_auf_we: !input zeitsteuerung_wochenende_auf
zeit_zu_we: !input zeitsteuerung_wochenende_zu
zeitlicht: !input zeitlicht_logik_aktiv

################################################################################

Trigger: Wann soll die Steuerung prüfen?

################################################################################
trigger:

  • platform: state
    entity_id: !input sensor_helligkeit
  • platform: state
    entity_id: !input input_boolean_automatik_aktiv
  • platform: state
    entity_id: !input input_boolean_hagelwarnung
  • platform: state
    entity_id: !input input_boolean_regen_erwartet
  • platform: state
    entity_id: !input input_boolean_feueralarm
  • platform: state
    entity_id: !input entity_fenster_fluegel_links
  • platform: state
    entity_id: !input entity_fenster_fluegel_rechts
  • platform: state
    entity_id: !input input_boolean_katzen_anwesend
  • platform: state
    entity_id: !input input_boolean_anwesenheit
  • platform: time_pattern
    minutes: “/5”

condition: # Keine globalen Bedingungen

################################################################################

Action-Block mit Prioritäten

################################################################################
action:

  • choose:

    1) Feueralarm → Rolladen komplett öffnen

    • conditions:
      • condition: state
        entity_id: !input input_boolean_feueralarm
        state: “on”
        sequence:
      • service: script.rollo_setzen_mit_testmodus
        data:
        entity_rollo: !input entity_rollo
        entity_rollo_soll: !input entity_rollo_soll
        position: !input position_offen

    2) Raussperrschutz (Tür offen + Anwesenheit) → keine Aktion

    • conditions:
      • condition: template
        value_template: >
        {% if ist_tuer and is_state(anwesend,‘on’) %}
        {{ (fl_l and is_state(fl_l,‘on’)) or (fl_r and is_state(fl_r,‘on’)) }}
        {% else %}
        false
        {% endif %}
        sequence:

    3) Hagelwarnung → Rolladen öffnen - Kunststoff-Rollos

    • conditions:
      • condition: state
        entity_id: !input input_boolean_hagelwarnung
        state: “on”
        sequence:
      • service: script.rollo_setzen_mit_testmodus
        data:
        entity_rollo: !input entity_rollo
        entity_rollo_soll: !input entity_rollo_soll
        position: !input position_offen

    4) Regen erwartet (Regen + Fenster offen) → Rolladen schließen

    • conditions:
      • condition: state
        entity_id: !input input_boolean_regen_erwartet
        state: “on”
      • condition: template
        value_template: >
        {% set open_l = fl_l and is_state(fl_l, ‘on’) %}
        {% set open_r = fl_r and is_state(fl_r, ‘on’) %}
        {{ open_l or open_r }}
        sequence:
      • service: script.rollo_setzen_mit_testmodus
        data:
        entity_rollo: !input entity_rollo
        entity_rollo_soll: !input entity_rollo_soll
        position: !input position_geschlossen

    5) Abwesenheitsschutz (Fenster offen + niemand da) → Sichtschutz - niemand sieht die offenen Fenster

    • conditions:
      • condition: template
        value_template: >
        {% set open_l = fl_l and is_state(fl_l,‘on’) %}
        {% set open_r = fl_r and is_state(fl_r,‘on’) %}
        {% set away = is_state(anwesend,‘off’) %}
        {{ away and (open_l or open_r) }}
        sequence:
      • service: script.rollo_setzen_mit_testmodus
        data:
        entity_rollo: !input entity_rollo
        entity_rollo_soll: !input entity_rollo_soll
        position: !input position_sichtschutz

    6) Sonnenschutz (>20 °C + direkte Sonne) → Sichtschutz

    • conditions:
      • condition: state
        entity_id: !input input_boolean_automatik_aktiv
        state: “on”

      • condition: template
        value_template: >
        {% set temp = states(temp_sensor) | float(0) %}
        {% set ausrichtung = ausrichtung | float %}
        {% set az = state_attr(‘sun.sun’,‘azimuth’) | float(0) %}
        {% set diff = (((ausrichtung - az + 180) % 360) - 180) | abs %}
        {% set limit = strptime(‘18:00’, ‘%H:%M’).time() %}
        {% set jetzt = now().time() %}
        {{ temp > 20 and diff < 60 and jetzt <= limit }}
        sequence:

      • choose:

        • conditions:
          • condition: template
            value_template: >
            {{ katzenklappe and (not is_state(katzen_anwesend, ‘on’)) }}
            sequence:
          • service: script.rollo_setzen_mit_testmodus
            data:
            entity_rollo: !input entity_rollo
            entity_rollo_soll: !input entity_rollo_soll
            position: !input position_katzenklappe

        default:

        • service: script.rollo_setzen_mit_testmodus
          data:
          entity_rollo: !input entity_rollo
          entity_rollo_soll: !input entity_rollo_soll
          position: !input position_sichtschutz

    7) Privatsphäre (Dunkelheit unter Schwelle) → Sichtschutz - niemand kann in beleutete Räume schauen

    • conditions:
      • condition: state
        entity_id: !input input_boolean_automatik_aktiv
        state: “on”
      • condition: numeric_state
        entity_id: !input sensor_helligkeit
        below: !input lux_schwelle_privatsphaere
        sequence:
      • choose:
        • conditions:
          • condition: template
            value_template: >
            {{ katzenklappe and (not is_state(katzen_anwesend, ‘on’)) }}
            sequence:
          • service: script.rollo_setzen_mit_testmodus
            data:
            entity_rollo: !input entity_rollo
            entity_rollo_soll: !input entity_rollo_soll
            position: !input position_katzenklappe
          • action: input_text.set_value
            target:
            entity_id: input_text.aktueller_modus
            data:
            text: “Privatsphäre (Katzenklappe)”
            default:
        • service: script.rollo_setzen_mit_testmodus
          data:
          entity_rollo: !input entity_rollo
          entity_rollo_soll: !input entity_rollo_soll
          position: !input position_sichtschutz

    8) Spätes Hochfahren auch bei Helligkeit (Langschläfermodus) Mo-Fr

    • conditions:
      • condition: state
        entity_id: !input input_boolean_automatik_aktiv
        state: “on”

      • condition: template
        value_template: >
        {% set wd = now().weekday() %}
        {% set is_wt = wd in [0,1,2,3,4] %}
        {% set zeit_auf_str = (zeit_auf_wt if is_wt else zeit_auf_we) %}
        {% set zeit_auf = strptime(zeit_auf_str, ‘%H:%M’).time() %}
        {% set jetzt = now().time() %}
        {% set lx = states(lux_sensor) | float %}
        {{ zeitlicht|bool and ((lx > lux_schwelle) and (jetzt <= zeit_auf)) }}
        sequence:

      • choose:

        • conditions:
          • condition: template
            value_template: >
            {{ katzenklappe and (not is_state(katzen_anwesend,‘on’)) }}
            sequence:
          • service: script.rollo_setzen_mit_testmodus
            data:
            entity_rollo: !input entity_rollo
            entity_rollo_soll: !input entity_rollo_soll
            position: !input position_katzenklappe

        default:

        • service: script.rollo_setzen_mit_testmodus
          data:
          entity_rollo: !input entity_rollo
          entity_rollo_soll: !input entity_rollo_soll
          position: !input position_sichtschutz

    9) Frühes Runterfahren auch bei Helligkeit (Kinder ins Bett Modus) So-Do

    • conditions:
      • condition: state
        entity_id: !input input_boolean_automatik_aktiv
        state: “on”
      • condition: template
        value_template: >
        {% set wd = now().weekday() %}
        {% set is_wt = wd in [0,1,2,3,6] %}
        {% set zeit_zu_str = (zeit_zu_wt if is_wt else zeit_zu_we) %}
        {% set zeit_zu = strptime(zeit_zu_str, ‘%H:%M’).time() %}
        {% set jetzt = now().time() %}
        {% set lx = states(lux_sensor) | float %}
        {{ zeitlicht|bool and ((lx > lux_schwelle) and (jetzt >= zeit_zu)) }}
        sequence:
      • choose:
        • conditions:
          • condition: template
            value_template: >
            {{ katzenklappe and (not is_state(katzen_anwesend,‘on’)) }}
            sequence:
          • service: script.rollo_setzen_mit_testmodus
            data:
            entity_rollo: !input entity_rollo
            entity_rollo_soll: !input entity_rollo_soll
            position: !input position_katzenklappe
            default:
        • service: script.rollo_setzen_mit_testmodus
          data:
          entity_rollo: !input entity_rollo
          entity_rollo_soll: !input entity_rollo_soll
          position: !input position_sichtschutz

    ################################################################################

    Default-Block: Manueller Eingriff → Automatik aus

    ################################################################################
    default:

    • choose:
      • conditions:
        sequence:
        • service: script.rollo_setzen_mit_testmodus
          data:
          entity_rollo: !input entity_rollo
          entity_rollo_soll: !input entity_rollo_soll
          position: !input position_offen
Automation: Rollo: Fahre auf Sollwert bei Automatik-(Re)Aktivierung
alias: "Rollo: Fahre auf Sollwert bei Automatik-Aktivierung"
description: >
  Wenn ein Automatikmodus aktiviert wird, fährt das zugehörige Rollo auf den
  Sollwert.
triggers:
  - entity_id:
      - input_boolean.rollo_automation_automodus_arbeitszimmer_nord
      - input_boolean.rollo_automation_automodus_badezimmer_nord
      - input_boolean.rollo_automation_automodus_badzimmer_ost
      - input_boolean.rollo_automation_automodus_esszimmer_nord
      - input_boolean.rollo_automation_automodus_esszimmer_west
      - input_boolean.rollo_automation_automodus_gaste_wc_ost
      - input_boolean.rollo_automation_automodus_gaste_wc_sud
      - input_boolean.rollo_automation_automodus_kuche_nord
      - input_boolean.rollo_automation_automodus_kuche_ost
      - input_boolean.rollo_automation_automodus_schlafzimmer_nord
      - input_boolean.rollo_automation_automodus_treppenhaus_kg_ost
      - input_boolean.rollo_automation_automodus_treppenhaus_og_ost
      - input_boolean.rollo_automation_automodus_wohnzimmer_sud
      - input_boolean.rollo_automation_automodus_wohnzimmer_west
    to: "on"
    trigger: state
conditions: []
actions:
  - variables:
      base: >-
        {{ trigger.entity_id.split('.')[-1] |
        replace('rollo_automation_automodus_', '') }}
      cover: "{{ 'cover.rollo_' ~ base }}"
      soll: "{{ states('input_number.rollo_automodus_soll_' ~ base) | int(0) }}"
  - data:
      entity_id: "{{ cover }}"
      position: "{{ soll }}"
    action: cover.set_cover_position
mode: parallel
Automation: Rollo: AutomatikModus auf ManuModus nach 30s Abweichung
alias: "Rollo: Automatik beenden nach 30s Abweichung"
description: >
  Wenn ein Rollo länger als 30 Sekunden vom Sollwert abweicht und der
  Automatikmodus aktiv ist, wird er deaktiviert.
triggers:
  - seconds: /30
    trigger: time_pattern
conditions: []
actions:
  - variables:
      cover_entities:
        - cover.rollo_arbeitszimmer_nord
        - cover.rollo_badezimmer_nord
        - cover.rollo_badzimmer_ost
        - cover.rollo_esszimmer_nord
        - cover.rollo_esszimmer_west
        - cover.rollo_gaste_wc_ost
        - cover.rollo_gaste_wc_sud
        - cover.rollo_kuche_nord
        - cover.rollo_kuche_ost
        - cover.rollo_schlafzimmer_nord
        - cover.rollo_treppenhaus_kg_ost
        - cover.rollo_treppenhaus_og_ost
        - cover.rollo_wohnzimmer_sud
        - cover.rollo_wohnzimmer_west
  - repeat:
      for_each: "{{ cover_entities }}"
      sequence:
        - variables:
            cover: "{{ repeat.item }}"
            base: "{{ cover.split('rollo_')[-1] }}"
            soll: >-
              {{ states('input_number.rollo_automodus_soll_' ~ base) | int(-1)
              }}
            ist: "{{ state_attr(cover, 'current_position') | int(-1) }}"
            auto_status: "{{ states('input_boolean.rollo_automation_automodus_' ~ base) }}"
            last_changed: >-
              {{ state_attr(cover, 'current_position') is not none and
              state_attr(cover, 'current_position') }}
        - if:
            - condition: template
              value_template: "{{ ist != soll }}"
            - condition: template
              value_template: "{{ auto_status == 'on' }}"
            - condition: template
              value_template: >
                {% set changed = state_attr(cover, 'current_position') %} {% set
                last = states[cover].last_changed %} {{ (now() -
                last).total_seconds() > 30 }}
          then:
            - target:
                entity_id: "{{ 'input_boolean.rollo_automation_automodus_' ~ base }}"
              action: input_boolean.turn_off
              data: {}

Skript: Rollo setzen inkl. einem Testmodus
alias: Rollo setzen mit Testmodus
description: >
  Setzt den Sollwert und optional die echte Rollo-Position – aber nur, wenn sich
  der Zielwert vom aktuellen unterscheidet. Berücksichtigt den zentralen
  Testmodus-Helfer: input_boolean.intelligente_rollosteuerung_testmodus
fields:
  position:
    name: Zielposition
    description: Gewünschte Position (0–100)
    required: true
    selector:
      number:
        min: 0
        max: 100
        unit_of_measurement: "%"
  entity_rollo:
    name: Rollo-Entity (cover)
    description: Die echte Rollladen-Entity
    required: true
    selector:
      entity:
        domain: cover
  entity_rollo_soll:
    name: Sollwert-Entity (input_number)
    description: Die Input-Number für die Zielposition
    required: true
    selector:
      entity:
        domain: input_number
sequence:
  - alias: Nur ausführen, wenn sich der Sollwert unterscheidet
    condition: template
    value_template: |
      {{ states(entity_rollo_soll) | float != position | float }}
  - alias: Sollwert setzen
    target:
      entity_id: "{{ entity_rollo_soll }}"
    data:
      value: "{{ position }}"
    action: input_number.set_value
  - alias: Nur wenn Testmodus deaktiviert ist → echtes Rollo setzen
    condition: state
    entity_id: input_boolean.intelligente_rollosteuerung_testmodus
    state: "off"
  - alias: Rollo-Position setzen
    target:
      entity_id: "{{ entity_rollo }}"
    data:
      position: "{{ position }}"
    action: cover.set_cover_position
mode: queued
max: 21
2 „Gefällt mir“

Tatsächlich war diese Version noch nicht ganz ausgereift.
Mittlerweile wesentlich stabiler - aber noch nicht fertig.
Sobald es fertig ist, gibt es ein Update :slight_smile:

1 „Gefällt mir“