# LightHub: Описание модулей и компонентов > Полное инженерное описание всех основных модулей LightHub с примерами конфигурации и протоколами управления. > Предназначено для разработчиков, интеграторов и системных инженеров. --- ## Содержание 1. [Выходные модули (Out)](#выходные-модули) - [out_Multivent](#out_multivent---многоканальный-кондиционер-вентиляция) - [out_AC](#out_ac---управление-кондиционером) - [out_PID](#out_pid---пид-регулятор) - [out_Relay](#out_relay---электромагнитное-реле) - [out_PWM](#out_pwm---широтно-импульсная-модуляция) - [out_DMX](#out_dmx---dmx512-управление-светом) - [out_Motor](#out_motor---управление-двигателем) - [out_Elevator](#out_elevator---управление-лифтом) - [out_Humidifier](#out_humidifier---управление-увлажнителем) - [out_Counter](#out_counter---автосуммирующий-счётчик) - [out_SPILed](#out_spiled---управление-светодиодами) - [out_Mercury](#out_mercury---счётчик-меркурий) - [out_Sprinkler](#out_sprinkler---система-полива) - [out_UARTBridge](#out_uartbridge---uart-мост) 2. [Входные модули (In)](#входные-модули) - [in_CCS811_HDC1080](#in_ccs811_hdc1080---датчик-качества-воздуха) --- # Выходные модули ## out_Multivent — Многоканальный кондиционер/вентиляция ### Описание Модуль управления многозональными системами кондиционирования воздуха и центральной вентиляции. **Основные функции:** - Управление центральной установкой (компрессор, вентилятор) - Независимое регулирование температуры для каждой зоны/комнаты - PID-контроллеры для стабилизации микроклимата - Автоматическая балансировка воздушного потока между зонами - Каскадное управление задвижками и затворами ### Тип в JSON ``` [18, {zones_and_settings}] ``` Рабочая форма: `[[18, 5], {зоны}]` (itemArg должен быть объектом, иначе «VENT: config failed»). ### Формат конфигурации ```json "vac": [ [18, 5], { "": { "val": {"emit": "home/ac/temp"}, "mode": {"emit": "home/ac/mode"} }, "bedroom": { "fan": {"emit": "home/bedroom/fan"}, "cmd": {"emit": "home/bedroom/cmd"}, "out": {"emit": "home/bedroom/out"}, "V": 40, "pid": [1.0, 0.05, 0.02, 5.0], "set": {"emit": "home/bedroom/setpoint"}, "val": {"emit": "home/bedroom/temp"} } } ] ``` Ключ `""` — AC-узел (центральная установка). Ключ «supress» пишется с одной «s». ### Ключевые параметры | Параметр | Тип | Описание | |----------|-----|---------| | `V` | int | Номинальный объём воздуха (м³/ч) | | `pid` | массив ≥3 | [kP, kI, kD, dT] (ключи строчные), dT — деф 5 | | `AlarmTime` | float | Таймаут аларма (с), деф 120 | | `AlarmValue` | float | Значение при аларме, деф 0 | | `set` | float | Требуемая температура | | `val` | float | Текущая температура | | `fan` | int (0-255) | Открытие вентилятора | | `cmd` | int | Команда (коды см. ниже) | | `out` | int (0-255) | Выход задвижки | ### Режимы команд (коды itemCmd) | Команда | Код | |---------|-----| | ON | 1 | | OFF | 2 | | REST | 3 | | TOGGLE | 4 | | HALT | 5 | | XON | 6 | | XOFF | 7 | | AUTO | 0xE (14) | | FAN_ONLY | 0xF (15) | | HIGH | 0x10 (16) | | MEDIUM | 0x11 (17) | | LOW | 0x12 (18) | | HEAT | 0x14 (20) | | COOL | 0x15 (21) | | DRY | 0x16 (22) | ### Примеры Полное описание с примерами: [multivent_module_description.md](../modules/multivent_module_description.md) --- ## out_AC — Управление кондиционером ### Описание Управление одиночным кондиционером через проприетарный UART-протокол Haier (9600, кадры 13 байт — команда / 37 байт — ответ). НЕ Modbus. **Основные функции:** - Управление режимом (HEAT, COOL, FAN_ONLY, DRY, AUTO) - Управление скоростью вентилятора (LOW, MEDIUM, HIGH, OFF или число) - Управление температурой - Поддержка качания жалюзей (SWING) - Блокировка пульта - Режим QUIET (тихий режим) ### Тип в JSON ``` [10, portNum(0-3)] ``` Опционально — emit-объект (arg[1]) с ключами `fan`, `set`, `cmd`, `temp`. ### Формат конфигурации ```json "air_conditioner": [ 10, [ 0, { "set": {"emit": "home/ac/setpoint"}, "fan": {"emit": "home/ac/fan_speed"}, "cmd": {"emit": "home/ac/mode"}, "temp": {"emit": "home/ac/temp"} } ] ] ``` ### Параметры управления | Параметр | Значение | Описание | |----------|----------|---------| | `portNum` | 0-3 | Номер UART-порта (0 = основной Serial) | | `/set` | 16-40 | Установка температуры | | `/fan` | LOW/MEDIUM/HIGH/OFF или число | Скорость вентилятора | | `/cmd` | AUTO/HEAT/COOL/FAN_ONLY/DRY | Текстовые режимы (payload команды) | | `/mode` | число (B_MODE) | Режим | | `/lock` | ON/OFF | Блокировка пульта | | `/swing` | ON/OFF | Качание жалюзей | | `/quiet` | ON/OFF | Тихий режим (legacy «queit» принимается; статус публикуется в `/quiet`) | | `/raw` | - | Сырой кадр протокола | --- ## out_PID — PID-регулятор ### Описание Универсальный PID-контроллер для стабилизации любых процессов (температура, влажность, давление и т.д.). **Основные функции:** - Независимое PID-регулирование с тремя коэффициентами - Регулируемый период сэмплирования - Будильник при выходе за пределы диапазона - Защита от интегральной раскрутки ### Тип в JSON ``` [13, [[kP, kI, kD, dT, alarmTO, alarmVal, outMin, outMax]], outputExecObj, cascadeExecObj], setpoint ``` ### Формат конфигурации ```json "temperature_controller": [ 13, [ [1.0, 0.05, 0.02, 5, 600000, 0, 0, 255], {"emit": "heating/power"}, {"emit": "cascade/out"} ], 21.5 ] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `kP` | float | Пропорциональный коэффициент (деф 1.0) | | `kI` | float | Интегральный коэффициент (деф 0.0) | | `kD` | float | Дифференциальный коэффициент (деф 0.0) | | `dT` | float | Период сэмплирования (сек), деф 5 | | `alarmTO` | int | Таймаут (деф 600*1000 мс) | | `alarmVal` | float | Принудительное значение выхода при аларме | | `outMin` | float | Мин. выход, деф 0 | | `outMax` | float | Макс. выход, деф 255 | Вход регулятора — `/val`, setpoint задаётся как 3-й элемент item (начальное значение). Диапазоны kP/kI/kD/dT кодом не валидируются. Допускается и массив из 6 элементов: `[kP, kI, kD, dT, alarmTO, alarmVal]`. --- ## out_Relay — Электромагнитное реле ### Описание Управление электромагнитными реле через цифровой выход микроконтроллера. **Основные функции:** - Включение/отключение нагрузки - Поддержка инвертированной логики - Управление периодом переключения ### Тип в JSON ``` RELAY: [6, pin, val, cmd] RELAYX: [16, [pin, period_сек], val, cmd] ``` ### Формат конфигурации ```json "pump_relay": [6, 33] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `pin` | int | Номер GPIO-пина; инверсия логики — отрицательный пин | | `period` | int | Только RELAYX: период срабатывания (секунды, в коде умножается на 1000), деф 5000 мс | ### Управление ``` Отправить: home/pump_relay Значение: 0 (OFF) или 1 (ON) ``` --- ## out_PWM — Широтно-импульсная модуляция ### Описание Управление PWM для регулирования яркости светодиодов, скорости двигателей, интенсивности нагрузок. **Основные функции:** - Регулирование от 0% до 100% - Поддержка RGB-управления (в base-классе colorChannel) - Число пинов (1-5) определяет режим: CH_PWM / RGB / RGBW / RGBWW ### Тип в JSON ``` [3, [pin0, pin1, ...]] ``` Частота из конфигурации не читается. ### Формат конфигурации ```json "led_brightness": [ 3, [5] ] ``` ### Управление ``` Отправить: home/led/brightness Значение: 0-255 (0=0%, 255=100%) ``` --- ## out_DMX — DMX512 управление светом ### Описание Управление световыми приборами по протоколу DMX512 (театральное и архитектурное освещение). **Основные функции:** - Поддержка до 512 каналов - Управление цветом и интенсивностью - Синхронизированное обновление ### Тип в JSON ``` [0, [addr1, addr2, ...]] ``` Список адресов DMX-каналов (1-5); объекта `{settings}` нет. ### Формат конфигурации ```json "stage_lighting": [ 0, [1, 2, 3, 4] ] ``` ### Управление ``` Отправить: home/lighting/color Значение: {"r":255, "g":128, "b":0} ``` --- ## out_Motor — Управление двигателем ### Описание Управление моторами с обратной связью по положению (рольставни, жалюзи, шторы). **Основные функции:** - Управление направлением (вверх/вниз) - Обратная связь по положению - Защита от перегрузки по времени - Плавное позиционирование ### Тип в JSON ``` [12, [pinUp, pinDown, pinFeedback, fbOpen, fbClosed, maxOnTime_ms]] ``` ### Формат конфигурации ```json "roller_blind": [ 12, [ 32, 33, 34, 0, 1023, 10000 ] ] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `pinUp` | int | GPIO для движения вверх (инверсия — отрицательный пин) | | `pinDown` | int | GPIO для движения вниз | | `pinFeedback` | int | GPIO обратной связи (аналоговый) | | `fbOpen` | int | Значение обратной связи (открыто) | | `fbClosed` | int | Значение обратной связи (закрыто) | | `maxOnTime_ms` | int | Макс. время работы (мс), деф 10000 | ### Команды Позиционное управление: цель — значение 0-255. `ON` → движение к заданной позиции, `OFF`/`HALT` → 0. Команд UP/DOWN/STOP нет. --- ## out_Elevator — Управление лифтом ### Описание Управление лифтом через UART или интерфейс вызова. Синхронизация между контроллерами через сетевой мост. **Основные функции:** - Управление вызовом лифта - Передача команды на нужный этаж - Контроль состояния лифта - Дублирование по UART ### Тип в JSON ``` [19, {"serial": "8N1", "baud": 19200, "log": ...}] ``` Реализован (компилируется с ELEVATOR_ENABLE). itemArg — объект. Порты фиксированные (MODULE_UATRBRIDGE_UARTA/B). ### Формат конфигурации ```json "elevator": [ 19, { "serial": "8N1", "baud": 19200, "log": true } ] ``` ### Параметры | Параметр | Значение | Описание | |----------|----------|---------| | `serial` | "8N1" | Параметры кадра (строка, деф "8N1") | | `baud` | 19200 | Скорость UART (деф 19200) | | `log` | bool | Логирование | --- ## out_Humidifier — Управление увлажнителем ### Описание Управление промышленным ультразвуковым или парогенерирующим увлажнителем с контролем давления и защитой от отказов. **Основные функции:** - Контроль давления в баке - Управление электромагнитными клапанами - Защита от перепада давления - Автоматическая очистка (FLUSH) - Состояния готовности и отказа ### Тип в JSON ``` [21, [[pumpPin, flushPin, pressurePin, maxPumpTime, idleTime, capacity, minLevel, startLevel], {зоны-краны}, motorCmdExecObj, faultCmdExecObj]] ``` ### Формат конфигурации ```json "mist_humidifier": [ 21, [ [25, 26, 35, 300, 60000, 50, 10, 20], { "gate1": 27 } ] ] ``` Константы (не настраиваются из конфигурации): `MIN_OPERATION_PRESSURE` = 400, `MAX_OPERATION_PRESSURE` = 600, `FLUSH_TIMEOUT` = 125000 мс. ### Состояния | Состояние | Код | Описание | |-----------|-----|---------| | 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_FLUSH | 8 | Промывка системы | | H_IDLE | 9 | Ожидание | | H_MOTOR_OFF_OK | 10 | Мотор выключен (окончательно) | | H_FAULT_PRESSURE | -1 | Ошибка давления | | H_FAULT_PRESSURE_KEEP | -2 | Давление не удерживается | | H_FAULT_OVERPRESSURE | -3 | Перепад давления | | H_FAULT_MOTOR_OFF | -4 | Ошибка: мотор не выключился | --- ## out_Counter — Автосуммирующий счётчик ### Описание Периодический автосуммированный счётчик: каждые `period` секунд к значению прибавляется `impulse` (контроль расхода воды, газа или подсчёт событий). Не является счётчиком GPIO-импульсов. **Основные функции:** - Периодическое прибавление импульса - Накопление значений ### Тип в JSON ``` [20, [impulse, periodSec], val] ``` ### Формат конфигурации ```json "water_meter": [ 20, [0.02, 60] ] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `impulse` | float | Значение, прибавляемое за период (arg[0]) | | `periodSec` | int | Период суммирования (секунды, arg[1]) | --- ## out_SPILed — Управление светодиодами ### Описание Управление адресуемыми RGB-светодиодами (WS2812, APA102) через SPI или GPIO. **Основные функции:** - Независимое управление каждым светодиодом - RGB-цветовая палитра - Эффектов/анимаций нет — только установка цвета/вкл-выкл по диапазону светодиодов ### Тип в JSON ``` [11, [data_pin, numLeds, ledsType]] ``` Объект `{settings}` не читается. ### Формат конфигурации ```json "led_strip": [ 11, [ 13, 43 ] ] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `data_pin` | int | GPIO пин (данные) | | `numLeds` | int | Количество светодиодов, деф 43 | | `ledsType` | int | Код NeoPixel (NEO_BRG+NEO_KHZ800 и т.п.) | ### Управление ``` Отправить: home/leds/color Значение: {"r":255, "g":0, "b":128} Отправить: home/leds/brightness Значение: 0-255 ``` --- ## out_Mercury — Счётчик Меркурий ### Описание Управление и опрос электросчётчиков серии Меркурий через UART Modbus RTU. **Основные функции:** - Чтение энергопотребления (активная/реактивная) - Контроль связи и состояния счётчика - Тарифные (пиковое/полупиковое/ночное) данные НЕ читаются — только M_NOW ### Тип в JSON ``` [22, [addr, baud, serialParam, accessLevel, password, pollingInterval_ms]] ``` ### Формат конфигурации ```json "electricity_meter": [ 22, [ 1, 9600, "8N1", 2, "123456", 10000 ] ] ``` ### Параметры | Параметр | Значение | Описание | |----------|----------|---------| | `addr` | int | Адрес Modbus | | `baud` | 9600 | Скорость UART (деф 9600) | | `serialParam` | "8N1" | Формат кадра (строка) | | `accessLevel` | int | Уровень доступа | | `password` | string(6) или массив 6 цифр | Пароль | | `pollingInterval_ms` | мс | Интервал опроса (деф 10000) | ### Публикуемые топики ``` /voltage/A, /voltage/B, /voltage/C - Напряжения по фазам /current/A, /current/B, /current/C - Токи по фазам /angles/A, /angles/B, /angles/C - Углы по фазам /counters/Active - Активная энергия /counters/Reactive - Реактивная энергия /power/A, /power/B, /power/C - Мощности по фазам /cosf/... - Коэффициенты мощности ``` --- --- ## out_Sprinkler — Система полива ### Описание Модуль управления многозональной системой автоматического полива с независимым управлением каждой зоной, таймерами и мониторингом. **Основные функции:** - Управление несколькими зонами полива независимо - Установка длительности полива для каждой зоны - Таймеры и расписания для автоматизации - Мониторинг прогресса выполнения - Поддержка ручного управления и автоматических режимов - Контроль состояния клапанов и электромагнитных выключателей ### Тип в JSON ``` [23, {конфиг}] ``` Корневой объект `""`: `vIn, rDren, rPump, wMax, wMin, fbDren, fbPump, wCtr, onFault(execObj)`; зоны — `pin`. ### Формат конфигурации ```json "irrigation_system": [ 23, { "": { "vIn": 5, "rDren": 6, "rPump": 7, "wMax": 8, "wMin": 9, "fbDren": 10, "fbPump": 11, "wCtr": 12, "onFault": {"emit": "sprinkler/fault"} }, "north_zone": { "pin": 21 }, "south_zone": { "pin": 22 }, "drip_zone": { "pin": 23 } } ] ``` Зона описывается ключом `pin`; ключи `cmd`/`val`/`set`/`@active` создаются автоматически. Ключей `enabled`/`time`/`progress`/`cycle` нет. ### Компоненты системы | Компонент | Выход/Вход | Назначение | |-----------|-----------|-----------| | **Бак полива** | wMax, wMin | Поплавки макс/мин уровня воды | | **Основной насос** | rPump, fbPump | Реле включения, датчик тока | | **Клапаны зон** | pin (для каждой зоны) | Оптореле открытия клапана | | **Клапан налива** | vIn | Оптореле подачи воды из водопровода | | **Дренажный насос** | rDren, fbDren | Реле включения, датчик тока | | **Водосчётчик** | wCtr (опционально) | Счётчик объёма воды | ### Параметры конфигурации | Параметр | Тип | Описание | |----------|-----|---------| | `vIn` | int | GPIO клапана налива из водопровода | | `wMax` | int | GPIO поплавка максимума в баке | | `wMin` | int | GPIO поплавка минимума в баке | | `rDren` | int | GPIO реле дренажного насоса | | `fbDren` | int | GPIO датчика дренажного насоса | | `rPump` | int | GPIO реле основного насоса полива | | `fbPump` | int | GPIO датчика основного насоса | | `wCtr` | int | GPIO счётчика воды (опционально) | ### Параметры зоны полива | Параметр | Тип | Описание | |----------|-----|---------| | `pin` | int | GPIO клапана зоны | `cmd`/`val`/`set`/`@active` создаются автоматически. `set` = требуемый объём полива или время (сек), 0 = неограниченно. ### Состояния системы налива | Состояние | Код | Описание | |-----------|-----|---------| | `SP_UNKNOWN` | 0 | Неизвестное состояние | | `SP_OFF` | 1 | Система выключена | | `SP_DREN_ON` | 2 | Дренажный насос включен | | `SP_DREN_OPERATE` | 3 | Дренажный насос работает | | `SP_DREN_EMPTY` | 4 | Дренажный колодец пуст | | `SP_VIN` | 5 | Наполнение из водопровода | | `SP_FULL` | 6 | Бак наполнен | | `SP_DRYING` | 7 | Осушение системы | | `SP_FAULT_VIN` | -1 | Ошибка: бак не наполнился из водопровода | | `SP_FAULT_DREN` | -2 | Ошибка: бак не наполнился из дренажа | ### MQTT топики управления #### Управление циклом полива (команды) ``` root/name/sprinkler/cmd ← ON # Запустить цикл полива root/name/sprinkler/cmd ← OFF # Остановить цикл полива root/name/sprinkler/cmd ← DRY # Режим осушения системы root/name/sprinkler/cmd ← RESET # Сбросить счётчики всех зон ``` XON/XOFF/FREEZE/UNFREEZE через `/cmd` не обрабатываются. FREEZE — через `/val < 0`. #### Управление конкретной зоной (например, "north") ``` root/name/sprinkler/north/cmd ← ON # Включить полив зоны root/name/sprinkler/north/cmd ← OFF # Выключить полив зоны root/name/sprinkler/north/set ← 60 # Требуемый объём/время полива (секунды или единицы счётчика) ``` #### Режимы системы (установка в /ctrl) ``` root/name/sprinkler/ctrl ← ENABLE # Разрешить полив root/name/sprinkler/ctrl ← DISABLE # Запретить полив (например, после дождя) root/name/sprinkler/ctrl ← FREEZE # Полная блокировка на зиму root/name/sprinkler/ctrl ← UNFREEZE # Снять блокировку зимы ``` #### Автоматическая блокировка по температуре ``` root/name/sprinkler/val ← -1 # При температуре < 0 система автоматически переходит в FREEZE ``` ### MQTT топики мониторинга (статус) ``` root/s_out/sprinkler/$state # Состояние системы налива воды (SP_*) root/s_out/sprinkler/$fault # Код ошибки (если есть) root/s_out/sprinkler/$wMax # ON/OFF - бак полный (поплавок макс) root/s_out/sprinkler/$wMin # ON/OFF - бак пуст (поплавок мин) root/s_out/sprinkler/$rPump # ON/OFF - реле основного насоса включено root/s_out/sprinkler/$fbPump # ON/OFF - основной насос работает (датчик тока) root/s_out/sprinkler/$rDren # ON/OFF - реле дренажного насоса включено root/s_out/sprinkler/$fbDren # ON/OFF - дренажный насос работает (датчик тока) root/s_out/sprinkler/$rVIN # ON/OFF - клапан налива из водопровода открыт root/s_out/sprinkler/set # Текущее значение счётчика воды root/s_out/sprinkler/north/$state # ON/OFF - зона поливается в настоящее время root/s_out/sprinkler/north/cmd # ON/OFF - состояние команды включения зоны root/s_out/sprinkler/north/set # Требуемый объём/время полива root/s_out/sprinkler/north/val # Текущий выполненный объём/время полива зоны root/s_out/sprinkler/south/$state # ON/OFF - зона поливается root/s_out/sprinkler/south/cmd # ON/OFF - состояние команды root/s_out/sprinkler/south/set # Требуемый объём/время root/s_out/sprinkler/south/val # Выполненный объём/время # Аналогично для остальных зон (например, "trees", "outlets" и т.д.) ``` ### Особенности | Особенность | Описание | |-----------|---------| | **Динамическое управление** | Все параметры можно изменять через MQTT в реальном времени | | **Восстановление состояния** | Значения `set` и `val` восстанавливаются из топиков `s_out` при перезагрузке | | **Водяная розетка** | Зона с `set=0` работает неограниченно (используется для розеток с шлангом) | | **Приоритет дренажа** | Система сначала пытается наполнить бак из дренажного колодца, затем из водопровода | | **Автозащита от мороза** | Значение `/val < 0` автоматически активирует режим FREEZE | | **Двухступенчатая блокировка** | DISABLE блокирует команды, FREEZE полностью заморозит систему | --- ## out_UARTBridge — UART мост ### Описание Создание прозрачного двунаправленного моста между двумя UART портами с сохранением данных и логированием. **Основные функции:** - Прозрачная маршрутизация UART↔UART - Буферизация пакетов (MAX_PDU = 64 байт) - Логирование трафика - Одна скорость на оба порта. Порты фиксированные: Serial1/Serial2 ### Тип в JSON ``` [15, {"serial": "8N1", "baud": 9600, "ip": ..., "port": ..., "hd": ..., "log": ..., "bond": ...}] ``` ### Формат конфигурации ```json "uart_gateway": [ 15, { "serial": "8N1", "baud": 9600 } ] ``` ### Параметры | Параметр | Тип | Описание | |----------|-----|---------| | `serial` | string | Формат кадра (8N1, 8E1, 8O1) | | `baud` | int | Скорость UART (одна на оба порта) | | `ip` | string | IP (мост через сеть) | | `port` | int | Порт | | `hd` | - | Опциональный ключ конфигурации | | `log` | bool | Логирование | | `bond` | - | Опциональный ключ конфигурации | --- # Входные модули ## in_CCS811_HDC1080 — Датчик качества воздуха ### Описание Комбинированный датчик для измерения качества воздуха с использованием: - **HDC1080** — датчик температуры и влажности (I2C) - **CCS811** — датчик CO₂ и TVOC (I2C) **Основные функции:** - Измерение температуры (-40...125°C) - Измерение влажности (0-100%) - Измерение eCO₂ (400-8192 ppm) - Измерение TVOC (0-1187 ppb) - Температурная компенсация ### Тип в JSON Это ДВА ВХОДА: `IN_CCS811` (T=5) и `IN_HDC1080` (T=6), конфигурируются как объекты входов в секции `"in"`. ### Формат конфигурации ```json "in": { "10": { "T": 5, "emit": "home/sensors/air" }, "20": { "T": 6, "emit": "home/sensors/room" } } ``` Адреса I2C захардкожены (CCS811 — 0x5A, HDC1080 — 0x40) и не настраиваются. Смещений и pollInterval в конфигурации нет. ### Выводимые параметры | Параметр | Единица | Диапазон | Описание | |----------|---------|----------|---------| | `temperature` | °C | -40...125 | Температура воздуха | | `humidity` | % | 0...100 | Относительная влажность | | `eCO2` | ppm | 400...8192 | Эквивалентный CO₂ | | `TVOC` | ppb | 0...1187 | Летучие органические соединения | ### Адреса I2C | Устройство | Адрес | Описание | |-----------|-------|---------| | CCS811 | 0x5A | По умолчанию (WAK на GND) | | CCS811 | 0x5B | Альтернативный (WAK на VDD) | | HDC1080 | 0x40 | Всегда фиксирован | ### MQTT маршрутизация Публикуется: `/T`, `/H`, `/CO2`, `/TVOC`, `/base`. ```json { "temp": {"emit": "home/sensors/air/temperature"}, "hum": {"emit": "home/sensors/air/humidity"}, "co2": {"emit": "home/sensors/air/co2"}, "tvoc": {"emit": "home/sensors/air/tvoc"} } ``` ### Примеры использования #### Мониторинг качества воздуха (CCS811) и температуры/влажности (HDC1080) ```json "in": { "10": { "T": 5, "emit": "home/sensors/living_room/air" }, "20": { "T": 6, "emit": "sensors/hvac/inlet" } } ``` --- ## Сводная таблица типов модулей | Модуль | Тип | Назначение | Управление | |--------|-----|-----------|-----------| | out_Multivent | 18 | Многоканальный кондиционер | PID + MQTT | | out_AC | 10 | Одиночный кондиционер | Проприетарный UART (Haier) | | out_PID | 13 | PID-регулятор | MQTT | | out_Relay | 6 | Электромагнитное реле | GPIO | | out_PWM | 3 | ШИМ-управление | GPIO-PWM | | out_DMX | 0 | DMX512 освещение | DMX512 | | out_Motor | 12 | Управление двигателем | GPIO-пары | | out_Elevator | 19 | Управление лифтом | UART | | out_Humidifier | 21 | Управление увлажнителем | GPIO + датчики | | out_Counter | 20 | Автосуммирующий счётчик | MQTT | | out_SPILed | 11 | Адресуемые светодиоды | SPI/GPIO | | out_Mercury | 22 | Электросчётчик | Modbus RTU | | out_Sprinkler | 23 | Система полива | GPIO + MQTT | | out_UARTBridge | 15 | UART-мост | UART↔UART | | in_CCS811_HDC1080 | входы T=5 (CCS811) / T=6 (HDC1080) | Качество воздуха | I2C | --- ## Общие принципы конфигурации ### 1. Подключение MQTT Все параметры с полем `emit` автоматически публикуются в MQTT: ```json "parameter": { "emit": "home/device/parameter" } ``` ### 2. Управление из MQTT Отправка значения: ``` mqtt publish home/device/parameter 128 ``` ### 3. Использование массивов Для нескольких параметров: ```json [ {"emit": "topic1"}, {"emit": "topic2"}, {"emit": "topic3"} ] ``` ### 4. Служебные параметры - `@V` (null) — не публиковать значения - `@S` (null) — не публиковать при сохранении - `@C` — служебное, не использовать --- ## Диагностика проблем ### Модуль не инициализируется Проверить: 1. Конфигурация JSON синтаксически корректна 2. GPIO-пины не конфликтуют 3. I2C/UART устройства подключены 4. Библиотеки установлены ### Нет связи с устройством 1. Проверить скорость UART (baud) 2. Проверить подключение TX/RX 3. Проверить адрес Modbus/I2C 4. Посмотреть лог сообщений ### Неустойчивые значения PID 1. Снизить Kp (коэффициент пропорциональности) 2. Увеличить dT (период сэмплирования) 3. Добавить Kd (демпфирование) --- **Версия документа:** 1.0 **Дата:** 2026-01-21 **Статус:** Утверждено