Last active
November 15, 2025 08:29
-
-
Save smirnowegor/9fdd8c6e4ac9a56a1680f2b1cc6207fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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