Задачи и сценарии¶
http://<ip-платы>/tasks.html — где описаны автоматизации.
Задача — это правило «если триггер сработал и условия выполнены — выполни действия».
Анатомия задачи¶
| Часть | Сколько | Логика | Описание |
|---|---|---|---|
| Триггеры | 1–3 | ИЛИ | Один из них должен сработать чтобы задача начала проверяться |
| Условия | 0–4 | all / any (выбирается) | Дополнительный фильтр перед действиями |
| Окно валидности | 0–1 | — | По времени суток и дням недели |
| Действия | 1–4 | последовательно | Что выполнить |
Триггеры¶
Тип триггера выбирается dropdown'ом — список приходит с /api/v1/triggers, то есть зависит от того, какие плагины включены через triggers.enabled.json.
interval¶
Срабатывает каждые interval_sec секунд. Простейший таймер.
| Поле | Назначение |
|---|---|
interval_sec |
Период в секундах, 1..86400 |
Первое срабатывание — через interval_sec после загрузки платы (а не сразу).
cron¶
| Поле | Назначение |
|---|---|
hour |
Час в диапазоне 0..23 |
minute |
Минута 0..59 |
days_mask |
Битмаска дней недели (bit 0 = вс, bit 6 = сб) |
Нужна синхронизация времени
Cron работает только когда time.synced=true. Пока NTP не подключился, UI рисует warning. Если плата без интернета — установите время вручную в Настройках → Время или используйте триггеры interval и device_state.
sun (восход / закат)¶
| Поле | Назначение |
|---|---|
event |
sunrise или sunset |
offset_min |
Сдвиг в минутах: -30 = за полчаса до, +15 = через 15 минут после |
Расчёт по NOAA-формуле, использует latitude и longitude из Настроек → Устройство. Без координат sun не сработает.
device_state¶
| Поле | Назначение |
|---|---|
device_id |
ID устройства (из списка существующих) |
compare |
above, below, equals |
threshold |
Значение для сравнения (для above/below) |
target_bool |
Для бинарных устройств (button, digital_input): true / false |
Срабатывает при переходе через границу (edge-triggered), не на каждый цикл опроса. То есть «температура поднялась выше 25°C» сработает один раз, пока не упадёт обратно ниже и снова не превысит.
udp_event¶
Реакция на событие от mesh-соседа.
| Поле | Назначение |
|---|---|
from_uuid |
UUID соседа (или * для любого) |
event |
Имя события (строка, ≤16 символов) |
Используется в паре с действием udp_send на соседе.
ping¶
| Поле | Назначение |
|---|---|
host |
IP или hostname для проверки |
port |
TCP-порт |
interval_sec |
Период проверки |
timeout_ms |
Таймаут одной попытки |
expect |
up или down — что считается срабатыванием |
Полезно для «если роутер недоступен — переключи питание» или «если погодный API не отвечает — не включай полив».
Условия¶
Каждое условие — это проверка в момент срабатывания триггера. Не события — просто моментальные проверки.
| Тип | Что проверяет |
|---|---|
device_state |
Текущее значение/состояние устройства |
time_window |
Время суток (start_min..end_min) |
wifi_rssi |
Сила сигнала Wi-Fi (полезно: «делай что-то только если связь хорошая») |
mesh_peer |
Есть ли в эфире сосед с заданным UUID |
task_state |
Состояние другой задачи (последнее срабатывание, enabled/disabled) |
uptime |
Время с загрузки платы — фильтр «не сразу после ребута» |
Логика объединения: переключатель all / any в форме.
all— все условия должны быть выполнены (AND).any— хотя бы одно (OR).
Окно валидности¶
Глобальный фильтр поверх триггеров + условий.
| Поле | Назначение |
|---|---|
start_min |
Минут от начала суток (0..1439). 8*60=480 = 08:00 |
end_min |
То же, конец окна |
days_mask |
Битмаска дней недели, как у cron |
Если задано — задача может сработать только в это окно. Если оставлено пустым — окна нет, задача может срабатывать всегда.
Действия¶
Выполняются последовательно в порядке, как они перечислены в форме.
relay¶
| Поле | Назначение |
|---|---|
device_id |
ID реле |
state |
on, off, toggle |
udp_send¶
| Поле | Назначение |
|---|---|
event |
Имя события (строка ≤16 символов) |
payload |
Опциональная нагрузка (JSON-строка) |
Шлёт событие в mesh-группу. Все соседи с подходящим udp_event-триггером сработают.
reboot¶
Перезагружает плату. Действий после него в цепочке не будет, очевидно.
wait¶
| Поле | Назначение |
|---|---|
sec |
Задержка перед следующим действием, в секундах |
Полезно для последовательностей «включи реле → подожди 5 сек → выключи».
reset_pulse¶
| Поле | Назначение |
|---|---|
device_id |
ID pulse_counter устройства |
Сбрасывает накопленный счёт обратно в 0.
Кнопка «▶ Запустить сейчас»¶
Каждая задача имеет кнопку ручного запуска — POST /api/v1/tasks/{id}/run. Уважает окно валидности и условия. Полезно для тестирования: «работает ли мой сценарий?» — нажал, посмотрел в RAM-логе.
Лимиты¶
| Платформа | TASKS_MAX |
|---|---|
| ESP8266 | 12 |
| ESP32 | 32 |
Дальше¶
- Готовые сценарии — рабочие конфигурации с разбором.
- Архитектура плагинов — как добавить свой trigger/condition/action.