Skip to content

Instantly share code, notes, and snippets.

@smirnowegor
Last active November 15, 2025 08:29
Show Gist options
  • Select an option

  • Save smirnowegor/9fdd8c6e4ac9a56a1680f2b1cc6207fa to your computer and use it in GitHub Desktop.

Select an option

Save smirnowegor/9fdd8c6e4ac9a56a1680f2b1cc6207fa to your computer and use it in GitHub Desktop.
blueprint:
name: "Универсальная автоматизация управления светом (движение + дверь + таймер)"
description: |
Универсальная автоматизация для управления светом.
## Как работает
- Включает свет при движении.
- При отсутствии движения запускает выбранный `timer.*` с длительностью из `input_number`.
- По завершении таймера выключает свет и запускает дополнительные действия (если заданы).
- Опционально: при открытии двери — включение света и запуск таймера.
- Можно задать глобальные условия (например: только ночью или только если кто-то дома).
**Контакты автора:**
- [Telegram канал про автоматизацию домов](https://t.me/u2smart4home)
- [YouTube: Удобный дом](https://www.youtube.com/@udobni_dom)
- [Яндекс.Дзен: Мой профиль](https://dzen.ru/id/5e32d0969929ba40059b5892)
- [Teletype](https://teletype.in/@godisblind)
domain: automation
input:
motion_sensors:
name: "Датчики движения"
description: "Выберите один или несколько binary_sensor с классом occupancy (датчики движения)."
default: []
selector:
entity:
domain: binary_sensor
multiple: true
lights:
name: "Целевые светильники или зона"
description: "Выберите один или несколько light.* или целую зону (будут включаться/выключаться только светильники)."
selector:
target:
entity:
domain: light
timer_entity:
name: "Таймер"
description: "Выберите timer.* — будет использоваться для отсчёта времени до выключения света."
selector:
entity:
domain: timer
delay_input_number:
name: "Input number для времени ожидания"
description: "Выберите input_number (в минутах), который задаёт длительность таймера. После заведения номера нужно поставить значение больше 0 для нормальной работы таймера"
selector:
entity:
domain: input_number
door_sensor:
name: "Датчик двери (опционально)"
description: "Выберите binary_sensor двери. При открытии двери свет включится и запустится таймер. Можно оставить пустым."
# ИСПРАВЛЕНИЕ 1: default: []
default: []
selector:
entity:
domain: binary_sensor
# ИСПРАВЛЕНИЕ 2: multiple: true
multiple: true
global_conditions:
name: "Глобальные условия"
description: "Эти условия должны быть истинны, чтобы автоматизация выполнялась. Например: только ночью, только если кто-то дома."
default: []
selector:
condition: {}
timer_finished_actions:
name: "Действия при завершении таймера"
description: "Эти действия будут выполнены после выключения света, когда таймер завершится. Можно оставить пустым."
default: []
selector:
action: {}
variables:
delay_input: !input delay_input_number
minutes: "{{ states(delay_input) | default('3') | float | int }}"
# 'door_sensor' и 'motion_list' здесь больше не нужны
# (если только вы не используете их в 'global_conditions')
# Оставляю 'motion_list' на всякий случай, т.к. он был у вас.
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
# ИСПРАВЛЕНИЕ 3: Возвращаем platform: state.
# Теперь он будет работать, т.к. !input door_sensor
# будет [] (пустым списком), если ничего не выбрано.
- platform: state
entity_id: !input door_sensor
to: "on"
id: door_opened
# Глобальные условия
condition: !input global_conditions
action:
- choose:
- conditions:
- condition: trigger
id: motion_detected
sequence:
- service: light.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: light.turn_on
target: !input lights
- 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: light.turn_off
target: !input lights
- choose: []
default: !input timer_finished_actions
default: []
mode: restart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment