Логика защиты от протечек с ручным сбросом блокировки в Node-RED

Система защиты от протечек воды — одна из важнейших инженерных подсистем современного умного дома. Большинство базовых сценариев автоматизации работают по простейшему двустороннему алгоритму: если датчик зафиксировал воду (состояние «влажно»), подается команда на закрытие шаровых электрокранов; как только датчик высыхает (состояние «сухо»), краны автоматически открываются обратно. Однако такой упрощенный подход несет в себе колоссальные риски и противоречит правилам безопасности.

Если в доме лопнет труба, датчик протечки мгновенно перекроет воду. Но как только вода на полу слегка подсохнет или испарится, датчик вернется в состояние «сухо». Без жесткой блокировки система автоматически откроет краны снова, что приведет к повторному затоплению квартиры. Для предотвращения таких аварий в Node-RED необходимо реализовать алгоритм с «защелкой» (софтверным триггером блокировки) и обязательным ручным подтверждением устранения аварии человеком.


Шаг 1: Инициализация флага блокировки протечки

Для реализации безопасной логики используется механизм запоминания состояния системы. При фиксации протечки сервер записывает специальный флаг аварии в память. Любые автоматические или ручные попытки открыть краны будут игнорироваться до тех пор, пока этот флаг активен.

Для хранения флага используется глобальный контекст сервера. О том, как настроить сохранение таких переменных, подробно описано в статье о глобальных переменных в Node-RED. Переменная будет называться global.waterLeakBlocked.

При запуске сервера или первом старте логики необходимо гарантировать, что переменная объявлена:

if (global.get("waterLeakBlocked") === undefined) {
    global.set("waterLeakBlocked", false);
}

Файловое сохранение переменной критически важно, так как при перезапуске сервера Node-RED из-за перебоев с электричеством статус аварии не должен стереться.


Шаг 2: Создание триггера перекрытия воды

При поступлении сигнала от любого Zigbee-датчика протечки (например, датчика Aqara или Tuya) запускается сценарий экстренного закрытия.

Алгоритм работы цепочки реагирования:

  1. Сигнал от датчика протечки поступает на вход ноды switch.
  2. Если пришло состояние протечки (true), сообщение раздваивается.
  3. Первая ветка отправляет команду закрытия на электромагнитные краны или сервоприводы.
  4. Вторая ветка через ноду change записывает значение true в глобальную переменную global.waterLeakBlocked.
  5. Одновременно инициируются аварийные оповещения: отправка SMS на телефон и голосовое сообщение через Яндекс Станцию.

Даже если датчик высохнет через 10 минут и пришлет состояние false (сухо), краны не откроются, поскольку логика открытия будет заблокирована флагом.


Шаг 3: Блокировка ручного и автоматического открытия

Теперь необходимо предотвратить случайное открытие кранов пользователем. Хозяин дома может случайно нажать кнопку открытия воды в приложении Яндекс, сказать Алисе «Открой воду» или нажать физическую кнопку в ванной комнате до того, как найдет и отремонтирует лопнувшую трубу.

Для этого перед нодой управления кранами ставится логическая нода function или switch, проверяющая статус блокировки:

const isBlocked = global.get("waterLeakBlocked") || false;

if (isBlocked) {
    // Блокируем команду открытия
    node.warn("Попытка открытия воды заблокирована: активен режим протечки!");
    msg.payload = "blocked";
    return [null, msg]; // Сообщение на краны не идет, уходит только на предупреждение
} else {
    // Разрешаем прохождение команды
    return [msg, null];
}

Если произошла попытка открыть краны при активной аварии, Node-RED отсылает команду на Яндекс Станцию, и Алиса произносит: «Внимание! Открытие воды невозможно. Зафиксирована протечка. Сбросьте блокировку».


Шаг 4: Создание механизма ручного сброса аварии

Чтобы вернуть систему в штатный рабочий режим после устранения причин аварии (например, замены лопнувшего шланга смесителя), пользователю необходимо явно подтвердить сброс блокировки.

Для этого в приложении Дом с Алисой создается виртуальное устройство типа «Кнопка» или «Выключатель» с именем «Сброс протечки».

  1. При нажатии этой кнопки в приложении Яндекс отправляется сигнал в Node-RED.
  2. Нода-приемник передает импульс на изменение переменной global.waterLeakBlocked в состояние false.
  3. Система переходит в штатный режим, и краны автоматически (или по команде пользователя) открываются.

Такой подход полностью исключает человеческий фактор и повторные затопления из-за невнимательности.

IMPORTANT

Никогда не нажимайте кнопку сброса блокировки до того, как визуально проверите все стыки труб, сифоны и гибкие подводки в местах установки датчиков. Логика умного дома защищает имущество, но устранить физическую течь может только человек.

WARNING

Обязательно убедитесь, что в файле settings.js включено постоянное дисковое хранилище (persistent contextStorage). Если глобальная переменная блокировки сохранится только в оперативной памяти (RAM), то при перезагрузке сервера Node-RED флаг сбросится в false, и краны могут автоматически открыться при высохшем датчике, создав аварийную ситуацию.

TIP

Шаровые краны с электроприводом имеют свойство закисать и покрываться известковым налетом, если ими не пользоваться месяцами. Настройте в Node-RED еженедельный автоматический цикл самоочистки (закрытие и открытие кранов в 4 часа утра в среду), но только при условии, что флаг waterLeakBlocked равен false.

NOTE

Логику блокировки можно дополнить датчиком давления в системе водоснабжения: если после сброса блокировки и открытия кранов давление в системе не стабилизируется в течение минуты, система расценит это как крупный скрытый порыв и заблокирует воду повторно.

Инструкция по настройке

1

Создание глобальной переменной блокировки

Инициализируйте логический флаг блокировки в глобальном контексте Node-RED для отслеживания аварийного состояния.

2

Настройка триггера протечки

Создайте сценарий перекрытия кранов при срабатывании любого из датчиков протечки и установите аварийный флаг.

3

Блокировка обратного открытия

Внедрите проверку флага блокировки перед отправкой команды на открытие кранов с выключателей или из приложения.

4

Создание кнопки сброса защиты

Настройте виртуальную кнопку сброса аварийного состояния в интерфейсе Алисы для ручного разблокирования системы.

Совет эксперта: Управляйте домом с компьютера

Установите Яндекс Браузер, чтобы управлять умными розетками и светом прямо со стартовой страницы, не отвлекаясь от работы.