Skip to content

Instantly share code, notes, and snippets.

@smirnowegor
Last active October 16, 2025 14:47
Show Gist options
  • Select an option

  • Save smirnowegor/1d4b792867ee7ea1b2c34eb29a37800b to your computer and use it in GitHub Desktop.

Select an option

Save smirnowegor/1d4b792867ee7ea1b2c34eb29a37800b to your computer and use it in GitHub Desktop.
blueprint:
name: Свет в прихожей — движение + опц. датчик двери + таймер (time from input_number, безопасно) — improved
description: >
Включает свет при движении.
При отсутствии движения стартует выбранный timer.* с длительностью из выбранного input_number (минуты).
По завершении таймера выключает свет.
Опционально: при открытии двери — включение и отмена таймера;
при закрытии двери — старт таймера только если ВСЕ датчики движения сейчас OFF.
domain: automation
input:
motion_sensors:
name: Датчики движения
description: Список binary_sensor — датчики движения (multiple).
selector:
entity:
domain: binary_sensor
multiple: true
lights:
name: Целевые устройства / группы (light/switch/group ...)
selector:
target: {}
timer_entity:
name: Таймер (timer.*)
selector:
entity:
domain: timer
delay_input_number:
name: Input number для времени ожидания (минуты)
selector:
entity:
domain: input_number
door_sensor:
name: Датчик двери (опционально)
description: Оставьте пустым, если нет двери.
default: null
selector:
entity:
domain: binary_sensor
variables:
delay_input: !input delay_input_number
# более устойчивое преведение: если input_number пустой/нечисло — используем 3
minutes: "{{ states(delay_input) | default('3') | float | int }}"
door_sensor: !input door_sensor
motion_list: !input motion_sensors
trigger:
- platform: state
entity_id: !input motion_sensors
to: "on"
id: motion_detected
- platform: state
entity_id: !input motion_sensors
to: "off"
id: motion_stopped
- platform: event
event_type: timer.finished
event_data:
entity_id: !input timer_entity
id: timer_finished
# безопасные template-триггеры для опционального датчика двери
- platform: template
value_template: >-
{% if door_sensor %}
{{ is_state(door_sensor, 'on') }}
{% else %}
false
{% endif %}
id: door_opened
- platform: template
value_template: >-
{% if door_sensor %}
{{ is_state(door_sensor, 'off') }}
{% else %}
false
{% endif %}
id: door_closed
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: motion_detected
sequence:
- service: homeassistant.turn_on
target: !input lights
- service: timer.cancel
target:
entity_id: !input timer_entity
- conditions:
- condition: trigger
id: motion_stopped
sequence:
- service: timer.start
target:
entity_id: !input timer_entity
data:
duration: >-
{% set m = minutes | int %}
{% set hh = (m // 60) %}
{% set mm = (m % 60) %}
{{ "%02d:%02d:00" | format(hh, mm) }}
- conditions:
- condition: trigger
id: door_opened
sequence:
- service: homeassistant.turn_on
target: !input lights
- service: timer.cancel
target:
entity_id: !input timer_entity
- conditions:
- condition: trigger
id: door_closed
- condition: template
value_template: >-
{% set ml = motion_list %}
{% if ml is defined and ml | length > 0 %}
{{ expand(ml) | selectattr('state','equalto','on') | list | length == 0 }}
{% else %}
true
{% endif %}
sequence:
- service: timer.start
target:
entity_id: !input timer_entity
data:
duration: >-
{% set m = minutes | int %}
{% set hh = (m // 60) %}
{% set mm = (m % 60) %}
{{ "%02d:%02d:00" | format(hh, mm) }}
- conditions:
- condition: trigger
id: timer_finished
sequence:
- service: homeassistant.turn_off
target: !input lights
mode: restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment