Loading...
Author Cloudapp
E.G.

Bewegungslicht mit Tageszeit-Helligkeit in Home Assistant: das choose-Muster (30% nachts, 70% morgens, 100% tags)

14. Juli 2026
Inhaltsverzeichnis

Ein simples Bewegungslicht im Treppenhaus ist schnell gebaut: Bewegung erkannt, Licht an, nach ein paar Minuten wieder aus. Das Problem merkt man erst nachts. Ich bin in meinem Stiegenhaus um drei Uhr morgens vom plötzlichen 100-%-Licht so geblendet worden, dass ich danach erstmal wieder wach war. Tagsüber dagegen ist gedimmtes Licht zu schwach, um die Treppe sicher zu sehen.

Die Lösung ist kein zweites Setup und kein teurer adaptive-lighting-Layer, sondern ein einziger choose:-Block in der Bewegungs-Automation, der die Helligkeit nach Tageszeit staffelt: nachts 30 %, im frühen Morgen 70 %, sonst volle 100 %. Dazu die eine Praxis-Lektion, die mir zwei Abende Debuggen gekostet hat — gegen das Flackern hilft ein längeres, nicht ein kürzeres Delay.

Warum on/off allein nicht reicht

Ein festes Helligkeitsniveau ist immer für die falsche Tageszeit eingestellt. Stellst du es auf voll, blendet es nachts. Stellst du es gedimmt, ist es am Tag zu dunkel. Genau hier setzt das Muster an: Die Bewegung bleibt der Trigger, aber wie hell das Licht angeht, entscheidet ein kurzer Zeit-Branch in den Aktionen. Kein zweiter Sensor, keine zweite Automation — nur ein choose-Block.

Schritt 1 — der choose-Block für tageszeitabhängige Helligkeit

Das Herzstück ist der choose:-Block in den Aktionen. Er prüft Bedingungen der Reihe nach von oben nach unten und nimmt den ersten Zweig, der passt; greift keiner, läuft der default. Ich nutze drei Stufen: 22:00–06:00 gedimmt auf 30 %, 06:00–08:00 mittel auf 70 %, und den Rest des Tages volle 100 %.

actions:
  - choose:
      # Spaete Nacht (22:00-06:00): gedimmt, blendet nicht
      - conditions:
          - condition: time
            after: "22:00:00"
            before: "06:00:00"
        sequence:
          - action: light.turn_on
            target: { entity_id: light.stiegenhaus_eg }
            data: { brightness_pct: 30 }
      # Frueher Morgen (06:00-08:00): mittlere Helligkeit
      - conditions:
          - condition: time
            after: "06:00:00"
            before: "08:00:00"
        sequence:
          - action: light.turn_on
            target: { entity_id: light.stiegenhaus_eg }
            data: { brightness_pct: 70 }
    # Default: volle Helligkeit
    default:
      - action: light.turn_on
        target: { entity_id: light.stiegenhaus_eg }
        data: { brightness_pct: 100 }

Zwei Dinge sind wichtig. Erstens ist die Reihenfolge entscheidend: Der Nacht-Zweig steht oben, weil seine Zeitfenster nicht mit dem Morgen-Zweig überlappen — bei überlappenden Fenstern gewinnt der erste Treffer. Zweitens ist die time-Bedingung über Mitternacht hinweg korrekt: after "22:00:00" / before "06:00:00" deckt die Nacht richtig ab, weil Home Assistant das als zusammenhängendes Fenster über den Tageswechsel behandelt. light.stiegenhaus_eg ersetzt du durch deine eigene Lichtentität.

Schritt 2 — sauber wieder ausschalten

Der zweite Teil ist das Ausschalten. Die meisten Bewegungsmelder melden „keine Bewegung mehr“ recht schnell, sobald man still steht. Wenn du direkt darauf ausschaltest, springt das Licht ständig an und aus, sobald jemand auf der Treppe kurz innehält oder im Flur steht und telefoniert. Der for:-Filter beim Off-Trigger wartet, bis der Sensor eine durchgehende Zeit lang nichts gesehen hat.

triggers:
  - trigger: state
    entity_id: binary_sensor.bewegungsmelder_stiegenhaus_eg
    from: "on"
    to: "off"
    # Flacker-Fix: lieber 5 Min als 1 Min - kurze Delays lassen das Licht
    # bei stillem Sitzen an/aus springen
    for:
      minutes: 5
actions:
  - action: light.turn_off
    target: { entity_id: light.stiegenhaus_eg }

Dieser Block ist die separate Ausschalt-Automation (oder der Off-Trigger derselben Automation). Der Trigger feuert nur, wenn der Sensor 5 Minuten lang ununterbrochen auf „off“ steht — bewegt sich in der Zeit nochmal jemand, wird der Timer zurückgesetzt und das Licht bleibt an.

