Плагины¶
Plug-and-play архитектура для расширения платы — добавили новый датчик / новый тип триггера / новое действие, не трогая ядро прошивки.
Четыре категории:
| Категория | Папка в репе | Что туда |
|---|---|---|
| Sensors | src/sensors/<name>/ |
Поддержка железа: датчики, реле, кнопки, ADC-входы |
| Triggers | src/triggers/<name>/ |
Типы триггеров (interval, cron, sun, device_state, ...) |
| Conditions | src/conditions/<name>/ |
Типы условий (time_window, wifi_rssi, peer_online, ...) |
| Actions | src/actions/<name>/ |
Типы действий (relay, udp_send, reboot, wait, ...) |
Дальше¶
- Архитектура плагинов — как это устроено внутри: registry, dispatch, prebuild-скрипты, dead code elimination.
- Свой плагин: пошагово — гайд от папки до зелёной сборки.
Что встроено¶
Sensors¶
| Plugin | Что |
|---|---|
relay |
Цифровое реле / MOSFET / симистор |
button |
Тактильная кнопка с debounce |
digital_input |
Логический вход (геркон, концевик) |
analog_input |
ADC с калибровкой |
pulse_counter |
Счётчик импульсов (счётчик воды, электричества) |
ds18b20 |
OneWire термометр |
dht22_temp / dht22_hum† |
DHT22 — температура / влажность |
bme280_temp / bme280_hum / bme280_pres† |
BME280 — температура / влажность / давление |
hc_sr04 |
Ультразвуковой дальномер |
† С v0.4.79 отключены в дефолтном sensors.enabled.json (heap optimization). Включить — добавить имя plugin'а в data/config/sensors.enabled.json и пересобрать.
Triggers¶
| Plugin | Что |
|---|---|
interval |
Каждые N секунд |
cron |
В заданное время (час+минута+дни недели) |
sun |
Восход / закат по координатам |
device_state |
Когда значение/состояние устройства пересекло порог |
udp_event |
Когда сосед по mesh прислал событие |
ping |
Когда хост стал доступен / недоступен |
ir_rx |
Когда поймали ИК-команду совпадающую с code (см. IR-модуль) |
Conditions¶
| Plugin | Что |
|---|---|
device_state |
Текущее значение устройства |
time_window† |
Время суток (отключён в дефолте — дублирует built-in validity задачи) |
wifi_rssi |
Уровень сигнала Wi-Fi |
mesh_peer |
Есть ли в эфире сосед с UUID |
task_state |
Состояние другой задачи |
uptime |
Время с последнего ребута |
Actions¶
| Plugin | Что |
|---|---|
relay |
Управление реле (on / off / toggle) |
udp_send |
Послать событие в mesh-группу |
reboot |
Перезагрузка платы |
wait |
Задержка перед следующим действием |
reset_pulse |
Сбросить счётчик импульсов |
ir_tx |
Отправить ИК-команду по коду (см. IR-модуль) |
Модули¶
В отличие от плагинов, модули — это платформенные фичи, всегда single-instance per board. Они включаются/выключаются compile-time флагами в platformio.ini, не через enabled.json.
| Module | Build flag | Default | Что |
|---|---|---|---|
| mesh | -D MESH_DISABLED=1 чтобы выключить |
on | UDP-связь между платами, триггеры от соседей |
| sleep | -D SLEEP_DISABLED=1 |
on | Deep sleep для батарейных нод |
| backup | -D BACKUP_DISABLED=1 |
on (off на ESP8266) | Export/import конфига через REST |
| sun | -D SUN_DISABLED=1 |
on | Триггеры sunrise/sunset (NOAA) |
| IR | -D IR_ENABLED=1 чтобы включить |
off | Учить/слать ИК-коды (TX/RX). См. IR-модуль |
UI на плате автоматически скрывает блоки/пункты меню отключённых модулей — capability discovery через /api/v1/system/info → features.
В Web-UI плата сама показывает текущий состав в Settings → Компоненты (/sensors.html) — там видно какие плагины и модули собраны в этой конкретной прошивке.
Включить / выключить¶
Каждая категория имеет файл data/config/<category>.enabled.json:
PIO-prebuild прочитает его до компиляции и исключит .cpp выключенных плагинов через build_src_filter. Linker DCE выбросит unused код. Получается экстремально маленький бинарник если включить только нужное (типовая экономия: −4 КБ RAM, −54 КБ Flash на ESP8266).
После правки *.enabled.json нужно перекомпилировать и залить — это compile-time, не runtime.
Минимум для нового устройства¶
Хотите подружить плату с новым датчиком, который мы не поддерживаем?
- Прочитайте Архитектуру, чтобы понять контракт.
- Пройдитесь по Свой плагин: пошагово с примером DS18B20.
- Если плагин общеполезный — отправьте PR в ctrl-board, будем рады добавить в коробку.