Rollladen-Steuerung pro Raum: Taster, Fenster, Kälte und Regen
Ein Rollladen im Wohnraum soll mehrere Dinge auf einmal können: auf Tastendruck fahren, nicht herunterfahren, solange das Fenster offen ist, bei Kälte oder Regen das offene Fenster schützen und morgens in einer festgelegten Stellung stehen. Wenn jede dieser Regeln eine eigene Automation ist, kommen sie sich in die Quere. Deshalb steckt bei mir die gesamte Logik eines Raumes in einer einzigen Automation. Hier als Beispiel die Küche. Die übrigen Räume sind nach derselben Vorlage entstanden und unterscheiden sich in den Entitäten.
Was du brauchst
- Einen Rollladen als
cover-Entität mit Positionsangabe (current_position) - Einen Fensterkontakt oder eine Gruppe aus Fensterkontakten des Raumes (
binary_sensor, an = offen) - Einen Temperatursensor im Raum und einen Regensensor im Freien (bei mir ein Sensor vom Typ Wasserleck im Garten)
- Drei
input_buttonpro Raum für hoch, Spalt und runter. Wandschalter, Dashboard oder andere Automationen drücken diese Taster - Pro Raum zwei Merker-
input_boolean: „öffnen angefordert“ und „schließen vorgemerkt“ - Pro Raum zwei Schalter-
input_boolean: einen, der die Aktion eine Stunde vor Sonnenaufgang zulässt, und einen für die Regenüberwachung
So funktioniert es
Alle Auslöser landen in einer Automation und werden über eine id unterschieden. Weil die Automation im Modus restart läuft, bricht ein neues Ereignis einen noch laufenden Durchlauf ab. Der Kern ist ein choose mit einem Zweig pro Auslöser.
Die drei Taster sind der direkte Weg. „Hoch“ setzt den Merker „öffnen angefordert“, löscht „schließen vorgemerkt“ und fährt hoch. „Spalt“ löscht beide Merker und fährt auf die Position 16, bei mir ein schmaler Spalt. „Runter“ löscht „öffnen angefordert“ und schließt sofort, wenn das Fenster zu ist. Ist es offen, passiert nichts außer dem Merken: „schließen vorgemerkt“ geht an.
Das Fenster wirkt in beide Richtungen. Geht es auf und steht der Rollladen unter 90 Prozent, fährt der Rollladen hoch und merkt sich, dass er später wieder herunter soll. Die Bedingung steht mitten im Zweig: Ist der Rollladen schon oben, bricht der Zweig dort ab und es wird nichts vorgemerkt. Geht das Fenster zu, wird nachgeholt, was vorgemerkt war: Steht „schließen vorgemerkt“ an und wurde nicht inzwischen „hoch“ gedrückt, schließt der Rollladen. Wurde in der Zwischenzeit „hoch“ gedrückt, wird nur der Merker gelöscht.
Kälte und Regen schützen das offene Fenster. Fällt die Raumtemperatur fünf Minuten lang unter 17 °C und das Fenster ist offen, schließt der Rollladen, die Merker werden gelöscht. Regen löst nach fünf Sekunden aus und wirkt nur bei offenem Fenster und eingeschalteter Regenüberwachung des Raumes. Beide Zweige löschen dabei die Merker.
Der letzte Zweig läuft eine Stunde vor Sonnenaufgang, aber nur wenn der Schalter für den Raum aktiv ist und der Rollladen nicht schon ganz geschlossen steht. Ist das Fenster offen, fährt der Rollladen auf Position 16. Ist es zu, fährt er ganz zu. In beiden Fällen werden die Merker gelöscht, das ist der Reset im Namen der Automation.
Die Automation
alias: "Rollladen: Küche (Taster, Fenster, Kälte, Regen, Reset)"
mode: restart
triggers:
- {trigger: state, entity_id: input_button.taste_rollladen_kueche_hoch, id: btn_hoch, not_to: [unknown, unavailable]}
- {trigger: state, entity_id: input_button.taste_rollladen_kueche_rille, id: btn_rille, not_to: [unknown, unavailable]}
- {trigger: state, entity_id: input_button.taste_rollladen_kueche_runter, id: btn_runter, not_to: [unknown, unavailable]}
- {trigger: state, entity_id: binary_sensor.gruppe_fenster_kueche, id: fenster_auf, to: "on"}
- {trigger: state, entity_id: binary_sensor.gruppe_fenster_kueche, id: fenster_zu, to: "off"}
- trigger: numeric_state
entity_id: sensor.kueche_temperatur
below: 17
for: {minutes: 5}
id: temp_kalt
- trigger: state
entity_id: binary_sensor.regensensor_garten
to: "on"
for: {seconds: 5}
id: regen_on
- trigger: sun
event: sunrise
offset: "-01:00:00"
id: sunrise_minus_1h
actions:
- choose:
# Eine Stunde vor Sonnenaufgang
- conditions:
- {condition: trigger, id: sunrise_minus_1h}
- {condition: state, entity_id: input_boolean.sonnenaufgang_kueche_rille_aktiv, state: "on"}
- condition: not
conditions:
- {condition: state, entity_id: cover.rollladen_kueche, state: closed}
sequence:
- choose:
- conditions:
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "on"}
sequence:
- action: input_boolean.turn_off
target:
entity_id: [input_boolean.rollladen_kueche_oeffnen_angefordert, input_boolean.rollladen_kueche_schliessen_vorgemerkt]
- action: cover.set_cover_position
data: {position: 16}
target: {entity_id: cover.rollladen_kueche}
- conditions:
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "off"}
sequence:
- action: input_boolean.turn_off
target:
entity_id: [input_boolean.rollladen_kueche_oeffnen_angefordert, input_boolean.rollladen_kueche_schliessen_vorgemerkt]
- action: cover.close_cover
target: {entity_id: cover.rollladen_kueche}
# Regen: nur bei offenem Fenster und aktiver Regenüberwachung
- conditions:
- {condition: trigger, id: regen_on}
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "on"}
- {condition: state, entity_id: input_boolean.regenueberwachung_kueche_rollladen_runter, state: "on"}
sequence:
- action: input_boolean.turn_off
target:
entity_id: [input_boolean.rollladen_kueche_schliessen_vorgemerkt, input_boolean.rollladen_kueche_oeffnen_angefordert]
- action: cover.close_cover
target: {entity_id: cover.rollladen_kueche}
# Kälte: nur bei offenem Fenster
- conditions:
- {condition: trigger, id: temp_kalt}
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "on"}
sequence:
- action: input_boolean.turn_off
target:
entity_id: [input_boolean.rollladen_kueche_schliessen_vorgemerkt, input_boolean.rollladen_kueche_oeffnen_angefordert]
- action: cover.close_cover
target: {entity_id: cover.rollladen_kueche}
# Taster hoch
- conditions:
- {condition: trigger, id: btn_hoch}
sequence:
- {action: input_boolean.turn_on, target: {entity_id: input_boolean.rollladen_kueche_oeffnen_angefordert}}
- {action: input_boolean.turn_off, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
- {action: cover.open_cover, target: {entity_id: cover.rollladen_kueche}}
# Taster Rille (Spaltposition 16 %)
- conditions:
- {condition: trigger, id: btn_rille}
sequence:
- action: input_boolean.turn_off
target:
entity_id: [input_boolean.rollladen_kueche_oeffnen_angefordert, input_boolean.rollladen_kueche_schliessen_vorgemerkt]
- action: cover.set_cover_position
data: {position: 16}
target: {entity_id: cover.rollladen_kueche}
# Taster runter: bei offenem Fenster nur vormerken
- conditions:
- {condition: trigger, id: btn_runter}
sequence:
- {action: input_boolean.turn_off, target: {entity_id: input_boolean.rollladen_kueche_oeffnen_angefordert}}
- choose:
- conditions:
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "on"}
sequence:
- {action: input_boolean.turn_on, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
- conditions:
- {condition: state, entity_id: binary_sensor.gruppe_fenster_kueche, state: "off"}
sequence:
- {action: cover.close_cover, target: {entity_id: cover.rollladen_kueche}}
- {action: input_boolean.turn_off, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
# Fenster geht auf: Rollladen hoch und Schließen vormerken
- conditions:
- {condition: trigger, id: fenster_auf}
sequence:
- condition: numeric_state
entity_id: cover.rollladen_kueche
attribute: current_position
below: 90
- {action: cover.open_cover, target: {entity_id: cover.rollladen_kueche}}
- {action: input_boolean.turn_on, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
# Fenster geht zu: vorgemerktes Schließen nachholen
- conditions:
- {condition: trigger, id: fenster_zu}
sequence:
- choose:
- conditions:
- {condition: state, entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt, state: "on"}
- {condition: state, entity_id: input_boolean.rollladen_kueche_oeffnen_angefordert, state: "off"}
sequence:
- {action: cover.close_cover, target: {entity_id: cover.rollladen_kueche}}
- {action: input_boolean.turn_off, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
- conditions:
- {condition: state, entity_id: input_boolean.rollladen_kueche_oeffnen_angefordert, state: "on"}
sequence:
- {action: input_boolean.turn_off, target: {entity_id: input_boolean.rollladen_kueche_schliessen_vorgemerkt}}
default: []Die Bad-Variante weicht an zwei Stellen ab: Dort fährt der Rollladen beim Schließen auf Position 16 statt ganz zu, wenn die Sonne auf die Fassade steht. Das betrifft die Zweige „runter“ (Fenster zu) und „Fenster zu“. Wie die Sonnenbedingung entsteht, steht im nächsten Beitrag zum Sonnenschutz.
# Variante für Räume mit Sonnenseite (hier: Bad EG, Südwestfassade):
# statt cover.close_cover im Zweig "btn_runter" (Fenster zu) und im Zweig "fenster_zu"
- if:
- {condition: state, entity_id: binary_sensor.rollladen_sonne_suedwest, state: "on"}
then:
- action: cover.set_cover_position
data: {position: 16}
target: {entity_id: cover.rollladen_bad_eg}
else:
- action: cover.close_cover
target: {entity_id: cover.rollladen_bad_eg}Anpassen
- Ersetze die Entitäten für Rollladen, Fenster, Temperatur, Taster und Helfer. Die Namen folgen bei mir dem Muster
…_kueche_…, sodass sich die Automation pro Raum per Suchen und Ersetzen kopieren lässt. - Die Schwellen 17 °C, 5 Minuten, 5 Sekunden und Position 16 passen zu meinen Rollläden. Position 90 in der Fensterbedingung heißt: ab 90 Prozent offen gilt der Rollladen als oben.
- Wer keinen Regensensor hat, streicht den Regen-Zweig samt Trigger. Ohne Kältebedingung genauso.
Stolpersteine
Der Zweig „Fenster geht auf“ hat die Positionsbedingung mitten in der Sequenz, nicht in conditions. Scheitert sie, endet der Durchlauf an dieser Stelle, die folgenden Aktionen laufen nicht. An den Tastern schließt not_to: [unknown, unavailable] Wechsel von und nach diesen Zuständen aus. Und weil die Automation restart nutzt, dürfen die Zweige keine langen Wartezeiten enthalten. Bei mir steht darin keine einzige.
Unterstützen
Diese Tools entstehen in meiner Freizeit und bleiben kostenlos, offen und cloud-frei. Wenn dir eins davon einen Nachmittag gespart hat, freue ich mich über einen Kaffee oder ein Stück Pizza.
Kaffee oder PizzaWeitere Beiträge
- Stromausfall erkennen und Geräte wiederherstellen in Home Assistant Nach einem Stromausfall booten Lampen und Steckdosen in zufälligen Zuständen. Drei Erkennungswege, ein gemeinsames Script und ein Wiederherstellungsfenster bringen alles wieder in den gewünschten Zustand.
- Rauchmelder löst aus: Alle Rollläden fahren hoch (Home Assistant) Bei Rauchalarm sollen die Rollläden im ganzen Haus hochfahren, damit Fenster als Fluchtweg frei sind. Die Automation ist kurz – aber ein fehlendes „from“ im Trigger entscheidet darüber, ob sie im Ernstfall überhaupt feuert.
- Marstek Modbus Suite 3.0.1 und 3.1-Beta: Ladeprognose und Registerprüfung 3.0.1 repariert den Start nach einem nicht erreichbaren Speicher. Die 3.1-Betas planen „Zeit bis voll“ in der Reihenfolge des BMS und prüfen die Registerkarten von Venus D, A und E v3 gegen die Firmware.