Skip to content

Сценарии использования

Готовые рабочие конфигурации, проверенные на живых платах. Каждый сценарий — это набор устройств + задач + (опц.) интеграции. Скопируйте идею, подгоните под своё железо.

Тестируйте на живых платах

Все примеры здесь — реальные, опробованные. Если у вас не получается — это, скорее всего, мелочи (неправильный пин, не калиброван датчик), не баг в концепции. Проверьте через RAM-лог что триггер вообще срабатывает.

Каталог

Сценарий Платформа Сложность Что нужно
🌡 Тёплый пол с гистерезисом ESP8266 / ESP32 начальный DS18B20 + реле
💡 Свет по закату любая начальный реле + координаты
🚪 Сигнализация через mesh 2 платы средний digital_input + сирена-реле
🌳 Полив сада по влажности любая средний analog_input + реле клапана
🛢 Бочка с насосом любая средний HC-SR04 + реле насоса
🔋 Батарейная нода ESP32 (лучше) продвинутый BME280 + deep-sleep + cloud
🌬 Вентиляция по CO2 ESP32 продвинутый свой плагин + реле

Тёплый пол

Задача: держать в комнате 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

Куда дальше