# LightHub ## Полное инженерное описание JSON‑конфигурации контроллера > Документ предназначен для инженеров автоматизации, интеграторов и разработчиков. > Основан **строго** на официальной документации LazyHome / LightHub. > Описывает реальный формат конфигурации, без абстракций и допущений. --- ## 1. Назначение конфигурационного файла JSON‑конфигурация LightHub — это **единственный источник описания системы**. Она определяет: - сетевую интеграцию (MQTT, syslog) - подключённые физические интерфейсы - библиотеки Modbus‑устройств - логические объекты (items) - маршрутизацию данных и команд ❗ В LightHub **нет runtime‑конфигурации** — всё задаётся декларативно. --- ## 2. Общая структура JSON Корневой объект конфигурации содержит **независимые секции**: ```json { "mqtt": [], "topics": {}, "syslog": [], "ow": {}, "dmx": [], "modbus": {}, "in": {}, "items": {} } ``` Любая секция может отсутствовать, если функциональность не используется. --- ## 3. Секция `mqtt` ### 3.1 Назначение Определяет **MQTT‑клиент LightHub**. Контроллер всегда работает как клиент. ### 3.2 Формат ```json "mqtt": [ "client_id", "broker_host", 1883, "username", "password" ] ``` ### 3.3 Параметры (позиционные!) ``` | № | Назначение | |--|--| | 0 | MQTT Client ID | | 1 | DNS‑имя или IP брокера | | 2 | Порт (опционально, по умолчанию 1883) | | 3 | Логин (опционально) | | 4 | Пароль (опционально) | ``` ⚠️ Пароль рекомендуется задавать через CLI, а не хранить в JSON. --- ## 4. Секция `topics` ### 4.1 Назначение Глобальные настройки MQTT‑топиков. ### 4.2 Формат ```json "topics": { "root": "myhome" } ``` ### 4.3 Поведение Все MQTT‑топики, создаваемые LightHub, будут иметь вид: ``` // ``` --- ## 5. Секция `syslog` ### 5.1 Назначение Передача логов контроллера на удалённый syslog‑сервер (UDP). ### 5.2 Формат ```json "syslog": ["192.168.1.10", 514] ``` --- ## 6. Секция `ow` (1‑Wire) ### 6.1 Назначение Подключение датчиков 1‑Wire (DS18B20 и совместимые). ### 6.2 Формат ```json "ow": { "28FF641D2A1603B1": { "emit": "temp/outdoor", "item": "t_out" } } ``` ### 6.3 Поведение - ключ — **уникальный ROM‑код датчика** - `emit` — MQTT‑топик публикации - `item` — привязка к локальному объекту --- ## 7. Секция `modbus` — КЛЮЧЕВАЯ ### 7.1 Назначение Раздел `modbus` — это **библиотека описаний Modbus‑устройств**. ❗ Здесь **НЕ задаются реальные адреса устройств**, только шаблоны. --- ### 7.2 Общая структура ```json "modbus": { "device_type": { "baud": 9600, "serial": "8N1", "poll": {}, "par": {} } } ``` --- ### 7.3 Параметры линии #### `baud` Скорость RS‑485: 9600 / 19200 / 38400 / 115200 #### `serial` Формат кадра: - `8N1` — стандарт - `8E1`, `8O1` — с чётностью --- ### 7.4 Раздел `poll` Определяет **стратегию опроса**. ```json "poll": { "regs": [[0, 40], [100, 20]], "irs": [300, 301], "coils": [0, 1], "delay": 2000 } ``` #### Интерпретация - `regs` — Holding Registers (блоки) - `irs` — Input Registers - `coils` — Coil Registers - `delay` — задержка между циклами (мс) LightHub **объединяет регистры в минимальное число запросов**. --- ### 7.5 Раздел `par` — параметры устройства Каждый параметр описывает **один логический сигнал**. ```json "par": { "power": { "reg": 41, "type": "u8l", "id": 1, "map": {"cmd": [["OFF",0],["ON",1]]} } } ``` #### Поля параметра | Поле | Назначение | |--|--| | `reg` | Holding Register | | `ir` | Input Register | | `coil` | Coil | | `type` | Тип данных | | `id` | ID команды | | `map` | Преобразование | --- ### 7.6 Типы данных (`type`) | Тип | Описание | |--|--| | `i16` | int16 | | `u16` | uint16 | | `i32` | int32 | | `u32` | uint32 | | `i8h` | старший байт | | `i8l` | младший байт | --- ### 7.7 Подавление повторов По умолчанию значения публикуются **только при изменении**. Для отключения: ```json "@V": null ``` --- ## 8. Секция `items` — ЛОГИКА ### 8.1 Назначение `items` — это **логические объекты LightHub**. Они связывают: - Modbus параметры - MQTT - локальные объекты - входы --- ### 8.2 Общий формат ```json "item_name": [ TYPE, CONFIG ] ``` --- ### 8.3 Тип 14 — Modbus v2 ```json "vent1": [ 14, ["vent", { "power": {"emit": "home/vent/1/power"}, "fan": {"emit": "home/vent/1/fan"} }] ] ``` #### Расшифровка - `14` — тип объекта Modbus v2 - `vent` — имя шаблона из `modbus` - объект — привязка параметров --- ### 8.4 Мультивыход ```json "fan": [ {"emit": "a"}, {"emit": "b", "item": "local_fan"} ] ``` --- ## 9. Секция `in` — входы ### 9.1 Назначение Связывает физические входы с логикой. ```json "in": { "37": { "item": "light", "scmd": "TOGGLE", "rcmd": "TOGGLE" } } ``` --- ## 10. Полный пример ```json { "mqtt": ["lh1","192.168.1.10"], "topics": {"root":"home"}, "modbus": { "boiler": { "baud":9600, "serial":"8N1", "poll":{"regs":[[0,20]],"delay":1000}, "par":{ "temp":{"reg":5,"type":"i16"} } } }, "items":{ "boiler1":[14,["boiler",{"temp":{"emit":"home/boiler/temp"}}]] } } ``` --- ## 11. Инженерные правила - сначала описывается **modbus‑шаблон** - затем создаётся **item** - затем подключается MQTT - всегда минимизировать `poll` --- ## 12. Заключение LightHub использует **жёстко структурированную, декларативную модель**. Это даёт: - предсказуемость - надёжность - промышленный стиль конфигурации --- **Конец документа**