Der Flacker-Fix: Delay erhöhen, nicht senken

Das ist die Lektion, die intuitiv falsch wirkt. Wenn das Licht flackert — also rhythmisch an- und ausgeht, während jemand ruhig dasitzt oder die Treppe langsam hochgeht — ist der erste Reflex, das Ausschalt-Delay zu verkürzen, damit es schneller reagiert. Genau das macht es schlimmer. PIR-Bewegungsmelder erkennen Wärmebewegung; sitzt du still, fällt der Sensor auf „off“, du atmest oder greifst zum Glas und er geht wieder auf „on“. Ein kurzes Delay lässt das Licht diesem Zappeln folgen.

Die Lösung ist ein längeres for:-Delay. Mit 5 Minuten überbrückt der Timer die toten Phasen, in denen der PIR keine Bewegung sieht, obwohl noch jemand da ist. Lieber das Licht ein paar Minuten zu lang an als ein blinkendes Treppenhaus.

Sinnvolle Delays je Raumtyp

Die richtige for:-Dauer hängt davon ab, wie lange man sich typischerweise im Raum bewegungsarm aufhält. Im Treppenhaus oder Durchgangsflur reichen 2–3 Minuten, weil man dort selten lange still steht. In einem Raum, in dem man sitzt — Arbeitszimmer, Lesesitz — gehst du eher auf 8–10 Minuten hoch, sonst geht das Licht beim konzentrierten Arbeiten aus. Mein Stiegenhaus läuft auf 5 Minuten als guter Mittelwert; das ist großzügig genug gegen Flackern und kurz genug, dass kein Licht stundenlang in einem leeren Treppenhaus brennt.

Erweitern: nur bei Dunkelheit, oder mit mehr Stufen

Wer das Licht tagsüber bei hellem Tageslicht gar nicht erst anschalten will, ergänzt eine sun-Bedingung (sun.sun = below_horizon) oder einen Helligkeitssensor als zusätzliche Bedingung am Einschalt-Trigger. Das choose-Pattern selbst skaliert beliebig: Du kannst weitere Zeitfenster ergänzen (z. B. eine Mittags-Stufe) oder pro Wochentag andere Helligkeiten fahren. Wenn dich interessiert, wie man dieselben Bewegungsmelder für Anwesenheits-Heuristik nutzt, schau in den „Letzte Bewegung“-Sensor — er baut auf denselben Triggern auf.

Häufige Fragen

Warum ein choose-Block statt mehrerer Automationen?

Du könntest für jede Tageszeit eine eigene Automation mit eigener time-Bedingung bauen, aber das verstreut die Logik auf drei Stellen und macht Änderungen fehleranfällig. Der choose-Block hält den gesamten Tageszeit-Branch in einer Automation zusammen — ein Blick, eine Stelle zum Anpassen. Genau dafür ist choose: gedacht: mehrere sich ausschließende Zweige unter einem Trigger.

Mein Licht flackert immer noch — was tun?

Erst das for:-Delay weiter erhöhen (z. B. auf 8–10 Minuten) und schauen, ob es verschwindet — meist ist es das. Bleibt es, liegt es oft an der Sensor-Hardware: Manche PIR-Melder haben eine eigene Cool-down-/Blockzeit, die zu kurz steht, oder der Erfassungsbereich ist so eng, dass schon eine kleine Drehung aus dem Feld fällt. Dann hilft Sensor-Platzierung oder ein mmWave-Presence-Sensor, der auch ruhige Anwesenheit erkennt.

Kann ich nachts statt 30 % auch ganz aus lassen?

Ja — ersetze im Nacht-Zweig einfach das light.turn_on durch gar keine Aktion oder lass den Zweig weg, dann greift der default nicht (weil der Trigger trotzdem feuert). Sauberer ist, den Nacht-Zweig zu behalten und dort sehr niedrig zu dimmen (z. B. 5–10 %): genug, um die Stufen zu sehen, ohne wach zu werden. Komplett dunkel ist auf einer Treppe nachts ein Sicherheitsrisiko.

Funktioniert das mit jedem Licht oder nur mit dimmbaren?

brightness_pct setzt voraus, dass die Lichtentität Dimmen unterstützt. Bei einem reinen Ein/Aus-Schalter ignoriert Home Assistant den Helligkeitswert und schaltet nur an. Dann bringt die Tageszeit-Staffelung wenig — in dem Fall lohnt sich ein dimmbares Leuchtmittel oder ein Dimm-Aktor, gerade im Treppenhaus, wo die nächtliche Blendung das eigentliche Problem ist.

Verwandte Artikel