Lighting Scenes: Evening, Night, Movie, Guests, Cleaning, and Arriving Home
Lighting Scenes: Evening, Night, Movie, Guests, Cleaning, and Arriving Home
You have the entities from Lesson 8 and manual control from Lesson 9. Now you're combining them into scenes: a safe, predictable effect. A scene describes what the light should look like. Automation, in later lessons, will decide when to trigger that scene. If you need conditions, sequencing, or a safety check, you use a script.
We're not yet building motion-based automation or schedules: that's Lessons 11 through 13. Today you're building manually triggered scenes: from a remote, a button, or the dashboard. The light_mode helper records the last deliberately chosen mode. The global lighting_automation_enabled helper stays off until Lesson 11: manual scenes neither turn it on nor off. Further on I'll shorten Home Assistant to HA.
Plan on about 110 to 120 minutes.
This lesson's rule
A scene is a snapshot of target states, not a procedure with conditions.
Start with one local Evening scene. Blinds with safety lockouts: only through a script.
A real-life problem: "turn on evening": what does that mean?
You say: "Turn on evening." A household member turns the ceiling light to 100% and switches off the floor lamp. You wanted the ceiling at 40%, a warm color, and the hallway at 15%. The smart home didn't fail: you two never had a shared definition of the scene.
Scenes solve the shared-language problem: which lamps are lit, which are off, what brightness, what white color temperature, which rooms are covered. Automation says when. A scene says what it should look like.
Scene, script, automation
A scene: target states for entities. There's no delay, no choose, and no extra steps once entities are set. A scene's entity is stateless: it records the time of the last activation, not an "is this scene active" state. There's no scene.turn_off: to end Movie mode, you trigger a different scene or manually change the lights.
A script: a procedure: ordering, conditions, safely closing a blind, then a light scene.
An automation: a trigger and a response. A good pattern for later: a trigger → a condition on the automation → scene.turn_on.
A scene's entity remembers the time it was last triggered, but doesn't check whether every lamp still matches the scene. To record a logical mode, you use a separate helper.
A plain scene doesn't restore a previous state. Dynamically capturing state (scene.create) is a separate, more advanced technique.
In older guides you'll find color_temp in mireds. In current Home Assistant, use color_temp_kelvin, e.g. 2700K for warm light or 4000K for neutral. Check the range in the min_color_temp_kelvin and max_color_temp_kelvin attributes.
In the text we talk in percentages (the living room at 40%). In scene YAML, brightness is on a 0-255 scale: 10% ≈ 26, 25% ≈ 64, 40% ≈ 102, 50% ≈ 128, 80% ≈ 204, 100% = 255.
The light_mode helper: the last deliberately chosen mode
normal isn't a scene. It means no special Movie, Night, Guests, or Cleaning mode is in effect. It doesn't pretend to restore the state from before a scene.
input_select:
light_mode:
name: "Light mode"
icon: mdi:lightbulb-group
options:
- normal
- evening
- night
- movie
- guests
- cleaning
- away
Don't set initial: normal: after an HA restart the helper would revert to that value regardless of the mode before the restart. Without initial, HA restores the previous state. That restored state can also be stale relative to the physical lamps: the helper is logical memory, not confirmation.
For simple lighting scenes, we recommend including the helper as part of the scene's entity list. That way, a scene triggered from the dashboard, a remote, or an automation always sets the mode. An alternative: a script with scene.turn_on plus input_select.select_option. Don't mix both methods by accident.
input_select.light_mode doesn't continuously check whether every lamp still matches the scene. If a household member later changes one lamp by hand, the helper can still show "evening."
The global lighting_automation_enabled controls motion, schedules, and sunset logic: it doesn't block the manual Evening or Movie scene, or a remote by the bed. Manual scenes don't change this helper.
A light scene has no safety conditions. If Movie mode is also supposed to close a blind, build a script that first checks the patio lockout, the door sensor, window-cleaning mode, and entity availability. Only afterward does it move the blind and trigger the light scene.
Step by step: your first Evening scene
Start with one room: the living room. Don't start with the whole house. For a beginner, the order is: build the first scene in the UI → verify it works → view the generated YAML → write YAML by hand later.
After creating the scene in the UI: review the entity list, remove anything the scene shouldn't control (a blind, a media player, technical entities), and check every attribute. The "Evening: living room" scene covers the living room: it doesn't turn off private rooms without agreement.
Check whether configuration.yaml already has a scene: section, or scene: !include scenes.yaml. Don't add a second key with the same name. After YAML changes: check the configuration → scene.reload → test in Developer Tools. A full restart isn't the first step.
- id: "living_room_evening"
name: "Evening: living room"
icon: mdi:weather-sunset
entities:
input_select.light_mode: "evening"
light.living_room_ceiling:
state: "on"
brightness: 102
color_temp_kelvin: 2700
light.living_room_lamp:
state: "on"
brightness: 64
color_temp_kelvin: 2700
light.kitchen_counter:
state: "on"
brightness: 128
color_temp_kelvin: 3000
- action: scene.turn_on
target:
entity_id: scene.living_room_evening
data:
transition: 3
scene.turn_on supports transition. The transition applies to light entities, and they have to support the feature themselves: some lamps will ignore the parameter, and a group can arrive unevenly. That doesn't automatically require a script.
The Night scene: a night mode, not a global automation shutoff
Night sets light_mode = night and turns off the daytime zones. It doesn't turn off global automation: gentle hallway, bathroom, and stairway lights can still work at night (Lesson 11). Don't turn the bathroom on permanently in the scene: motion will turn it on later at low brightness. A scene has no "turn off unless someone's there" condition: that requires a script or an automation.
- id: "night_home"
name: "Night"
icon: mdi:weather-night
entities:
input_select.light_mode: "night"
light.bedroom_ceiling: "off"
light.bedroom_lamp:
state: "on"
brightness: 20
color_temp_kelvin: 2200
light.living_room_ceiling: "off"
light.living_room_lamp: "off"
light.kitchen_counter: "off"
light.hallway: "off"
light.bathroom_ceiling: "off"
Movie: a light scene plus a script for the blind's conditions
The Movie scene sets only the lights: bias lighting behind the screen (not aimed at eyes or the TV), everything else in the living room off. Neutral or slightly warm white, not aggressive RGB. The blind doesn't belong in the light scene.
- id: "living_room_movie"
name: "Movie: living room"
icon: mdi:movie-open
entities:
input_select.light_mode: "movie"
light.living_room_ceiling: "off"
light.living_room_lamp: "off"
light.living_room_tv_strip:
state: "on"
brightness: 51
color_temp_kelvin: 2700
light.hallway:
state: "on"
brightness: 13
living_room_movie:
alias: "Movie: living room"
description: >
Sets the movie lighting. Only closes the blind once
the safety conditions are met.
icon: mdi:movie-open
mode: single
sequence:
- action: scene.turn_on
target:
entity_id: scene.living_room_movie
data:
transition: 2
- if:
- condition: state
entity_id: input_boolean.patio_blinds_lockout
state: "off"
- condition: state
entity_id: input_boolean.window_cleaning_mode
state: "off"
- condition: state
entity_id: binary_sensor.patio_door
state: "off"
- condition: template
value_template: >
{{ states('cover.living_room_blind')
in ['open', 'closed', 'opening', 'closing'] }}
then:
- action: cover.close_cover
target:
entity_id: cover.living_room_blind
The helper in a scene or script records the user's intent, not a confirmed result: a lamp might not respond, and the mode will still read "movie." The light runs before the blind deliberately: Movie mode still works even when the blind is locked out. If you prefer "all or nothing," check the blind's conditions first and only then call scene.turn_on. This script doesn't detect a person on the patio. A cover's position: 0 = closed, 100 = open: never combine a state: open with a current_position: 0 in a way that contradicts itself.
Guests, Cleaning, Arriving, and Leaving
Guests: higher brightness in the daytime zone, light_mode: guests, so motion automation doesn't turn off the living room after a few minutes. Plan how it ends: a "Guests over" button, the Evening scene, or a dashboard status. Don't end the mode automatically at an arbitrary hour if guests are still in the house.
Cleaning: high brightness, a neutral 3500-4500K (not mandatorily a cold 6000K). Respect the entity's CCT range. For lights without CCT, remove color_temp_kelvin.
- id: "cleaning_ground_floor"
name: "Cleaning: ground floor"
icon: mdi:broom
entities:
input_select.light_mode: "cleaning"
light.living_room_ceiling:
state: "on"
brightness: 255
color_temp_kelvin: 4000
light.kitchen_ceiling:
state: "on"
brightness: 255
color_temp_kelvin: 4000
light.kitchen_counter:
state: "on"
brightness: 255
color_temp_kelvin: 4000
light.hallway:
state: "on"
brightness: 255
Arriving: a local entryway scene: the mudroom, the hallway, optionally one daytime-zone lamp. Don't set "everything else off": it could turn off lights for people already home. Arriving doesn't turn global automation back on: a household member might have deliberately turned it off.
Leaving is a procedure, not a plain scene. The lights_off scene sets only the lights. The leaving_home script triggers the scene and sets the away mode. At this stage, don't close the blinds.
- id: "lights_off"
name: "All lights off"
icon: mdi:lightbulb-off
entities:
light.living_room_ceiling: "off"
light.living_room_lamp: "off"
light.kitchen_ceiling: "off"
light.hallway: "off"
light.bedroom_ceiling: "off"
leaving_home:
alias: "Leaving home"
icon: mdi:exit-run
mode: single
sequence:
- action: scene.turn_on
target:
entity_id: scene.lights_off
- action: input_select.select_option
target:
entity_id: input_select.light_mode
data:
option: "away"
Rollout order and classification
Stage 1: a local Evening scene plus All lights off (no blinds).
Stage 2: Night, Movie.
Stage 3: Guests, Cleaning.
Stage 4: Arriving as a local entryway scene, Leaving as a script.
Local (living room Evening), zonal (ground-floor Guests), global (All lights off): global scenes need more thorough testing and household agreement. Name entities by function (light.living_room_ceiling), not by manufacturer: a scene has to survive a hardware swap.
Testing and diagnostics
Don't test only right after saving: at that point everything's already in the target state. Before triggering it: set the ceiling to 100%, turn off the floor lamp, set a different color, turn on a light the scene is meant to switch off. Trigger it from several different starting states, from a button, and from the dashboard. Check the partial effect with one lamp unavailable: it doesn't "technically break the whole scene," but the result is incomplete. scene.turn_on sends commands: it doesn't confirm every device reached its target state.
The scene doesn't run: check the entity exists, the YAML, scene.reload, a duplicate id.
One lamp doesn't respond: the entity_id, unavailable, color modes, the Kelvin range, an override by a different automation.
The mode doesn't match the light: check whether the helper is included as a scene entity, or whether manual changes turned it into just a historical label.
A scene design card
| Scene | Scope | Lights on | Lights off | Brightness | Kelvin | Mode | Trigger | Test |
|---|---|---|---|---|---|---|---|---|
| Evening | Living room | ceiling, lamp | — | 40%, 25% | 2700K | evening | remote | date |
| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
Common mistakes
A patio blind inside a light scene: it bypasses the lockouts from Lesson 7.
color_temp in mireds instead of color_temp_kelvin.
A Night scene that globally turns off automation, or Arriving that turns it back on.
A living room scene that turns off the bedroom without agreement.
Treating the mode helper as confirmation of every lamp's physical state.
Twelve separate light.turn_on actions instead of one scene.
Hands-on exercise
input_select.light_mode helper without a forced initial.☐ Build one local Evening scene for one room first.
☐ Use
color_temp_kelvin, not color_temp in mireds.☐ Add the mode helper as a scene entity, or use a script: don't mix both methods unnecessarily.
☐ Don't add the patio blind to the scene.
☐ Trigger the scene from at least three different starting states.
☐ Check the effect with one lamp unavailable.
☐ Assign the Evening scene to the remote from Lesson 9.
☐ Have a household member test the scene without you explaining the values.
☐ Only afterward build Night and Movie.
☐ Replace the Leaving scene with a script that calls the all-lights-off scene.
☐ Don't let the Arriving scene automatically turn global automation back on.
☐ Leave the global automation helper off until Lesson 11's rollout and testing.
Key takeaways
- A scene describes target states, not a sequence of actions.
- A scene is stateless and doesn't confirm every device still matches its settings.
- The light mode records the last deliberately chosen mode, but doesn't measure every lamp's physical state.
normalmeans no special mode: not an automatic restoration of the state before a scene.- In current YAML you use
color_temp_kelvin. - You trigger scenes with
scene.turn_on; there's noscene.turn_off. scene.turn_oncan take atransitionparameter, if the lights support it.- Blinds that need safety lockouts get triggered through a script, not hidden inside a light scene.
- The Night scene changes how automation behaves instead of turning it off globally.
- The Arriving scene doesn't automatically restore global permission for automation.
- Leaving home is a procedure, so it's better built as a script.
- One unavailable entity can produce an incomplete effect, even though the rest of the scene works.
- You test one local scene first, and only later build whole-house scenes.
In Lesson 11 you'll add motion-triggered lighting: with a condition on light_mode and lighting_automation_enabled. Before moving on, make sure Evening works from a button: not only from the YAML editor.