A reusable concept for combining automatic smart home control with intentional manual overrides.
This pattern can be applied to almost anything that can be automated:
- lights
- blinds / covers
- heating
- pool control
- media volume
- ventilation
- irrigation
- scenes
- any other controllable entity
The core idea is simple:
Automation should control the device by default, but as soon as a human intentionally changes the state, automation should temporarily step back.
After a configurable timeout, or when nobody is home anymore, automation is re-enabled automatically.
For each automated device, the pattern uses four components:
- The real device entity
- An automation-enabled switch
- A calculated target state
- A reactivation timer
Example for a blind:
cover.dining_room
input_boolean.blind_automation_dining_room
sensor.blind_dining_room_automatic_position
timer.blind_automation_dining_room_reactivate
Example:
cover.dining_room
This is the actual device controlled by the smart home system.
For example, a blind, light, thermostat, pool pump, media player or any other controllable entity.
Example:
input_boolean.blind_automation_dining_room
This helper defines who is currently in control:
on: automation controls the deviceoff: a human is currently overriding the automation
When this switch is turned on, the device immediately moves to the current automatic target state and the reactivation timer is aborted.
When this switch is turned off, the reactivation timer is started.
Tip: When the last person leaves home, this switch is turned on again.
Example:
sensor.blind_dining_room_automatic_position
This sensor contains the calculated target state.
For a blind, this could be the desired position from 0 to 100.
The calculation can consider any available context, for example:
- workday vs. day off
- different sleep schedules
- presence
- sun position
- indoor temperature
- outdoor temperature
- target temperature
- solar radiation
- time of day
- window contact
- weather
- room usage
- personal preferences
See sensor.blind_dining_room_automatic_position.template for a simple example implementation and sensor.blind_living_room_automatic_position.template for a more complex example that includes sun protection for a TV.
Whenever this target state changes and automation switch is enabled, the real device is moved to the new target state.
Example:
timer.blind_automation_dining_room_reactivate
This timer defines how long a manual override should remain active.
Example:
4 hours
When the timer finishes, the automation-enabled switch is turned on again.
Whenever the real device changes, the system checks whether the device is moving toward or away from the automatic target state.
If the device moves toward the automatic target state, nothing happens.
If the device moves away from the automatic target state, the automation-enabled switch is turned off.
This means:
A user does not need to explicitly disable automation. A manual action is enough.
Automatic target position:
sensor.blind_dining_room_automatic_position = 30
Current blind position:
cover.dining_room = 80
Automation is enabled:
input_boolean.blind_automation_dining_room = on
The blind moves automatically to position 30.
Later, a person manually opens the blind to 70.
The system detects that the blind moved away from the automatic target position.
Result:
input_boolean.blind_automation_dining_room = off
timer.blind_automation_dining_room_reactivate = started
After four hours, the timer finishes.
Result:
input_boolean.blind_automation_dining_room = on
cover.dining_room = 30
When the last person leaves home, all automation-enabled switches can be turned on again.
This ensures that the house returns to its fully automatic behavior when nobody is present.
Expose a group containing all automation-enabled switches to your voice assistant.
Example:
group.blind_automation_switches
This allows commands such as:
Enable blind automation
Disable blind automation
Enable automation for the whole house
This pattern avoids a common smart home problem:
Automation fights against the user.
Instead, the system respects manual decisions temporarily, without permanently disabling automation.
It provides:
- predictable automation
- easy manual control
- automatic recovery
- room-specific behavior
- simple voice control
- reusable structure
- compatibility with different smart home systems
A complete automation blueprint for roller blinds implementing this pattern is available in roller-blinds.yaml.
For every automated entity, create:
<device_entity>
<input_boolean.automation_enabled_for_entity>
<sensor.automatic_target_state_for_entity>
<timer.reactivate_automation_for_entity>
The same pattern works across domains:
cover.living_room
light.kitchen
climate.bedroom
media_player.living_room
switch.pool_pump
The exact target state may differ, but the control model remains the same.
Automation is the default.
Manual control is respected.
Reactivation is automatic.