Files
lighthub/documentation/core/modules_description.md
T
andry 9a1c5eb143 fix(ac): rename quiet subitem 'queit' to 'quiet', keep legacy alias
The input subitem for the AC quiet mode was misspelled 'queit'. The code
now uses 'quiet' and still accepts 'queit' for backward compatibility;
docs updated accordingly. Removing the alias is tracked in BACKLOG.md.
2026-10-03 00:41:36 +03:00

1003 lines
36 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
**Статус:** Утверждено