Сценарии использования
Готовые рабочие конфигурации, проверенные на живых платах. Каждый сценарий — это набор устройств + задач + (опц.) интеграции. Скопируйте идею, подгоните под своё железо.
Тестируйте на живых платах
Все примеры здесь — реальные, опробованные. Если у вас не получается — это, скорее всего, мелочи (неправильный пин, не калиброван датчик), не баг в концепции. Проверьте через RAM-лог что триггер вообще срабатывает.
Каталог
Тёплый пол
Задача: держать в комнате 22°C ± 0.5°C через бойлер. Понизить ночью до 19°C. При перегреве датчика подачи > 50°C — аварийно отключить через сосед.
Железо
ESP8266 (NodeMCU v1.0) или ESP32
DS18B20 — два штуки: один в комнате, один на трубе подачи
SSR (твердотельное реле) на 5–10А
БП 5В DC
Устройства
Имя
Тип
Пин
Заметки
Комната гостиная
ds18b20
D2
OneWire bus, address отсканировать
Подача котла
ds18b20
D2
Тот же bus, другой address
SSR котёл
relay
D5
inverted зависит от модели SSR
Задачи
1. Дневной тёплый пол
Часть
Значение
Триггер
device_state: Комната гостиная below 21.5
Условие 1
time_window: 06:00–22:00, дни 0–6
Действие
relay: SSR котёл on
2. Выключение при достижении
Часть
Значение
Триггер
device_state: Комната гостиная above 22.5
Действие
relay: SSR котёл off
3. Ночной режим (понизить)
Часть
Значение
Триггер
device_state: Комната гостиная below 18.5
Условие 1
time_window: 22:00–06:00 (через полночь)
Действие
relay: SSR котёл on
4. Аварийный обвал
Часть
Значение
Триггер
device_state: Подача котла above 50
Действие 1
relay: SSR котёл off
Действие 2
udp_send: event="boiler_overheat", payload={"temp": 51}
Подключение
DS18B20 (data) ─── D2 ─── (+ 4.7 кОм pull-up на 3.3V)
DS18B20 (VCC) ─── 3.3V
DS18B20 (GND) ─── GND
SSR (control +) ─── D5
SSR (control -) ─── GND
SSR (output) ─── котёл (220В)
Гистерезис заложен: триггер срабатывает на переходе через границу, поэтому 21.5°C / 22.5°C дают разрыв 1°C — котёл не дёргается каждые 5 секунд.
Свет по закату
Задача: включать уличный свет на закате, выключать на рассвете. Зимой — не раньше 17:00 (а то закат в 16:00 — рано).
Железо
Любая ESP-плата
Реле 220В для светильника
Устройства
Имя
Тип
Пин
Свет улица
relay
D5
Указать latitude и longitude своего места. Для Москвы: 55.7558 / 37.6173.
Задачи
Включить на закате
Часть
Значение
Триггер
sun: sunset, offset_min=0
Условие 1
time_window: 17:00–01:00 (если закат раньше 17:00 — ждём 17:00 по cron'у)
Действие
relay: Свет улица on
Поправка для зимы — «не раньше 17:00»
Если закат в 16:30, триггер sunset сработает в 16:30, но условие time_window 17:00–... его заблокирует. Тогда нужна вторая задача:
Часть
Значение
Триггер
cron: 17:00, дни 0–6
Условие 1
device_state: Свет улица equals false
Условие 2
(manual) — проверить что солнце уже село — увы, нет триггера «закат уже был сегодня», обходится через сохранение состояния в реле выше
Действие
relay: Свет улица on
Выключить на рассвете
Часть
Значение
Триггер
sun: sunrise, offset_min=+15 (через 15 мин после рассвета)
Действие
relay: Свет улица off
Сигнализация
Задача: на улице — герконы на дверях и тревожная кнопка. В доме — реле для сирены и реле для света. При тревоге — звучит сирена и включается весь свет.
Топология
Плата 1 (улица): Плата 2 (дом):
digital_input на герконах relay → сирена (220В)
button — тревожная кнопка relay → свет коридор + кухня
│
└── udp_send(event="alarm") ──────┐
▼
udp_event trigger
Обе платы — одна mesh-группа (общий network_secret).
Плата 1: устройства
Имя
Тип
Пин
Геркон входная дверь
digital_input
D5
Геркон гараж
digital_input
D6
Кнопка тревога
button
D7
Плата 1: задача «Послать тревогу»
Часть
Значение
Триггер 1
device_state: Геркон входная дверь equals false (открылся)
Триггер 2
device_state: Геркон гараж equals false
Триггер 3
device_state: Кнопка тревога equals true (нажата)
Условие
time_window: 00:00–07:00 + 22:00–24:00 (только ночью)
Действие
udp_send: event="alarm", payload={"source": "p1"}
Плата 2: устройства
Имя
Тип
Пин
Сирена
relay
D5
Свет коридор
relay
D6
Свет кухня
relay
D7
Плата 2: задача «Принять тревогу»
Часть
Значение
Триггер
udp_event: from=*, event="alarm"
Действие 1
relay: Сирена on
Действие 2
relay: Свет коридор on
Действие 3
relay: Свет кухня on
Действие 4
wait: 60 сек
Действие 5
relay: Сирена off (после минуты выключить — нервы у соседей)
Подсказки
Тест не выходя на улицу. Кнопкой ▶ Запустить сейчас в задаче плата-1 — Plate 2 должна сработать. Видно в RAM-логе.
Mesh-group secret должен совпадать на обеих платах. Если приёмник не реагирует — копируйте ключ из Сеть → network_secret .
Не использовать from=<uuid-platы-1> в триггере — UUID меняется после factory-reset. from=* универсальнее.
Полив сада
Задача: если влажность почвы упала ниже X% и за последние 24ч не было дождя (ping погодного API возвращает «солнечно») — открыть клапан на 5 минут.
Железо
ESP-плата
Аналоговый датчик влажности почвы (например, ёмкостный YL-69 или капасативный SEN0193)
Соленоидный клапан 12В + транзистор/MOSFET модуль
Устройства
Имя
Тип
Пин
Калибровка
Влажность почвы
analog_input
A0 (ESP8266) / 34 (ESP32)
calib_min=420, calib_max=1000, unit="%"
Клапан полив
relay
D5
inverted=false
Калибровку определить экспериментально: воткнуть датчик в сухую почву → значение → calib_min (это 0%). В мокрую → calib_max (это 100%).
Задачи
Открыть клапан
Часть
Значение
Триггер
cron: 08:00, дни 0–6
Условие 1
device_state: Влажность почвы below 40
Условие 2
ping: host="api.openweathermap.org", port=80, expect="up" (опционально — если погодный API подскажет «дождь» через свой webhook)
Действие 1
relay: Клапан полив on
Действие 2
wait: 300 сек
Действие 3
relay: Клапан полив off
Подсказки
Калибровка влажности. Без неё calib_min=0, calib_max=4095 даст вам сырые отсчёты ADC, а не проценты.
Защита от залива. Поставьте таймаут в задаче через wait + явный off действие — без него реле может застрять включённым.
Pin для ESP32 ADC. Использовать только ADC1 (GPIO 32–39). ADC2 не работает одновременно с Wi-Fi.
Бочка с водой
Задача: в дачной бочке HC-SR04 измеряет расстояние до поверхности воды. Если уровень упал ниже X — включается насос для пополнения. Защита по таймауту (не качать дольше 30 мин).
Устройства
Имя
Тип
Пин
Заметки
Уровень в бочке
hc_sr04
trigger=D5, echo=D6
Значение — расстояние до воды (большее = меньше воды)
Насос
relay
D7
Задачи
Включить насос если воды мало
Часть
Значение
Триггер
device_state: Уровень в бочке above 80 (см. — далеко от датчика, мало воды)
Условие 1
device_state: Насос equals false (ещё не работает)
Действие
relay: Насос on
Выключить насос если бочка наполнилась
Часть
Значение
Триггер
device_state: Уровень в бочке below 30 (вода близко к датчику, бочка полная)
Действие
relay: Насос off
Защита: не качать дольше 30 минут
Часть
Значение
Триггер
interval: 60 сек
Условие 1
device_state: Насос equals true
Условие 2
task_state: задача «Включить насос» — last_fire > 30 мин назад
Действие
relay: Насос off
Подсказки
HC-SR04 «летает». Сонар чувствителен к температуре, к пузырям на поверхности, к рамкам бочки. Поставьте у датчика небольшой ресет-вход (interval 2 сек усреднение) если значение прыгает.
Размещение датчика. Сверху бочки, направлен вниз. Минимум 5 см от ближайшей стенки чтобы избежать эхо.
Mounted heatshrink на провод. Если бочка на улице — провод к датчику в гофре, разъём не на холоде.
Батарейная нода
Задача: удалённая метеостанция в саду. Питание от LiFePO4 батареи 3.2В, без розетки. Просыпается раз в 15 минут, шлёт heartbeat в облако, засыпает.
Железо
ESP32 (на ESP8266 deep-sleep работает, но wake-up менее надёжный)
BME280 (I²C)
LiFePO4 18650 батарея 3.2В + step-up 3.3V
USB-кабель только для прошивки
Устройства
Имя
Тип
Пин
Заметки
Сад температура
bme280_temp
I²C (SDA=21, SCL=22 ESP32)
i2c_address=0x76
Сад влажность
bme280_hum
I²C
то же
Сад давление
bme280_pres
I²C
то же
Настройка глубокого сна
Настройки → Глубокий сон :
Параметр
Значение
enabled
true
wake_interval_sec
900 (15 минут)
awake_window_sec
30 (хватает на heartbeat + buffer)
three_reset_window_sec
30
Подключить к облаку
Облако — обычная привязка. heartbeat_interval — 10 (чтобы успеть отправить в 30-сек окне).
Что ожидать
Каждые 15 минут плата просыпается, читает BME280, шлёт heartbeat, спит.
Потребление в active: ~80 мА × 30 сек = 0.67 мАч за цикл
Потребление в sleep: ~10 µA × 870 сек = 0.0024 мАч за цикл
На LiFePO4 18650 (~3000 мАч) — ~10 месяцев без подзарядки
Подсказки
ESP8266 + deep-sleep требует перемычку D0↔RST. Без неё плата не проснётся (см. Настройки → Deep sleep ).
3-reset escape. Если что-то пошло не так в коде сна — три быстрых нажатия RST → deep-sleep выключается до следующего factory-reset.
NTP в окне 30 сек не успевает синхронизироваться с нуля. Время восстановится с диска (см. Настройки → Время ) — точность до минуты, для heartbeat'а хватит.
Вентиляция по CO2
Задача: в кухне MH-Z19B сенсор CO2. При CO2 > 1000 ppm включить вытяжку. Сенсор MH-Z19B — UART, в коробке его нет → нужен свой плагин .
Шаг 1: написать плагин
См. Свой плагин: пошагово — пример rain. Аналогично для mhz19:
Папка src/sensors/mhz19/
mhz19.cpp с UART-обменом (см. datasheet MH-Z19B)
Манифест с lib_deps: [] (UART встроенный в Arduino)
Включить в sensors.enabled.json
Шаг 2: устройства
Имя
Тип
Пин
Заметки
CO2 кухня
mhz19
UART2 (TX=17, RX=16 на ESP32)
Прогрев 3 мин при первом старте
Вытяжка
relay
D5
Шаг 3: задача
Часть
Значение
Триггер
device_state: CO2 кухня above 1000
Действие
relay: Вытяжка on
(отдельная задача) Триггер
device_state: CO2 кухня below 700
Действие
relay: Вытяжка off
Куда дальше