Гибкие временные диапазоны сценариев Алисы в Node-RED
Одной из наиболее частых задач в автоматизации умного дома является управление устройствами по расписанию. Стандартное приложение Яндекс Дома позволяет задавать базовые таймеры запуска, однако эти сценарии ограничены жестким фиксированным временем и не учитывают множество внешних факторов. Например, они не могут динамически смещать время включения света по мере изменения длины светового дня или разделять расписания для обычных выходных и государственных праздников с переносом рабочих дней.
Использование внешнего сервера автоматизации позволяет обойти эти ограничения. Если вы еще не настроили связку вашего дома с этой системой, ознакомьтесь с руководством по установке Node-RED и интеграции с Яндекс Алисой. Ниже мы разберем, как реализовать профессиональное управление временными диапазонами для ваших сценариев.
Расширенное планирование с помощью ноды Cron-Plus
Стандартный узел Inject в Node-RED умеет отправлять сигналы в заданное время, но его возможности планирования скромны. Для создания гибких графиков рекомендуется установить узел cron-plus через палитру управления. Он поддерживает стандартный синтаксис Cron с возможностью секундной точности и позволяет настраивать сложные правила.
С помощью cron-plus вы можете настроить запуск сценария, например: «каждый второй вторник месяца в 15:30, кроме летнего периода». Более того, этот узел поддерживает динамическое добавление и удаление расписаний прямо во время работы потока с помощью отправки управляющих сообщений на его вход, что позволяет Алисе гибко изменять время будильника.
Разделение логики: Будни, Выходные и Праздники
При настройке климата или будильников критически важно разделять рабочие и нерабочие дни. Но как быть с праздничными днями, которые выпадают на середину недели, или рабочими субботами?
Для этого в Node-RED создается цепочка фильтрации:
- Каждое утро в 00:01 запускается поток, отправляющий GET-запрос к бесплатному API производственного календаря (например,
isdayoff). - Полученный ответ (0 — рабочий день, 1 — выходной) записывается в глобальную переменную
global.isWeekend. - В течение дня все сценарии, зависящие от типа дня, считывают это значение с помощью узла Switch перед выполнением команд для Алисы.
Это гарантирует, что в новогодние праздники умный дом не разбудит вас в 7 часов утра громкой музыкой от Яндекс Станции, даже если по календарю это обычный будний день недели.
TIP
Для тестирования таких сценариев не обязательно ждать наступления праздничного дня. Вы можете временно подменить значение переменной global.isWeekend с помощью узла Inject и проследить, как поведут себя зависимые автоматизации в виртуальной среде.
Динамические интервалы: Привязка к Солнцу (Астрономическое время)
Если вам нужно включать фасадное освещение или закрывать шторы при наступлении темноты, жестко заданное время не подойдет. Летом темнеет в 22:00, а зимой — в 16:00.
Для решения этой задачи используются астрономические узлы, такие как Sun-Time или Schedex. Они используют математические формулы для расчета точного положения солнца на небосводе в зависимости от географических координат вашего дома (широты и долготы).
Вы можете привязать триггеры к следующим событиям:
- Sunrise (рассвет) и Sunset (закат);
- Dawn (утренние сумерки) и Dusk (вечерние сумерки);
- Смещения относительно этих событий (например, за 30 минут до заката).
IMPORTANT
При настройке любых планировщиков времени обязательно проверьте системное время и часовой пояс вашего сервера Node-RED. Если сервер запущен в контейнере Docker без явного указания переменной окружения TZ=Europe/Moscow, время внутри контейнера будет рассчитываться по UTC. Это приведет к тому, что все ваши сценарии будут запускаться со смещением на несколько часов.
Практический пример: Адаптивный ночной коридор
Свяжем физический или виртуальный датчик движения, умное реле освещения и Яндекс Станцию в единый автоматизированный сценарий с логическим разделением времени суток. Наша конечная цель состоит в том, чтобы при обнаружении человека в коридоре свет включался автоматически. Однако его яркость, цветовая температура и общая продолжительность работы должны кардинально отличаться в зависимости от текущего времени:
- В дневное время (интервал с 08:00 до 23:00): освещение включается на максимальные 100% мощности с холодным белым оттенком на 2 минуты.
- В ночное время (интервал с 23:00 до 08:00): освещение активируется в режиме ночника на минимальные 10% яркости с теплым желтым спектром всего на 30 секунд, чтобы не ослеплять проходящих людей.
Для технической реализации данной логики используется специализированный узел Time-Range-Switch. Он принимает входной сигнал от датчика движения и мгновенно сравнивает текущее время на часах сервера с заданными параметрами. Если системное время попадает в ночной диапазон с 23:00 до 08:00, объект сообщения перенаправляется на первый выходной порт ноды, который отвечает за активацию ночного профиля. В любом другом случае сообщение уходит на второй порт, активирующий стандартный дневной режим. Соответствующие выходы портов отправляют точные команды на виртуальное устройство Алисы для изменения параметров яркости.
Вы также можете усложнить эту систему, добавив в нее проверку статуса освещенности. Если датчик освещенности передает информацию, что в комнате и так достаточно солнечного света, Node-RED может полностью заблокировать прохождение сигнала на включение лампы в дневные часы, экономя электроэнергию.
WARNING
При проектировании динамических расписаний обязательно учитывайте риски ложных или несвоевременных срабатываний после аварийного отключения электроэнергии. При холодном старте системы некоторые планировщики могут отправлять последнее сохраненное состояние (так называемый эффект «события на запуске»). Чтобы избежать нежелательного включения мощных электроприборов посреди ночи, настройте дополнительную фильтрацию сообщений с помощью буферного узла Delay или установите логические ворота, отсекающие старые статусы.
Использование гибких временных интервалов превращает ваш умный дом из простой системы с голосовым управлением в полноценную интеллектуальную среду. Она будет предугадывать ваши потребности, адаптироваться под текущий ритм жизни вашей семьи и естественную смену времен года.
Инструкция по настройке
Установка нод планирования времени
Откройте палитру Node-RED и установите дополнительные ноды для работы со временем, такие как cron-plus или time-range-switch.
Настройка географических координат
Задайте точную широту и долготу в конфигурации астрономических нод для вычисления времени рассвета и заката в вашем регионе.
Интеграция календаря праздников
Добавьте HTTP-запрос к API производственного календаря, чтобы автоматически определять праздничные и перенесенные выходные дни.
Создание условий проверки времени
Свяжите выходы датчиков движения с нодой ограничения времени, чтобы перенаправлять сигналы на разные уровни яркости освещения.