LightHub: Модули управления и конфигурация
Описание реальных параметров модулей, загружаемых кодом.
Основано исключительно на анализе исходных файлов C++.
Типы модулей (numbers в JSON)
| Type |
Модуль |
Класс |
Описание |
| 1 |
Реле |
out_relay |
Управление электромагнитным реле |
| 3 |
Мотор |
out_Motor |
Управление моторами с обратной связью |
| 6 |
Счётчик |
out_counter |
Счётчик импульсов |
| 9 |
PWM |
out_pwm |
Широтно-импульсная модуляция |
| 10 |
SPI LED |
out_SPILed |
Адресуемые светодиоды WS2812/APA102 |
| 11 |
DMX |
out_dmx |
DMX512 управление освещением |
| 14 |
Multivent |
out_Multivent |
Многоканальный кондиционер/вентиляция |
| 17 |
PID |
out_pid |
PID-регулятор |
| 20 |
Счётчик v2 |
out_counter |
Счётчик (улучшенная версия) |
| 21 |
Увлажнитель |
out_humidifier |
Форсуночное увлажнение |
| 22 |
Меркурий |
out_Mercury |
Счётчик электроэнергии Меркурий |
| 50 |
Лифт |
out_Elevator |
Управление лифтом (UART) |
| 55 |
UART Bridge |
out_UARTbridge |
UART-мост между портами |
| 128 |
AC |
out_AC |
Управление кондиционером |
| MBUS |
Modbus |
out_Modbus |
Modbus устройства (general) |
1. out_counter — Счётчик импульсов
Конфигурация (Type 20)
Параметры массива
| Индекс |
Тип |
Описание |
Пример |
| [0] |
float |
Импульс (накопление за период) |
0.02 л/импульс |
| [1] |
float |
Период накопления (сек) |
1.2 сек |
Логика работы
- Модуль ждёт команду (S_SET или любой CMD)
- При получении команды с процентом > 0 запускается таймер
- По истечении периода [1] добавляется значение [0] * TENS_BASE
- Считанное значение публикуется в MQTT
Пример использования
2. out_relay — Электромагнитное реле
Конфигурация
Параметры
| Индекс |
Тип |
Описание |
Диапазон |
| [0] |
int |
GPIO пин (отрицательное = инвертировать) |
0-54 |
| [1] |
float |
Период (мс) |
любой > 0 |
Логика
- HIGH (или LOW если инвертировано) = ON
- LOW (или HIGH если инвертировано) = OFF
- Если pin < 0, используется инверсия логики
Примеры
3. out_Motor — Управление моторами
Конфигурация
Параметры
| Индекс |
Тип |
Описание |
Диапазон |
Значение по умолч. |
| [0] |
int |
GPIO пин UP (отрицательное = инвертировать) |
0-54 |
32 |
| [1] |
int |
GPIO пин DOWN |
0-54 |
33 |
| [2] |
int |
GPIO пин обратной связи (аналоговый) |
0-54 |
0 |
| [3] |
int |
Значение обратной связи (открыто) |
0-1024 |
0 |
| [4] |
int |
Значение обратной связи (закрыто) |
0-1024 |
1024 |
| [5] |
int |
Максимальное время движения (мс) |
> 0 |
10000 |
Логика работы
- Модуль сравнивает targetPos (из команды 0-255) с curPos (из обратной связи)
- Если разница > POS_ERR (10):
- Если targetPos < curPos → движение вниз (pinDown)
- Если targetPos > curPos → движение вверх (pinUp)
- При достижении targetPos или maxOnTime мотор останавливается
- Защита от перегрузки: одновременно работают макс. MOTOR_QUOTE моторов (обычно 2)
Примеры
Управление
4. out_PID — PID-регулятор
Конфигурация
Параметры массива [0]
| Индекс |
Тип |
Описание |
Обязательный |
| [0] |
float |
Kp (пропорциональный) |
✓ |
| [1] |
float |
Ki (интегральный) |
✓ |
| [2] |
float |
Kd (дифференциальный) |
✓ |
| [3] |
float |
dT (период сэмплирования, сек) |
опционально (5 по умолч.) |
| [4] |
int |
Timeout будильника (сек) |
опционально |
| [5] |
float |
Порог будильника |
опционально |
| [6] |
float |
Минимум выхода |
опционально |
| [7] |
float |
Максимум выхода |
опционально |
Логика
- Kp < 0 → режим REVERSE (для охлаждения)
- Kp > 0 → режим DIRECT (для нагрева)
- Выход ограничивается [outMin, outMax]
- dT = период опроса в секундах
Примеры
5. out_PWM — ШИМ управление
Конфигурация
Параметры
| Индекс |
Тип |
Описание |
| [0] |
int |
Канал / GPIO пин |
| [1] |
int |
Частота PWM (Hz) |
Примеры
6. out_relay (Type 1) — детально
Загружаемые параметры (getConfig)
Вывод: модуль загружает ровно 2 параметра
7. out_counter (Type 20) — детально
Загружаемые параметры (Poll)
Логика:
- Модуль ждёт активации (getExt() = 0)
- При получении команды ON/HEAT/COOL/etc запускает таймер
- По истечении period добавляет impulse к накопленному значению
- Публикует обновлённое значение
8. out_Motor (Type 3) — детально
Загружаемые параметры (getConfig)
Обработка отрицательных значений
9. out_PID (Type 17) — детально
Загружаемые параметры (getConfig)
Использование вторых параметров
11. out_humidifier (Type 21) — Форсуночное увлажнение
Конфигурация
Параметры конфигурации [0] (массив переменной длины)
| Индекс |
Тип |
Описание |
По умолч. |
Обязателен |
| [0] |
int |
GPIO пин насоса (отрицательное = инвертировать) |
22 |
✓ |
| [1] |
int |
GPIO пин очистки (отрицательное = инвертировать) |
23 |
опционально |
| [2] |
int |
GPIO пин датчика давления (аналоговый) |
54 |
опционально |
| [3] |
int |
Макс. время работы насоса (сек) |
255 |
опционально |
| [4] |
int |
Время ожидания между циклами (мс) |
2500 |
опционально |
| [5] |
int |
Максимум одновременно открытых форсунок |
4 |
опционально |
| [6] |
int |
Минимальный уровень (%) для включения форсунки |
10 |
опционально |
| [7] |
int |
Пороговый уровень для запуска цикла (%) |
20 |
опционально |
Параметры зон (объект)
Каждая зона — это объект с полями:
| Поле |
Тип |
Описание |
N |
int |
Номер группы (1-4) для ограничения одновременно открытых клапанов |
pin |
int |
GPIO пин клапана (отрицательное = инвертировать логику) |
set |
float |
Требуемый уровень влажности (создаётся автоматически) |
cmd |
int |
Статус команды (создаётся автоматически) |
Счётчик импульсов
Пороги и состояния
Из кода определены константы:
Состояния модуля
| Состояние |
Код |
Описание |
| H_UNKNOWN |
0 |
Неизвестное состояние |
| H_READY |
1 |
Готов к работе |
| H_PREPARE_FOR_START |
2 |
Подготовка к пуску |
| H_PREPARE_VALVES |
3 |
Открытие форсунок |
| H_MOTOR_ON |
4 |
Включение насоса |
| H_OPERATE |
5 |
В режиме увлажнения |
| H_MOTOR_PAUSE |
6 |
Пауза насоса |
| H_MOTOR_OFF |
7 |
Выключение насоса |
| H_MOTOR_OFF_OK |
10 |
Насос остановлен |
| H_FLUSH |
8 |
Промывка системы |
| H_IDLE |
9 |
Ожидание |
| H_FAULT_PRESSURE |
-1 |
Ошибка давления |
| H_FAULT_PRESSURE_KEEP |
-2 |
Потеря давления во время работы |
| H_FAULT_OVERPRESSURE |
-3 |
Перепад давления |
| H_FAULT_MOTOR_OFF |
-4 |
Отказ насоса |
Логика работы
- Инициализация: модуль ждёт команду включения или когда уровень влажности > startLevel
- Подготовка: открывает клапаны форсунок, ждёт достижения давления
- Работа: включает насос, поддерживает давление в диапазоне [MIN_OPERATION_PRESSURE, MAX_OPERATION_PRESSURE]
- Балансировка: одновременно открыто не более
capacity форсунок из группы N
- Очистка: периодическая промывка при давлении FLUSH_PRESSURE
- Контроль: отключение при падении давления ниже MIN_OPERATION_PRESSURE
Примеры конфигурации
Простая система увлажнения
Многозональная система (из официального примера)
12. out_Mercury (Type 22) — Счётчик электроэнергии
Конфигурация
Параметры массива
| Индекс |
Тип |
Назначение |
| [0] |
int |
Адрес устройства (из item->getArg(0)) |
| [1] |
int |
Скорость UART |
| [2] |
string |
Параметры (8N1, 8E1, 8O1) |
| [3] |
int |
Уровень доступа (обычно 2) |
| [4] |
array/string |
Пароль (6 символов или массив 6 чисел) |
| [5] |
int |
Интервал опроса (мс) |
| [6] |
object |
Дополнительные параметры |
Примеры
13. out_AC (Type 128) — Управление кондиционером
Конфигурация
Загружаемые параметры
Поддерживаемые команды
Модуль работает с 37-байтовым протоколом:
| Байт |
Назначение |
| 13 |
Текущая температура |
| 17 |
Статус команды |
| 23 |
Режим (04=DRY, 01=COOL, 02=HEAT, 00=AUTO, 03=FAN) |
| 25 |
Скорость вентилятора |
| 27 |
SWING |
| 28 |
Блокировка пульта |
| 29 |
Питание |
| 31 |
Fresh |
| 35 |
Установка температуры |
14. out_Modbus (тип MBUS) — Modbus устройства
Конфигурация общая
Items использование Modbus
Загружаемые параметры
Типы данных в параметрах
| type |
Описание |
| i16 |
int16 |
| i32 |
int32 |
| u16 |
uint16 |
| u32 |
uint32 |
| i8h |
старший байт |
| i8l |
младший байт |
| u8h |
старший байт unsigned |
| u8l |
младший байт unsigned |
| x10 |
умножить на 10 |
| 100 |
умножить на 100 |
Параметры в "par"
15. out_Multivent (Type 14) — Многоканальный кондиционер
Конфигурация
Параметры зоны
| Параметр |
Тип |
Описание |
pid |
[Kp, Ki, Kd, dT] |
Коэффициенты PID |
set |
float |
Требуемая температура |
fan |
int (0-255) |
Текущий процент открытия |
cmd |
int |
Текущая команда |
item |
string |
Привязка к другому item |
V |
int |
Номинальный объём (для балансировки) |
Практические примеры конфигурации
Система со счётчиками
Система с реле и мотором
PID регулятор
Ключевые правила конфигурации
- Инверсия логики: отрицательное значение пина = инвертировать логику
- Единицы времени:
- counter/relay: float конвертируется в миллисекунды (* 1000)
- mercury: миллисекунды напрямую
- Параметры по умолчанию:
- relay period = 5000 мс
- motor maxOnTime = 10000 мс
- modbus baud = 9600
- modbus polling = 1000 мс
- Массивы переменной длины: PID и Mercury поддерживают опциональные параметры
Документ основан на анализе C++ кода без домыслов
Версия: 1.0
Дата: 2026-01-21
-