Skip to content

Repository files navigation

Manual Override Pattern for Smart Home Automations

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.

Concept

For each automated device, the pattern uses four components:

  1. The real device entity
  2. An automation-enabled switch
  3. A calculated target state
  4. 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

Components

Device entity

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.

Automation enabled switch

Example:

input_boolean.blind_automation_dining_room

This helper defines who is currently in control:

  • on: automation controls the device
  • off: 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.

Automatic target state

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.

Reactivation timer

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.

Manual override detection

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.

Example behavior

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

Presence-based reset

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.

Voice assistant tip

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

Why this pattern is useful

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

Implementation

A complete automation blueprint for roller blinds implementing this pattern is available in roller-blinds.yaml.

Generalized pattern

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.

Principle

Automation is the default.

Manual control is respected.

Reactivation is automatic.

About

Here I describe my concept for shutter automation

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors