Last active
November 25, 2025 11:23
-
-
Save smirnowegor/9f056c2a7edd5dec416cfd34dceced1a 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: "Умная Вытяжка Pro Max: Динамика, Таймер, Условия" | |
| description: > | |
| **Профессиональная и отказоустойчивая автоматизация для ванной комнаты.** | |
| Эта логика решает главную проблему: она не ждет фиксированного порога влажности (например, 70%), а постоянно сравнивает влажность в помещении с **динамической нормой** (эталоном/медианой дома). | |
| ### 💡 Ключевые особенности | |
| 1. **Динамическое сравнение:** Работает корректно и зимой (когда влажность в доме низкая), и летом (когда влажность везде высокая). | |
| 2. **Умный Гистерезис:** Выключение происходит не после достижения абсолютной нормы, а когда влажность упала на половину критической разницы. Это экономит энергию и ресурс. | |
| 3. **Ручной режим:** Если включить вытяжку кнопкой, она отработает заданный таймер проветривания (например, 15 мин) и не будет зависеть от влажности. | |
| 4. **Защита (Safety Timeout):** Аварийный таймер принудительно выключит вытяжку, если влажность не падает слишком долго. | |
| 5. **Блокирующие Условия (v2):** Возможность запретить авто-запуск, если открыто окно или включен ночной режим. | |
| 6. **Пост-Действия (v2):** Выполнение дополнительных команд после выключения (например, выключить свет, отправить уведомление). | |
| </details> | |
| **Контакты автора:** | |
| - [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: | |
| humidity_sensor: | |
| name: "Датчик влажности (Целевой)" | |
| description: "Основной сенсор в ванной/туалете. Его показания мы сравниваем с эталоном." | |
| selector: | |
| entity: | |
| domain: sensor | |
| device_class: humidity | |
| reference_humidity_sensor: | |
| name: "Эталонная Влажность (Референс)" | |
| description: > | |
| **КЛЮЧЕВОЙ ПАРАМЕТР:** Это датчик нормы. Рекомендуется использовать: | |
| 1. Сенсор медианной влажности (Helper). | |
| 2. Сенсор в стабильно сухой комнате (например, спальня). | |
| Мы используем его, чтобы вытяжка включалась, только когда влажность *резко* превышает норму для всего дома. Это предотвращает ложные срабатывания в дождливую погоду. | |
| selector: | |
| entity: | |
| domain: sensor | |
| diff_threshold: | |
| name: "Порог срабатывания (%)" | |
| description: "На сколько процентов влажность в ванной должна стать выше Эталонной, чтобы запустить вытяжку. Определяет чувствительность системы. (Пример: 8-12%)." | |
| selector: | |
| entity: | |
| domain: input_number | |
| fan_entity: | |
| name: "Вытяжка (Вентилятор)" | |
| description: "Сама сущность вентилятора (обязательно домен fan)." | |
| selector: | |
| entity: | |
| domain: fan | |
| timer_entity: | |
| name: "Системный Таймер (Helper)" | |
| description: "Обязательно создайте таймер в 'Помощниках'. Нужен для сохранения времени работы при перезагрузке HA." | |
| selector: | |
| entity: | |
| domain: timer | |
| safety_timeout: | |
| name: "Аварийный Таймер (мин)" | |
| description: "Максимальное время работы вытяжки при высоком уровне влажности. Срабатывает как защита, если влажность не падает." | |
| selector: | |
| entity: | |
| domain: input_number | |
| manual_timeout: | |
| name: "Таймер Ручного Режима (мин)" | |
| description: "Время, которое вытяжка будет работать после того, как вы включили ее кнопкой (для проветривания)." | |
| selector: | |
| entity: | |
| domain: input_number | |
| # --- НОВЫЕ БЛОКИ v2 --- | |
| global_conditions: | |
| name: "Глобальные Условия (Блокировка)" | |
| description: "Если эти условия НЕ выполняются, авто-запуск блокируется. (Пример: 'Окно закрыто' ИЛИ 'Сейчас не Ночь')." | |
| default: [] | |
| selector: | |
| condition: {} | |
| completion_actions: | |
| name: "Действия при Завершении" | |
| description: "Что сделать ПОСЛЕ выключения вытяжки? (Пример: Отправить уведомление, Выключить свет)." | |
| default: [] | |
| selector: | |
| action: {} | |
| mode: restart | |
| trigger_variables: | |
| var_hum_sensor: !input humidity_sensor | |
| var_ref_sensor: !input reference_humidity_sensor | |
| var_diff: !input diff_threshold | |
| var_fan: !input fan_entity | |
| var_timer: !input timer_entity | |
| variables: | |
| t_safe: !input safety_timeout | |
| t_manual: !input manual_timeout | |
| hum_sensor: !input humidity_sensor | |
| ref_sensor: !input reference_humidity_sensor | |
| diff_sensor: !input diff_threshold | |
| trigger: | |
| # 1. Авто-старт | |
| - platform: template | |
| id: high | |
| value_template: >- | |
| {% set c = states(var_hum_sensor) | float(0) %} | |
| {% set m = states(var_ref_sensor) | float(0) %} | |
| {% set d = states(var_diff) | float(0) %} | |
| {{ c > (m + d) }} | |
| # 2. Авто-стоп (Гистерезис) | |
| - platform: template | |
| id: low | |
| value_template: >- | |
| {% set c = states(var_hum_sensor) | float(0) %} | |
| {% set m = states(var_ref_sensor) | float(0) %} | |
| {% set d = states(var_diff) | float(0) %} | |
| {{ c <= (m + (d * 0.5)) }} | |
| # 3. Ручной старт | |
| - platform: state | |
| entity_id: !input fan_entity | |
| to: "on" | |
| id: manual_on | |
| # 4. Таймер истек | |
| - platform: event | |
| event_type: timer.finished | |
| event_data: | |
| entity_id: !input timer_entity | |
| id: timer_end | |
| action: | |
| - choose: | |
| # ------------------------------------------------ | |
| # СЦЕНАРИЙ А: Высокая влажность (Авто) | |
| # ------------------------------------------------ | |
| - conditions: | |
| - condition: trigger | |
| id: high | |
| - condition: and | |
| conditions: !input global_conditions | |
| sequence: | |
| - action: fan.turn_on | |
| target: | |
| entity_id: !input fan_entity | |
| - action: timer.start | |
| target: | |
| entity_id: !input timer_entity | |
| data: | |
| duration: "{{ (states(t_safe) | float(60) * 60) | int }}" | |
| # ------------------------------------------------ | |
| # СЦЕНАРИЙ Б: Влажность упала (Стоп) | |
| # ------------------------------------------------ | |
| - conditions: | |
| - condition: trigger | |
| id: low | |
| - condition: state | |
| entity_id: !input fan_entity | |
| state: "on" | |
| sequence: | |
| - action: fan.turn_off | |
| target: | |
| entity_id: !input fan_entity | |
| - action: timer.cancel | |
| target: | |
| entity_id: !input timer_entity | |
| - choose: [] | |
| default: !input completion_actions # Выполнение пост-действий | |
| # ------------------------------------------------ | |
| # СЦЕНАРИЙ В: Ручное включение | |
| # ------------------------------------------------ | |
| - conditions: | |
| - condition: trigger | |
| id: manual_on | |
| - condition: template | |
| value_template: >- | |
| {% set c = states(hum_sensor) | float(0) %} | |
| {% set m = states(ref_sensor) | float(0) %} | |
| {% set d = states(diff_sensor) | float(0) %} | |
| {{ c <= (m + d) }} | |
| sequence: | |
| - action: timer.start | |
| target: | |
| entity_id: !input timer_entity | |
| data: | |
| duration: "{{ (states(t_manual) | float(15) * 60) | int }}" | |
| # ------------------------------------------------ | |
| # СЦЕНАРИЙ Г: Таймер истек (Стоп) | |
| # ------------------------------------------------ | |
| - conditions: | |
| - condition: trigger | |
| id: timer_end | |
| sequence: | |
| - action: fan.turn_off | |
| target: | |
| entity_id: !input fan_entity | |
| - choose: [] | |
| default: !input completion_actions # Выполнение пост-действий |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment