Skip to content

Instantly share code, notes, and snippets.

@smirnowegor
Last active November 19, 2025 06:30
Show Gist options
  • Select an option

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

Select an option

Save smirnowegor/9af39051fb15a75f4e7a9b0d528cbb5f to your computer and use it in GitHub Desktop.
blueprint:
name: "Контроль протечек Pro: Текст, TTS и Универсальное Реле"
description: >
Максимальная версия для управления краном и защиты от протечек.
Особенности:
- Универсальное управление мотором (1 или 2 реле).
- Авто-закрытие и оповещения при протечке.
- Ввод текста сообщений с переменными прямо в настройках.
- Встроенная поддержка Push-уведомлений и Голосового оповещения (TTS).
domain: automation
input:
# --- 1. ГЛАВНЫЕ НАСТРОЙКИ ---
main_switch:
name: "1.0 🎛 Виртуальный кран (Input Boolean)"
description: >
Это "мозг" системы и тумблер на вашем дашборде (например, input_boolean.kran_vody).
ПРИМЕР: Если вы нажмете его, начнется физическое открытие/закрытие крана.
selector:
entity:
domain: input_boolean
leak_sensors:
name: "1.1 💧 Датчики протечки"
description: >
Выберите все ваши датчики влажности.
ПРИМЕР: binary_sensor.leak_kitchen, binary_sensor.leak_bathroom.
selector:
entity:
domain: binary_sensor
device_class: moisture
multiple: true
# --- 2. НАСТРОЙКИ ТЕКСТА (Гибкие сообщения) ---
leak_message_text:
name: "2.0 📝 Текст при АВАРИИ (ПРОТЕЧКЕ)"
description: >
Текст, который будет озвучен и отправлен при обнаружении воды.
ДОСТУПНЫЕ ПЕРЕМЕННЫЕ:
- {{ sensor_name }}: Автоматически подставит имя сработавшего датчика.
ПРИМЕР: 'Внимание! Протечка! Датчик {{ sensor_name }} сработал! Кран перекрыт.'
default: "Внимание! Обнаружена протечка! Датчик: {{ sensor_name }}. Кран перекрыт."
selector:
text:
multiline: true
status_message_text:
name: "2.1 📝 Текст о СМЕНЕ СТАТУСА (Ручное управление)"
description: >
Текст, который будет отправлен/озвучен при ручном открытии или закрытии крана.
ДОСТУПНЫЕ ПЕРЕМЕННЫЕ:
- {{ status }}: Автоматически подставит состояние ('открыт' или 'закрыт').
ПРИМЕР: 'Кран подачи воды успешно {{ status }}.'
default: "Кран подачи воды успешно {{ status }}."
selector:
text:
multiline: true
# --- 3. КУДА СООБЩАТЬ (ВСТРОЕННОЕ) ---
notify_device:
name: "3.0 📱 Push-уведомления на телефон"
description: >
Выберите устройства, куда слать Push-уведомления через Mobile App.
Текст берется из полей (2.0/2.1) автоматически. (Необязательно)
default: []
selector:
device:
integration: mobile_app
multiple: true
tts_player:
name: "3.1 🗣 Голосовое оповещение (TTS)"
description: >
Выберите медиа-плееры (Яндекс.Станции, Google Home).
Текст берется из полей (2.0/2.1) автоматически. (Необязательно)
default: []
selector:
entity:
domain: media_player
multiple: true
# --- 4. ДОПОЛНИТЕЛЬНО (TELEGRAM, DISCORD И Т.Д.) ---
custom_action_leak:
name: "4.0 🤖 Доп. действие при АВАРИИ (Telegram, SMS и др.)"
description: >
Используйте это поле для настройки Telegram или других сервисов.
ШАГИ ДЛЯ TELEGRAM:
1. Нажмите "Добавить действие" -> "Вызов службы".
2. Выберите службу telegram_bot.send_message.
3. В поле Message (Сообщение) ВСТАВЬТЕ КОД: {{ message }}
(Это подхватит текст из поля 2.0).
default: []
selector:
action: {}
custom_action_status:
name: "4.1 🤖 Доп. действие при СМЕНЕ СТАТУСА"
description: >
Повторите шаги из поля 4.0, если хотите получать отчеты о ручном переключении.
default: []
selector:
action: {}
# --- 5. НАСТРОЙКИ ОБОРУДОВАНИЯ (РЕЛЕ) ---
valve_type:
name: "5.0 ⚙️ Тип мотора"
description: >
Выберите схему подключения.
- "Два реле": Мотор с 3 проводами (Открытие/Закрытие).
- "Одно реле": Мотор с 2 проводами (ВКЛ=Откр, ВЫКЛ=Закр) или электромагнитный клапан.
selector:
select:
options:
- label: "Два реле (Откр + Закр)"
value: "dual_relay"
- label: "Одно реле (Вкл=Откр)"
value: "single_relay"
default: "dual_relay"
relay_open:
name: "5.1 ↳ Реле ОТКРЫТИЯ"
description: >
Обязательно только для режима "Два реле". Выберите сущность (switch.relay_open_entity).
default: {}
selector:
entity:
domain: switch
relay_close:
name: "5.2 ↳ Реле ЗАКРЫТИЯ"
description: >
Обязательно только для режима "Два реле". Выберите сущность (switch.relay_close_entity).
default: {}
selector:
entity:
domain: switch
relay_single:
name: "5.3 ↳ Реле УПРАВЛЕНИЯ"
description: >
Обязательно только для режима "Одно реле". Выберите сущность (switch.valve_main).
default: {}
selector:
entity:
domain: switch
interlock_delay:
name: "5.4 ⏱ Задержка мотора (сек)"
description: >
Пауза между выключением одного реле и включением другого (защита от короткого замыкания/поломок).
Рекомендуемое значение: 1-3 секунды.
default: 2
selector:
number:
min: 0
max: 10
unit_of_measurement: seconds
mode: queued
max_exceeded: silent
# === ПЕРЕМЕННЫЕ (Передача текста и статуса) ===
variables:
valve_type_var: !input valve_type
relay_open_var: !input relay_open
relay_close_var: !input relay_close
relay_single_var: !input relay_single
interlock_delay_var: !input interlock_delay
# Шаблоны текста
leak_template: !input leak_message_text
status_template: !input status_message_text
# Рендеринг переменных для шаблонов
sensor_name: "{{ trigger.to_state.name if trigger.id == 'leak_alarm' else 'Неизвестно' }}"
status: "{{ 'открыт' if trigger.to_state.state == 'on' else 'закрыт' }}"
trigger:
- platform: state
entity_id: !input main_switch
to: "on"
id: "cmd_open"
- platform: state
entity_id: !input main_switch
to: "off"
id: "cmd_close"
- platform: state
entity_id: !input leak_sensors
to: "on"
id: "leak_alarm"
action:
- choose:
# ============================================
# СЦЕНАРИЙ 1: ПРОТЕЧКА
# ============================================
- conditions:
- condition: trigger
id: leak_alarm
sequence:
# 1. Формируем сообщение (рендерим шаблон)
- variables:
message: "{{ leak_template }}"
# 2. Отправляем на телефоны (встроенная функция)
- if:
- condition: template
value_template: "{{ inputs.notify_device != [] }}"
then:
- service: notify.mobile_app
data:
message: "{{ message }}"
target:
device_id: !input notify_device
# 3. Говорим голосом (TTS)
- if:
- condition: template
value_template: "{{ inputs.tts_player != [] }}"
then:
- service: tts.speak
target:
entity_id: tts.google_translate_en_com
data:
media_player_entity_id: !input tts_player
message: "{{ message }}"
cache: true
# 4. Выполняем кастомные действия (Telegram)
- choose: []
default: !input custom_action_leak
# 5. Аварийное закрытие
- service: input_boolean.turn_off
target:
entity_id: !input main_switch
# ============================================
# СЦЕНАРИЙ 2: ОТКРЫТИЕ
# ============================================
- conditions:
- condition: trigger
id: cmd_open
sequence:
# Логика реле
- choose:
- conditions: "{{ valve_type_var == 'dual_relay' }}"
sequence:
- service: switch.turn_off
target: {entity_id: !input relay_close}
- delay: !input interlock_delay
- service: switch.turn_on
target: {entity_id: !input relay_open}
- conditions: "{{ valve_type_var == 'single_relay' }}"
sequence:
- service: switch.turn_on
target: {entity_id: !input relay_single}
# Уведомление
- variables:
message: "{{ status_template }}"
- choose: []
default: !input custom_action_status
# ============================================
# СЦЕНАРИЙ 3: ЗАКРЫТИЕ
# ============================================
- conditions:
- condition: trigger
id: cmd_close
sequence:
# Логика реле
- choose:
- conditions: "{{ valve_type_var == 'dual_relay' }}"
sequence:
- service: switch.turn_off
target: {entity_id: !input relay_open}
- delay: !input interlock_delay
- service: switch.turn_on
target: {entity_id: !input relay_close}
- conditions: "{{ valve_type_var == 'single_relay' }}"
sequence:
- service: switch.turn_off
target: {entity_id: !input relay_single}
# Уведомление (только если нет активной протечки)
- if:
- condition: state
entity_id: !input leak_sensors
state: "off"
then:
- variables:
message: "{{ status_template }}"
- choose: []
default: !input custom_action_status
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment