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 
Hier die Bescheibung des Blueprints:
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.
Features (Funktionen)
Die Automation bietet eine Vielzahl an durchdachten Funktionen:
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
Intelligente Entscheidungslogik mit Prioritäten
- Feueralarm → Rollladen vollständig öffnen
- Raussperrschutz → Keine Aktion bei offener Tür und Anwesenheit
- Hagelwarnung → Rollladen öffnen
- Regen bei offenem Fenster → Rollladen schließen
- Abwesenheitsschutz → Sichtschutz bei offenem Fenster und niemand zuhause
- Sonnenschutz → Temperatur + Sonnenstand → Sichtschutz oder Katzenklappenhöhe
- Privatsphäre → Bei Dunkelheit → Sichtschutz oder Katzenklappenhöhe
- Zeit+Licht morgens → Spätes Hochfahren auch bei Helligkeit (Langschläfermodus)
- Zeit+Licht abends → Frühes Runterfahren auch bei Helligkeit (Kinder ins Bett Modus)
Trigger
- Änderungen an Sensoren, Zuständen oder alle 5 Minuten
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:
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