FHEM Auto Beschattung
Um in FHEM eine automatische Beschattungslogik mit festen Uhrzeiten, Helligkeitsschwellen und einer Dämpfung (also Vermeidung von ständigen Schaltvorgängen) zu programmieren, verwendet man idealerweise das DOIF-Modul in Kombination mit einem Intervall-Timer.
🔧 Zieldefinition:
Zeitraum: täglich zwischen 11:00 und 18:00 Uhr
Lichtsensorwert:
>10.000 Lux: → Rollo1 und Rollo2 auf 60%
<8.000 Lux: → Rollo1 und Rollo2 auf 100% (hoch)
Abfrage-Intervall: alle 10 Minuten
Keine dauerhafte Umschaltung bei schwankenden Werten.
🧱 Voraussetzungen / Annahmen
Lichtsensor heißt Lichtsensor_Terrasse
Reading für Helligkeit: illuminance (häufig bei ZigBee, MQTT etc.)
Rollos heißen Rollo1 und Rollo2
DOIF-Modul ist installiert (update all + define Test DOIF {} zum Testen)
✅ Schritt-für-Schritt: DOIF für automatische Beschattung
perl
define doif_Beschattung DOIF
(
[timeofday] > "11:00" and [timeofday] < "18:00"
)
DOELSEIF
(
[timeofday] < "11:00" or [timeofday] > "18:00"
)
DOELSE
DOIF_Timer
(
[Lichtsensor_Terrasse:illuminance] > 10000
and [Rollo1:position] != 60
)
(
set Rollo1 pct 60; set Rollo2 pct 60
)
ELSEIF
(
[Lichtsensor_Terrasse:illuminance] < 8000
and [Rollo1:position] != 100
)
(
set Rollo1 pct 100; set Rollo2 pct 100
)
📌 Dieser DOIF besteht aus zwei Bereichen:
Zeitfensterprüfung ([timeofday]) – wann die Regel aktiv ist.
Timer-gesteuerte Helligkeitsprüfung im 10-Minuten-Takt (s. nächster Schritt).
⏲️ Timer hinzufügen: Alle 10 Minuten prüfen
perl
attr doif_Beschattung timerWithWait
attr doif_Beschattung timer 10:00-18:00/600
Erklärung:
timerWithWait: verhindert, dass ein Timer erneut losläuft, solange der vorherige noch läuft
timer 10:00-18:00/600: alle 600 Sekunden (10 Minuten) zwischen 10 und 18 Uhr wird die Bedingung geprüft
🧠 Zusätzliche Schutzmaßnahmen / Tipps
Füge einen Dummy-Schalter ein, um die Automatik bei Bedarf zu deaktivieren.
Nutze Rollo1:position zur Dämpfung (nur schalten, wenn sich wirklich etwas ändern muss).
Wenn deine Rollos nicht pct unterstützen, verwende set Rollo1 down / stop / pos 60 je nach Gerät.
📄 Komplettbeispiel zusammengefasst
perl
define doif_Beschattung DOIF
(
[timeofday] > "11:00" and [timeofday] < "18:00"
)
DOIF
(
[Lichtsensor_Terrasse:illuminance] > 10000
and [Rollo1:position] != 60
)
(
set Rollo1 pct 60; set Rollo2 pct 60
)
ELSEIF
(
[Lichtsensor_Terrasse:illuminance] < 8000
and [Rollo1:position] != 100
)
(
set Rollo1 pct 100; set Rollo2 pct 100
)
attr doif_Beschattung timerWithWait
attr doif_Beschattung timer 11:00-18:00/600