docs review

This commit is contained in:
2026-10-11 01:27:15 +03:00
parent e460ca647c
commit f787a16270
77 changed files with 1408 additions and 957 deletions
+5
View File
@@ -26,8 +26,13 @@ lighthub/modules/out_humidifier.h
spare_files/* spare_files/*
spare_files/ArduinoOTA/* spare_files/ArduinoOTA/*
lib/* lib/*
# site tools: WP session state (cookies, nonce, password) — never commit
tools/wp/state/
# doxygen generated output (published to lighthub.github.io, not to repo) # doxygen generated output (published to lighthub.github.io, not to repo)
doxygen-docs/html/ doxygen-docs/html/
doxygen-docs/latex/ doxygen-docs/latex/
doxygen-docs/rtf/ doxygen-docs/rtf/
doxygen-docs/doxygen-warnings.log doxygen-docs/doxygen-warnings.log
privateconf/*
tools/*
+27 -27
View File
@@ -8,56 +8,56 @@
| Файл | Я | Описание | | Файл | Я | Описание |
|--|--|--| |--|--|--|
| [light_hub_полное_инженерное_описание_json_конфигурации_v2.md](core/light_hub_полное_инженерное_описание_json_конфигурации_v2.md) | RU | Полное описание JSON-конфигурации: секции, 24 типа каналов (0-23), примеры | | [light\_hub\_полное\_инженерное\_описание\_json\_конфигурации\_v2.md](core/light_hub_полное_инженерное_описание_json_конфигурации_v2.md) | RU | Полное описание JSON-конфигурации: секции, 24 типа каналов (0-23), примеры |
| [channel_types_reference.md](core/channel_types_reference.md) | RU | Справочник типов каналов: коды, форматы настройки, команды, доступность по целям | | [channel\_types\_reference.md](core/channel_types_reference.md) | RU | Справочник типов каналов: коды, форматы настройки, команды, доступность по целям |
| [technical_channel_types_table.md](core/technical_channel_types_table.md) | RU | Техническая таблица типов каналов (формат item.h, суффиксы, матрица) | | [technical\_channel\_types\_table.md](core/technical_channel_types_table.md) | RU | Техническая таблица типов каналов (формат item.h, суффиксы, матрица) |
| [suffixes_reference.md](core/suffixes_reference.md) | RU | Справочник MQTT-суффиксов и команд, таблицы по типам каналов | | [suffixes\_reference.md](core/suffixes_reference.md) | RU | Справочник MQTT-суффиксов и команд, таблицы по типам каналов |
| [mqtt_api_reference.md](core/mqtt_api_reference.md) | RU | Полный справочник MQTT: топики, команды, HTTP API, $command/$stats, homie | | [mqtt\_api\_reference.md](core/mqtt_api_reference.md) | RU | Полный справочник MQTT: топики, команды, HTTP API, $command/$stats, homie |
| [mqtt_quick_reference.md](core/mqtt_quick_reference.md) | RU | Быстрая шпаргалка по MQTT и HTTP | | [mqtt\_quick\_reference.md](core/mqtt_quick_reference.md) | RU | Быстрая шпаргалка по MQTT и HTTP |
| [configuration_examples.md](core/configuration_examples.md) | RU | Примеры JSON-конфигураций по всем типам каналов | | [configuration\_examples.md](core/configuration_examples.md) | RU | Примеры JSON-конфигураций по всем типам каналов |
| [modules_real_config.md](core/modules_real_config.md) | RU | Реальные конфигурации по драйверам | | [modules\_real\_config.md](core/modules_real_config.md) | RU | Реальные конфигурации по драйверам |
| [modules_description.md](core/modules_description.md) | RU | Описание драйверов (out_*, in_*) с параметрами getConfig() | | [modules\_description.md](core/modules_description.md) | RU | Описание драйверов (out\_*, in\_*) с параметрами getConfig() |
| [cli_interface.md](core/cli_interface.md) | RU | CLI-интерфейс (USB-сериал) | | [cli\_interface.md](core/cli_interface.md) | RU | CLI-интерфейс (USB-сериал) |
| [web_ui.md](core/web_ui.md) | RU | Web-интерфейс и HTTP API настройки | | [web\_ui.md](core/web_ui.md) | RU | Web-интерфейс и HTTP API настройки |
| [config_file_workflow.md](core/config_file_workflow.md) | RU | Как контроллер загружает/сохраняет файл конфигурации | | [config\_file\_workflow.md](core/config_file_workflow.md) | RU | Как контроллер загружает/сохраняет файл конфигурации |
| [button_presses.md](core/button_presses.md) | RU | Двойные/тройные/длительные нажатия, несколько кнопок на одном входе | | [button\_presses.md](core/button_presses.md) | RU | Двойные/тройные/длительные нажатия, несколько кнопок на одном входе |
| [rotary_encoder.md](core/rotary_encoder.md) | RU | Rotary encoder (T:32): профили, примеры | | [rotary\_encoder.md](core/rotary_encoder.md) | RU | Rotary encoder (T:32): профили, примеры |
| [analog_inputs_and_map.md](core/analog_inputs_and_map.md) | RU | Аналоговые входы, преобразования `map` | | [analog\_inputs\_and\_map.md](core/analog_inputs_and_map.md) | RU | Аналоговые входы, преобразования `map` |
| [command_signature.md](core/command_signature.md) | RU | Криптоподпись команд (SHA256, protected pins) | | [command\_signature.md](core/command_signature.md) | RU | Криптоподпись команд (SHA256, protected pins) |
| [ota.md](core/ota.md) | RU | OTA-обновление прошивки по воздуху | | [ota.md](core/ota.md) | RU | OTA-обновление прошивки по воздуху |
## integrations/ — внешние системы ## integrations/ — внешние системы
| Файл | Я | Описание | | Файл | Я | Описание |
|--|--|--| |--|--|--|
| [can_lightspot.md](integrations/can_lightspot.md) | RU | CAN-шина, lightspot, протокол datagram, шлюз | | [can\_lightspot.md](integrations/can_lightspot.md) | RU | CAN-шина, lightspot, протокол datagram, шлюз |
| [modbus_setup.md](integrations/modbus_setup.md) | RU | Настройка Modbus (v2), режим шлюза IP-Modbus | | [modbus\_setup.md](integrations/modbus_setup.md) | RU | Настройка Modbus (v2), режим шлюза IP-Modbus |
| [1wire_sensors.md](integrations/1wire_sensors.md) | RU | Подключение 1-wire датчиков | | [1wire\_sensors.md](integrations/1wire_sensors.md) | RU | Подключение 1-wire датчиков |
| [homeassistant.md](integrations/homeassistant.md) | RU | Интеграция с Home Assistant | | [homeassistant.md](integrations/homeassistant.md) | RU | Интеграция с Home Assistant |
| [openhab.md](integrations/openhab.md) | RU | Интеграция с OpenHAB | | [openhab.md](integrations/openhab.md) | RU | Интеграция с OpenHAB |
| [work_remotely.md](integrations/work_remotely.md) | RU | Работа дистанционно (cloud-брокеры) | | [work\_remotely.md](integrations/work_remotely.md) | RU | Работа дистанционно (cloud-брокеры) |
## modules/ — функциональные модули ## modules/ — функциональные модули
| Файл | Я | Описание | | Файл | Я | Описание |
|--|--|--| |--|--|--|
| [multivent_module_description.md](modules/multivent_module_description.md) | RU | Многозональная вентиляция/кондиционирование (CH 18) | | [multivent\_module\_description.md](modules/multivent_module_description.md) | RU | Многозональная вентиляция/кондиционирование (CH 18) |
| [Sprinkler_module.md](modules/Sprinkler_module.md) | RU | Контроллер полива (CH 23): состояния, команды, FA | | [Sprinkler\_module.md](modules/Sprinkler_module.md) | RU | Контроллер полива (CH 23): состояния, команды, FA |
| [Sprinkler_HomeAssistant.md](modules/Sprinkler_HomeAssistant.md) | RU | HA-дашборд для поливального модуля | | [Sprinkler\_HomeAssistant.md](modules/Sprinkler_HomeAssistant.md) | RU | HA-дашборд для поливального модуля |
## hardware/ — железо ## hardware/ — железо
| Файл | Я | Описание | | Файл | Я | Описание |
|--|--|--| |--|--|--|
| [hardware_platforms.md](hardware/hardware_platforms.md) | RU | LightHub на разных платах/чипах | | [hardware\_platforms.md](hardware/hardware_platforms.md) | RU | LightHub на разных платах/чипах |
| [pins_io.md](hardware/pins_io.md) | RU | Карта входов/выходов платы LightHub (rev 2.0 / 2.2) | | [pins\_io.md](hardware/pins_io.md) | RU | Карта входов/выходов платы LightHub (rev 2.0 / 2.2) |
| [mac_address.md](hardware/mac_address.md) | RU | MAC-адрес контроллера: генерация, замена | | [mac\_address.md](hardware/mac_address.md) | RU | MAC-адрес контроллера: генерация, замена |
| [flashing.md](hardware/flashing.md) | RU | Заливка прошивки, список целей | | [flashing.md](hardware/flashing.md) | RU | Заливка прошивки, список целей |
## reference/ — справочные материалы ## reference/ — справочные материалы
- [dokuwiki-2026-10-02/](reference/dokuwiki-2026-10-02/README.md) — замороженный снапшот официальной Wiki (источник истины уровня 2) - [dokuwiki-2026-10-02/](reference/dokuwiki-2026-10-02/README.md) — замороженный снапшот официальной Wiki (источник истины уровня 2)
- [config_samples/](reference/config_samples/) — эталонные JSON-конфигурации - [config\_samples/](reference/config_samples/) — эталонные JSON-конфигурации
- [images/](reference/images/) — иллюстрации - [images/](reference/images/) — иллюстрации
## Прочее ## Прочее
+1 -1
View File
@@ -1,6 +1,6 @@
# Аналоговые входы и преобразования map # Аналоговые входы и преобразования map
> Источник: Wiki LightHub (lazyhome.ru), страницы «аналоговые_входы» и «использование_преобразований_map». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страницы «аналоговые\_входы» и «использование\_преобразований\_map». Снапшот от 2026-10-02.
## Общая информация ## Общая информация
+1 -1
View File
@@ -1,6 +1,6 @@
# Двойные, тройные, длительные нажатия # Двойные, тройные, длительные нажатия
> Источник: Wiki LightHub (lazyhome.ru), страницы «двойные_тройные_длительные_нажатия» и «несколько_кнопок_на_одном_входе». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страницы «двойные\_тройные\_длительные\_нажатия» и «несколько\_кнопок\_на\_одном\_входе». Снапшот от 2026-10-02.
Начиная с [этого коммита](https://github.com/anklimov/lighthub/commit/0044b741ac9f6fb8fc4b1ff8388e47c8bb8efd9b) у прошивки появилась возможность отслеживать одинарные, двойные, тройные, долгие нажатия Начиная с [этого коммита](https://github.com/anklimov/lighthub/commit/0044b741ac9f6fb8fc4b1ff8388e47c8bb8efd9b) у прошивки появилась возможность отслеживать одинарные, двойные, тройные, долгие нажатия
+26 -26
View File
@@ -18,7 +18,7 @@
| **5** | `THERMO` | Simple Thermostat | ON/OFF термостат с гистерезисом | `[GPIO_pin, целевая_температура_°C]` | | **5** | `THERMO` | Simple Thermostat | ON/OFF термостат с гистерезисом | `[GPIO_pin, целевая_температура_°C]` |
| **6** | `RELAY` | Relay Output | Электромагнитное реле ON/OFF | GPIO пин | | **6** | `RELAY` | Relay Output | Электромагнитное реле ON/OFF | GPIO пин |
| **7** | `GROUP` | Group Channel | Логическая группа каналов для синхронного управления | Массив строк с именами каналов | | **7** | `GROUP` | Group Channel | Логическая группа каналов для синхронного управления | Массив строк с именами каналов |
| **8** | `VCTEMP` | Vacom PID Thermo | Температура из VC-канала Vacom (ссылка на item типа CH_VC) | `[имя_канала_VC]` (строка) | | **8** | `VCTEMP` | Vacom PID Thermo | Температура из VC-канала Vacom (ссылка на item типа CH\_VC) | `[имя_канала_VC]` (строка) |
| **9** | `MBUSVC` | Vacom Modbus Motor | Управление мотор-регулятором вентилятора Vacom через Modbus | `[modbus_адрес, "имя_объекта"]` | | **9** | `MBUSVC` | Vacom Modbus Motor | Управление мотор-регулятором вентилятора Vacom через Modbus | `[modbus_адрес, "имя_объекта"]` |
| **10** | `ACHAIER` | Air Conditioner Haier | Управление кондиционером Haier по проприетарному UART-протоколу (9600) | `[порт_serial(0-3)]` | | **10** | `ACHAIER` | Air Conditioner Haier | Управление кондиционером Haier по проприетарному UART-протоколу (9600) | `[порт_serial(0-3)]` |
| **11** | `SPILED` | SPI LED Strip | Управление NeoPixel LED лентой (WS2812B и совместимые, один data-пин) | `[data_pin, numLeds(дефолт 43), ledsType]` | | **11** | `SPILED` | SPI LED Strip | Управление NeoPixel LED лентой (WS2812B и совместимые, один data-пин) | `[data_pin, numLeds(дефолт 43), ledsType]` |
@@ -29,7 +29,7 @@
| **16** | `RELAYPWM` | Relay PWM | Медленный PWM через реле для инертных систем | `[GPIO_pin, период_цикла_сек(дефолт 5)]` | | **16** | `RELAYPWM` | Relay PWM | Медленный PWM через реле для инертных систем | `[GPIO_pin, период_цикла_сек(дефолт 5)]` |
| **17** | `DMXRGBWW` | DMX RGBWW | DMX 512 выход RGB + теплый белый + холодный белый (5 каналов) | Номер стартового DMX канала | | **17** | `DMXRGBWW` | DMX RGBWW | DMX 512 выход RGB + теплый белый + холодный белый (5 каналов) | Номер стартового DMX канала |
| **18** | `VENTS` | Multiroom Ventilation | Многозональная вентиляция с каскадным управлением | `[объект_зон]` (без Modbus-адреса) | | **18** | `VENTS` | Multiroom Ventilation | Многозональная вентиляция с каскадным управлением | `[объект_зон]` (без Modbus-адреса) |
| **19** | `ELEVATOR` | Elevator Control | Управление лифтом | `{"serial":"8N1","baud":19200,"log":...}` (компилируется с ELEVATOR_ENABLE) | | **19** | `ELEVATOR` | Elevator Control | Управление лифтом | `{"serial":"8N1","baud":19200,"log":...}` (компилируется с ELEVATOR\_ENABLE) |
| **20** | `COUNTER` | Generic Counter | Счётчик импульсов (электроэнергия, газ, вода) | `[коэффициент_импульса, период_автосуммирования_сек]` | | **20** | `COUNTER` | Generic Counter | Счётчик импульсов (электроэнергия, газ, вода) | `[коэффициент_импульса, период_автосуммирования_сек]` |
| **21** | `HUM` | Humidifier | Управление увлажнителем воздуха (только один в системе) | `[[pumpPin, flushPin, pressurePin, maxPumpTime, idleTime, capacity, minLevel, startLevel], {зоны_краны}, motorExec, faultExec]` | | **21** | `HUM` | Humidifier | Управление увлажнителем воздуха (только один в системе) | `[[pumpPin, flushPin, pressurePin, maxPumpTime, idleTime, capacity, minLevel, startLevel], {зоны_краны}, motorExec, faultExec]` |
| **22** | `MERCURY` | Mercury Energy Meter | Счётчик энергии Mercury по RS485/Modbus | `[адрес, baud, "8N1", уровень_доступа, пароль, pollingInterval_ms(дефолт 10000)]` | | **22** | `MERCURY` | Mercury Energy Meter | Счётчик энергии Mercury по RS485/Modbus | `[адрес, baud, "8N1", уровень_доступа, пароль, pollingInterval_ms(дефолт 10000)]` |
@@ -53,33 +53,33 @@
## Примеры конфигурации по типам ## Примеры конфигурации по типам
### CH_DIMMER (0) - DMX выход с регулировкой ### CH\_DIMMER (0) - DMX выход с регулировкой
```json ```json
"dimmer1": [0, 5], // DMX канал 5 "dimmer1": [0, 5], // DMX канал 5
"dimmer2": [0, [1, 2, 3, 4]] // 4-канальный (RGBW), DMX 1-4 "dimmer2": [0, [1, 2, 3, 4]] // 4-канальный (RGBW), DMX 1-4
``` ```
### CH_RGBW (1) - DMX RGB+White ### CH\_RGBW (1) - DMX RGB+White
```json ```json
"rgb_light": [1, 10] // RGB+W на DMX 10-13 "rgb_light": [1, 10] // RGB+W на DMX 10-13
``` ```
### CH_RGB (2) - DMX RGB ### CH\_RGB (2) - DMX RGB
```json ```json
"rgb_light": [2, 15] // RGB начиная с 15-го (на DMX 15-17) "rgb_light": [2, 15] // RGB начиная с 15-го (на DMX 15-17)
``` ```
### CH_PWM (3) - GPIO PWM ### CH\_PWM (3) - GPIO PWM
```json ```json
"pwm1": [3, 9], // PWM на GPIO pin 9 "pwm1": [3, 9], // PWM на GPIO pin 9
"pwm_4ch": [3, [11, 12, 13, 14]] // 4-х канальный PWM "pwm_4ch": [3, [11, 12, 13, 14]] // 4-х канальный PWM
``` ```
### CH_MODBUS (4) - AC Dimmer (Legacy) ### CH\_MODBUS (4) - AC Dimmer (Legacy)
```json ```json
"mbus_dim": [4, [96, 0, 0, 255]] "mbus_dim": [4, [96, 0, 0, 255]]
@@ -89,20 +89,20 @@
// Макс значение: 255 // Макс значение: 255
``` ```
### CH_THERMO (5) - Термостат ### CH\_THERMO (5) - Термостат
```json ```json
"thermo_bath": [5, 24, 33] // GPIO 24, уставка 33°C "thermo_bath": [5, 24, 33] // GPIO 24, уставка 33°C
``` ```
### CH_RELAY (6) - Реле ### CH\_RELAY (6) - Реле
```json ```json
"relay1": [6, 23], // Реле на GPIO 23 "relay1": [6, 23], // Реле на GPIO 23
"relay2": ["RELAY", 28, 1, 1] // Реле, по умолчанию ON "relay2": ["RELAY", 28, 1, 1] // Реле, по умолчанию ON
``` ```
### CH_GROUP (7) - Группа каналов ### CH\_GROUP (7) - Группа каналов
```json ```json
"lights_all": [7, [ "lights_all": [7, [
@@ -112,19 +112,19 @@
"lights_bedroom": [7, ["lamp1", "rgb1"]] "lights_bedroom": [7, ["lamp1", "rgb1"]]
``` ```
### CH_VCTEMP (8) - Vacom PID терморегулятор ### CH\_VCTEMP (8) - Vacom PID терморегулятор
```json ```json
"fm_t": [8, "fm"] // строка-имя item типа CH_VC (9) "fm_t": [8, "fm"] // строка-имя item типа CH_VC (9)
``` ```
### CH_VC (9) - Vacom мотор регулятор ### CH\_VC (9) - Vacom мотор регулятор
```json ```json
"fan_speed": [9, [96, "a_ext"]] // Modbus адрес 96, "имя_объекта" (строка) "fan_speed": [9, [96, "a_ext"]] // Modbus адрес 96, "имя_объекта" (строка)
``` ```
### CH_AC (10) - Кондиционер Haier ### CH\_AC (10) - Кондиционер Haier
```json ```json
"ac_main": [10, 1] // номер порта serial (0-3) "ac_main": [10, 1] // номер порта serial (0-3)
@@ -132,13 +132,13 @@
// также доступны подканалы lock/swing/quiet/raw (/mode — число, текстовые режимы — в /cmd) // также доступны подканалы lock/swing/quiet/raw (/mode — число, текстовые режимы — в /cmd)
``` ```
### CH_SPILED (11) - SPI LED лента ### CH\_SPILED (11) - SPI LED лента
```json ```json
"led_strip": [11, [7, 8]] // data-пин GPIO7, 8 светодиодов "led_strip": [11, [7, 8]] // data-пин GPIO7, 8 светодиодов
``` ```
### CH_MOTOR (12) - Моторная задвижка с обратной связью ### CH\_MOTOR (12) - Моторная задвижка с обратной связью
```json ```json
"gate_motor": [12, [9, 10, 11, 0, 255, 30000]] "gate_motor": [12, [9, 10, 11, 0, 255, 30000]]
@@ -146,7 +146,7 @@
// fbOpen: 0, fbClosed: 255, maxOnTime_ms: 30000 // fbOpen: 0, fbClosed: 255, maxOnTime_ms: 30000
``` ```
### CH_PID (13) - PID регулятор ### CH\_PID (13) - PID регулятор
```json ```json
"pid_temp": [13, [ "pid_temp": [13, [
@@ -159,7 +159,7 @@
// min_out=0, max_out=255 // min_out=0, max_out=255
``` ```
### CH_MBUS (14) - Универсальный Modbus ### CH\_MBUS (14) - Универсальный Modbus
```json ```json
"mbus_generic": [14, [96, "temperature_sensor", { "mbus_generic": [14, [96, "temperature_sensor", {
@@ -168,7 +168,7 @@
}]] }]]
``` ```
### CH_UARTBRIDGE (15) - UART мост ### CH\_UARTBRIDGE (15) - UART мост
```json ```json
"uart_debug": [15, { "uart_debug": [15, {
@@ -180,19 +180,19 @@
}] }]
``` ```
### CH_RELAYX (16) - Медленный PWM через реле ### CH\_RELAYX (16) - Медленный PWM через реле
```json ```json
"relay_pwm": [16, [22, 60]] // GPIO 22, период цикла 60 сек "relay_pwm": [16, [22, 60]] // GPIO 22, период цикла 60 сек
``` ```
### CH_RGBWW (17) - DMX RGBWW ### CH\_RGBWW (17) - DMX RGBWW
```json ```json
"led_warm_cold": [17, 30] // DMX 30-34 (RGBWW, 5 каналов) "led_warm_cold": [17, 30] // DMX 30-34 (RGBWW, 5 каналов)
``` ```
### CH_MULTIVENT (18) - Многозональная вентиляция ### CH\_MULTIVENT (18) - Многозональная вентиляция
```json ```json
"multivent_system": [18, { "multivent_system": [18, {
@@ -206,14 +206,14 @@
}] }]
``` ```
### CH_COUNTER (20) - Счётчик по импульсам/времени ### CH\_COUNTER (20) - Счётчик по импульсам/времени
```json ```json
"energy_meter": [20, [0.02, 1.2]] // коэфф 0.02, период автосуммирования 1.2 с "energy_meter": [20, [0.02, 1.2]] // коэфф 0.02, период автосуммирования 1.2 с
"gas_counter": [20, 0] // без калибровки "gas_counter": [20, 0] // без калибровки
``` ```
### CH_HUMIDIFIER (21) - Увлажнитель ### CH\_HUMIDIFIER (21) - Увлажнитель
```json ```json
"humidifier1": [21, [13, 14, 15, 120, 15, 50, 5, 25]] "humidifier1": [21, [13, 14, 15, 120, 15, 50, 5, 25]]
@@ -221,7 +221,7 @@
// (только один humidifier в системе; компилируется с HUMIDIFIER_ENABLE) // (только один humidifier в системе; компилируется с HUMIDIFIER_ENABLE)
``` ```
### CH_MERCURY (22) - Счётчик энергии Mercury ### CH\_MERCURY (22) - Счётчик энергии Mercury
```json ```json
"mercury_meter": [22, [1, 9600, "8N1", 2, "123456", 10000]] "mercury_meter": [22, [1, 9600, "8N1", 2, "123456", 10000]]
@@ -233,7 +233,7 @@
// Интервал опроса: 10000 мс (дефолт) // Интервал опроса: 10000 мс (дефолт)
``` ```
### CH_SPRINKLR (23) - Система полива ### CH\_SPRINKLR (23) - Система полива
```json ```json
"irrigation_system": [23, { "irrigation_system": [23, {
@@ -281,7 +281,7 @@
- `HIGH` / `MEDIUM` / `LOW` — скорость вентилятора - `HIGH` / `MEDIUM` / `LOW` — скорость вентилятора
- `RGB` / `HSV` / `RESET` — цветовые команды (для RGB каналов) и сброс - `RGB` / `HSV` / `RESET` — цветовые команды (для RGB каналов) и сброс
Полный список команд: ON OFF REST TOGGLE HALT XON XOFF INCREASE DECREASE ENABLE DISABLE UNFREEZE FREEZE AUTO FAN_ONLY HIGH MEDIUM LOW HEAT_COOL HEAT COOL DRY RGB HSV RESET. Полный список команд: ON OFF REST TOGGLE HALT XON XOFF INCREASE DECREASE ENABLE DISABLE UNFREEZE FREEZE AUTO FAN\_ONLY HIGH MEDIUM LOW HEAT\_COOL HEAT COOL DRY RGB HSV RESET.
--- ---
+1 -1
View File
@@ -1,6 +1,6 @@
# Command Line Interface # Command Line Interface
> Источник: Wiki LightHub (lazyhome.ru), страница «cli_интерфейс». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «cli\_интерфейс». Снапшот от 2026-10-02.
Иначе, интерфейс командной строки. Иначе, интерфейс командной строки.
+5 -5
View File
@@ -1,10 +1,10 @@
# Криптоподпись команды # Криптоподпись команды
> Источник: Wiki LightHub (lazyhome.ru), страница «криптоподпись_команды». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «криптоподпись\_команды». Снапшот от 2026-10-02.
В том случае, если надо гарантировать, что, даже получив доступ к локальной сети, MQTT брокеру или HTTP API, потенциальный злоумышленник не сможет выполнить критичную команду (например, открытие ворот), можно использовать механизм цифровой подписи команды. В том случае, если надо гарантировать, что, даже получив доступ к локальной сети, MQTT брокеру или HTTP API, потенциальный злоумышленник не сможет выполнить критичную команду (например, открытие ворот), можно использовать механизм цифровой подписи команды.
Для задействования режима, необходимо пересобрать прошивку, добавив в приватный файл опций компиляции ([опции компиляции](https://www.lazyhome.ru/dokuwiki/doku.php?id=опции_компиляции)) (пример custom-build-flags/build_flags_lighthub21 для сборки под lighthub21) следующие опции (приведен пример): Для задействования режима, необходимо пересобрать прошивку, добавив в приватный файл опций компиляции ([опции компиляции](https://www.lazyhome.ru/dokuwiki/doku.php?id=опции_компиляции)) (пример custom-build-flags/build\_flags\_lighthub21 для сборки под lighthub21) следующие опции (приведен пример):
``` ```
-D CRYPT -D CRYPT
@@ -18,11 +18,11 @@
* Авторизованная сторона, желающая выполнить команду, вычисляет SHA256 хэш от строки, содержащей `<Salt><SHAREDSECRET><Команда>` * Авторизованная сторона, желающая выполнить команду, вычисляет SHA256 хэш от строки, содержащей `<Salt><SHAREDSECRET><Команда>`
* при отправке MQTT команды, авторизованная сторона добавляет в MQTT Payload полученный хэш цифровой подписи ДО команды, отделив подпись от тела команды знаком @ * при отправке MQTT команды, авторизованная сторона добавляет в MQTT Payload полученный хэш цифровой подписи ДО команды, отделив подпись от тела команды знаком @
* Контроллер, получив команду с подписью, производит аналогичную операцию по вычислению подписи и, если значения совпали, запрос считается авторизованным * Контроллер, получив команду с подписью, производит аналогичную операцию по вычислению подписи и, если значения совпали, запрос считается авторизованным
* Если команда направлена на управление пином контроллера, из перечня PROTECTED_PINS, заданного при компиляции прошивки, то она будет выполнена только том случае, если является авторизованной * Если команда направлена на управление пином контроллера, из перечня PROTECTED\_PINS, заданного при компиляции прошивки, то она будет выполнена только том случае, если является авторизованной
### Ограничения ### Ограничения
Если пин входит в перечень, заданный при компиляции в опции PROTECTED_PINS, то для него действуют следующие ограничения, смысл которых в том, чтобы сделать крайне сложным подачу высокого логического уровня на выход контроллера (открытие мощных ключей) не имея физического доступа к самому устройству: Если пин входит в перечень, заданный при компиляции в опции PROTECTED\_PINS, то для него действуют следующие ограничения, смысл которых в том, чтобы сделать крайне сложным подачу высокого логического уровня на выход контроллера (открытие мощных ключей) не имея физического доступа к самому устройству:
* Он не будет работать на канале типа термостат (THERMO) * Он не будет работать на канале типа термостат (THERMO)
* Для канала типа RELAY вывод работает только в не инверсном режиме. То есть, настройками не получится добиться перевода в состояние с высоким уровнем по-умолчанию, не получив подписанной команды. Настройки команды по умолчанию в файле конфигурации, также, будут проигнорированы. требуется цифровая подпись команде для управления таким каналом * Для канала типа RELAY вывод работает только в не инверсном режиме. То есть, настройками не получится добиться перевода в состояние с высоким уровнем по-умолчанию, не получив подписанной команды. Настройки команды по умолчанию в файле конфигурации, также, будут проигнорированы. требуется цифровая подпись команде для управления таким каналом
@@ -40,4 +40,4 @@
- Корректно: механизм реализован под флагом `CRYPT`: ключ `cryptoKey[] = QUOTE(SHAREDSECRET)` (`lighthub/main.cpp:110`), публикация `$salt` в топике устройства — `lighthub/main.cpp:2793-2804` (функция `publishStat()`, вызывается раз в 30 секунд из `thermoLoop()`, период `THERMOSTAT_CHECK_PERIOD=30000`, `lighthub/options.h:147`). - Корректно: механизм реализован под флагом `CRYPT`: ключ `cryptoKey[] = QUOTE(SHAREDSECRET)` (`lighthub/main.cpp:110`), публикация `$salt` в топике устройства — `lighthub/main.cpp:2793-2804` (функция `publishStat()`, вызывается раз в 30 секунд из `thermoLoop()`, период `THERMOSTAT_CHECK_PERIOD=30000`, `lighthub/options.h:147`).
- Корректно: подпись вычисляется как SHA256 от `<Salt><SHAREDSECRET><Команда>` — `checkToken()` в `lighthub/utils.cpp:901-942` (sha256.update: saltStr, cryptoKey, data). - Корректно: подпись вычисляется как SHA256 от `<Salt><SHAREDSECRET><Команда>` — `checkToken()` в `lighthub/utils.cpp:901-942` (sha256.update: saltStr, cryptoKey, data).
- Корректно: формат payload «подпись@команда» — разбор по символу `@` в `lighthub/item.cpp:752` (`char * authPos = strchr(payload,'@'); //token@command`). - Корректно: формат payload «подпись@команда» — разбор по символу `@` в `lighthub/item.cpp:752` (`char * authPos = strchr(payload,'@'); //token@command`).
- Корректно: ограничения для PROTECTED_PINS подтверждены в коде: THERMO — `main.cpp:3237`; RELAY — `modules/out_relay.cpp:39,110`; MOTOR — `modules/out_motor.cpp:53,77,102`; PWM требует авторизованную команду — `modules/out_pwm.cpp:129-165`; SPRINKLER (увлажнитель) — `modules/out_sprinkler.cpp:50`. Перечень пинов задается опцией `PROTECTED_PINS` (`lighthub/options.h:390-403`). - Корректно: ограничения для PROTECTED\_PINS подтверждены в коде: THERMO — `main.cpp:3237`; RELAY — `modules/out_relay.cpp:39,110`; MOTOR — `modules/out_motor.cpp:53,77,102`; PWM требует авторизованную команду — `modules/out_pwm.cpp:129-165`; SPRINKLER (увлажнитель) — `modules/out_sprinkler.cpp:50`. Перечень пинов задается опцией `PROTECTED_PINS` (`lighthub/options.h:390-403`).
+5 -5
View File
@@ -1,13 +1,13 @@
# Как LightHub работает с файлом конфигурации # Как LightHub работает с файлом конфигурации
> Источник: Wiki LightHub (lazyhome.ru), страница «как_lighthub_работает_с_файлом_конфигурации». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «как\_lighthub\_работает\_с\_файлом\_конфигурации». Снапшот от 2026-10-02.
## Первое включение ## Первое включение
По-умолчанию, контроллер получает динамический адрес локальной сети по DHCP По-умолчанию, контроллер получает динамический адрес локальной сети по DHCP
При этом, он записывает его в энергонезависимую память. И если при очередном перезапуске, DHCP сервер не доступен - он будет использовать последний известный IP адрес. При этом, он записывает его в энергонезависимую память. И если при очередном перезапуске, DHCP сервер не доступен - он будет использовать последний известный IP адрес.
Если надо определить статический адрес (а, также, GW, DNS, NetMask), это можно сделать при помощи команды ip в [cli_интерфейс](cli_interface.md) Если надо определить статический адрес (а, также, GW, DNS, NetMask), это можно сделать при помощи команды ip в [cli\_интерфейс](cli_interface.md)
Адрес будет сохранен в энергонезависимую память контроллера. Адрес будет сохранен в энергонезависимую память контроллера.
При включении, контроллер сначала проверяет наличие записанного в памяти конфигурационного файла. (У нового контроллера, а также, после перезаливки прошивки, конфигурационный файл отсутствует (кроме mega2560, в случае этого контроллера, конфигурация не утрачивается в процессе перепрошивки)). Затем контроллер поднимает сетевые интерфейсы, подключается к интернету, идет на сайт lazyhome.ru и пытается скачать конфигурационный файл JSON для своего МАС-адреса. (данное поведение можно отключить при помощи cli команды get OFF) При включении, контроллер сначала проверяет наличие записанного в памяти конфигурационного файла. (У нового контроллера, а также, после перезаливки прошивки, конфигурационный файл отсутствует (кроме mega2560, в случае этого контроллера, конфигурация не утрачивается в процессе перепрошивки)). Затем контроллер поднимает сетевые интерфейсы, подключается к интернету, идет на сайт lazyhome.ru и пытается скачать конфигурационный файл JSON для своего МАС-адреса. (данное поведение можно отключить при помощи cli команды get OFF)
@@ -26,7 +26,7 @@
Для того, чтобы быстро начать работу, этого достаточно. Для того, чтобы быстро начать работу, этого достаточно.
В дальнейшем, Автоматическую загрузку конфига можно отменить при помощи команды `get OFF` в [cli_интерфейс](cli_interface.md) или изменив конфиг через web интерфейс контроллера В дальнейшем, Автоматическую загрузку конфига можно отменить при помощи команды `get OFF` в [cli\_интерфейс](cli_interface.md) или изменив конфиг через web интерфейс контроллера
### Автономный метод настройки - веб интерфейс/плагин браузера ### Автономный метод настройки - веб интерфейс/плагин браузера
@@ -35,7 +35,7 @@
### Дополнительные возможности ### Дополнительные возможности
Также можно разместить настройки на своем собственном http сервере, в папке cnf. Формат имени файла: http://MY_CONFIG_SERVER/cnf/12-12-12-12-12-12.config.json (вместо 12-12-12-12-12-12 ваш mac адрес) Также можно разместить настройки на своем собственном http сервере, в папке cnf. Формат имени файла: http://MY\_CONFIG\_SERVER/cnf/12-12-12-12-12-12.config.json (вместо 12-12-12-12-12-12 ваш mac адрес)
После этого выполнить через CLI команду `get <MY_CONFIG_SERVER>` После этого выполнить через CLI команду `get <MY_CONFIG_SERVER>`
Контроллер запомнит ваш сервер и далее, будет загружать обновление конфига из этого источника. (на платформах STM, NRF пока не сохраняется) Контроллер запомнит ваш сервер и далее, будет загружать обновление конфига из этого источника. (на платформах STM, NRF пока не сохраняется)
@@ -46,7 +46,7 @@
После этого контроллер готов к автономной работе. После этого контроллер готов к автономной работе.
При загрузке конфигурации проверяется наличие изменений - если в памяти сохранен тот же конфиг, что имеется на портале, повторная загрузка и сохранение не происходит. При загрузке конфигурации проверяется наличие изменений - если в памяти сохранен тот же конфиг, что имеется на портале, повторная загрузка и сохранение не происходит.
Данное поведение можно изменить при помощи команды save в [cli_интерфейс](cli_interface.md) Данное поведение можно изменить при помощи команды save в [cli\_интерфейс](cli_interface.md)
``` ```
save ON - включить автосохранение конфига (по умолчанию) save ON - включить автосохранение конфига (по умолчанию)
+50 -50
View File
@@ -7,34 +7,34 @@
## Содержание ## Содержание
- [CH_DIMMER (0)](#ch_dimmer-0---dmx-диммер) - [CH\_DIMMER (0)](#ch_dimmer-0---dmx-диммер)
- [CH_RGBW (1)](#ch_rgbw-1---dmx-rgbwhite) - [CH\_RGBW (1)](#ch_rgbw-1---dmx-rgbwhite)
- [CH_RGB (2)](#ch_rgb-2---dmx-rgb) - [CH\_RGB (2)](#ch_rgb-2---dmx-rgb)
- [CH_PWM (3)](#ch_pwm-3---gpio-pwm) - [CH\_PWM (3)](#ch_pwm-3---gpio-pwm)
- [CH_MODBUS (4)](#ch_modbus-4---modbus-ac-dimmer-legacy) - [CH\_MODBUS (4)](#ch_modbus-4---modbus-ac-dimmer-legacy)
- [CH_THERMO (5)](#ch_thermo-5---onoff-термостат) - [CH\_THERMO (5)](#ch_thermo-5---onoff-термостат)
- [CH_RELAY (6)](#ch_relay-6---gpio-реле) - [CH\_RELAY (6)](#ch_relay-6---gpio-реле)
- [CH_GROUP (7)](#ch_group-7---группа-каналов) - [CH\_GROUP (7)](#ch_group-7---группа-каналов)
- [CH_VCTEMP (8)](#ch_vctemp-8---vacom-pid-терморегулятор) - [CH\_VCTEMP (8)](#ch_vctemp-8---vacom-pid-терморегулятор)
- [CH_VC (9)](#ch_vc-9---vacom-мотор-регулятор) - [CH\_VC (9)](#ch_vc-9---vacom-мотор-регулятор)
- [CH_AC (10)](#ch_ac-10---кондиционер-haier) - [CH\_AC (10)](#ch_ac-10---кондиционер-haier)
- [CH_SPILED (11)](#ch_spiled-11---spi-led-лента) - [CH\_SPILED (11)](#ch_spiled-11---spi-led-лента)
- [CH_MOTOR (12)](#ch_motor-12---шаговый-двигатель) - [CH\_MOTOR (12)](#ch_motor-12---шаговый-двигатель)
- [CH_PID (13)](#ch_pid-13---pid-регулятор) - [CH\_PID (13)](#ch_pid-13---pid-регулятор)
- [CH_MBUS (14)](#ch_mbus-14---universal-modbus) - [CH\_MBUS (14)](#ch_mbus-14---universal-modbus)
- [CH_UARTBRIDGE (15)](#ch_uartbridge-15---uart-мост) - [CH\_UARTBRIDGE (15)](#ch_uartbridge-15---uart-мост)
- [CH_RELAYX (16)](#ch_relayx-16---медленный-pwm-через-реле) - [CH\_RELAYX (16)](#ch_relayx-16---медленный-pwm-через-реле)
- [CH_RGBWW (17)](#ch_rgbww-17---dmx-rgbww) - [CH\_RGBWW (17)](#ch_rgbww-17---dmx-rgbww)
- [CH_MULTIVENT (18)](#ch_multivent-18---многозональная-вентиляция) - [CH\_MULTIVENT (18)](#ch_multivent-18---многозональная-вентиляция)
- [CH_ELEVATOR (19)](#ch_elevator-19---управление-лифтом) - [CH\_ELEVATOR (19)](#ch_elevator-19---управление-лифтом)
- [CH_COUNTER (20)](#ch_counter-20---счётчик-импульсов) - [CH\_COUNTER (20)](#ch_counter-20---счётчик-импульсов)
- [CH_HUMIDIFIER (21)](#ch_humidifier-21---управление-увлажнителем) - [CH\_HUMIDIFIER (21)](#ch_humidifier-21---управление-увлажнителем)
- [CH_MERCURY (22)](#ch_mercury-22---счётчик-энергии-mercury) - [CH\_MERCURY (22)](#ch_mercury-22---счётчик-энергии-mercury)
- [CH_SPRINKLER (23)](#ch_sprinkler-23---система-полива) - [CH\_SPRINKLER (23)](#ch_sprinkler-23---система-полива)
--- ---
## CH_DIMMER (0) - DMX диммер ## CH\_DIMMER (0) - DMX диммер
**Назначение**: Регулировка яркости одного или нескольких DMX каналов **Назначение**: Регулировка яркости одного или нескольких DMX каналов
@@ -69,7 +69,7 @@ myhome/s_out/lamp_bedroom/val → опубликованная яркость
--- ---
## CH_RGBW (1) - DMX RGBW ## CH\_RGBW (1) - DMX RGBW
**Назначение**: Управление RGB + White каналом через DMX (4 канала DMX) **Назначение**: Управление RGB + White каналом через DMX (4 канала DMX)
@@ -105,7 +105,7 @@ myhome/dev/rgb_light/RGB ← 255,0,0,100 (RGB+White)
--- ---
## CH_RGB (2) - DMX RGB ## CH\_RGB (2) - DMX RGB
**Назначение**: Управление RGB каналом через DMX (3 канала DMX) **Назначение**: Управление RGB каналом через DMX (3 канала DMX)
@@ -128,7 +128,7 @@ myhome/dev/mood_light/HSV ← 120,100,100 (зелёный в HSV)
--- ---
## CH_PWM (3) - GPIO PWM ## CH\_PWM (3) - GPIO PWM
**Назначение**: PWM выход через GPIO пины (для плат Arduino, ESP) **Назначение**: PWM выход через GPIO пины (для плат Arduino, ESP)
@@ -159,9 +159,9 @@ myhome/dev/pwm_dim/cmd ← ON
--- ---
## CH_MODBUS (4) - Modbus AC Dimmer (Legacy) ## CH\_MODBUS (4) - Modbus AC Dimmer (Legacy)
**Назначение**: Управление AC-диммером через Modbus RTU (устаревший тип, использовать CH_MBUS (14)) **Назначение**: Управление AC-диммером через Modbus RTU (устаревший тип, использовать CH\_MBUS (14))
### Синтаксис ### Синтаксис
@@ -183,11 +183,11 @@ myhome/dev/pwm_dim/cmd ← ON
} }
``` ```
⚠️ **Примечание**: Для новых проектов используйте CH_MBUS (14) вместо этого ⚠️ **Примечание**: Для новых проектов используйте CH\_MBUS (14) вместо этого
--- ---
## CH_THERMO (5) - ON/OFF Термостат ## CH\_THERMO (5) - ON/OFF Термостат
**Назначение**: Простой ON/OFF термостат с гистерезисом **Назначение**: Простой ON/OFF термостат с гистерезисом
@@ -219,7 +219,7 @@ myhome/dev/thermo_bath/cmd ← ON, OFF
--- ---
## CH_RELAY (6) - GPIO Реле ## CH\_RELAY (6) - GPIO Реле
**Назначение**: Простое электромагнитное реле ON/OFF или иное дискретное устройство **Назначение**: Простое электромагнитное реле ON/OFF или иное дискретное устройство
@@ -250,7 +250,7 @@ myhome/dev/relay_water/cmd ← ON, OFF, TOGGLE
--- ---
## CH_GROUP (7) - Группа каналов ## CH\_GROUP (7) - Группа каналов
**Назначение**: Логическая группа для синхронного управления несколькими каналами **Назначение**: Логическая группа для синхронного управления несколькими каналами
@@ -291,7 +291,7 @@ myhome/dev/lights_all/cmd ← SET 100 (установит яркость
--- ---
## CH_VCTEMP (8) - Vacom PID Терморегулятор ## CH\_VCTEMP (8) - Vacom PID Терморегулятор
**Назначение**: PID регулятор температуры для систем вентиляции Vacom **Назначение**: PID регулятор температуры для систем вентиляции Vacom
@@ -317,7 +317,7 @@ myhome/dev/lights_all/cmd ← SET 100 (установит яркость
--- ---
## CH_VC (9) - Vacom Мотор-регулятор ## CH\_VC (9) - Vacom Мотор-регулятор
**Назначение**: Управление мотор-регулятором вентилятора Vacom **Назначение**: Управление мотор-регулятором вентилятора Vacom
@@ -333,7 +333,7 @@ myhome/dev/lights_all/cmd ← SET 100 (установит яркость
--- ---
## CH_AC (10) - Кондиционер Haier ## CH\_AC (10) - Кондиционер Haier
**Назначение**: Управление кондиционером Haier по UART (проприетарный протокол Haier, 9600 baud, не Modbus) **Назначение**: Управление кондиционером Haier по UART (проприетарный протокол Haier, 9600 baud, не Modbus)
@@ -374,7 +374,7 @@ myhome/dev/ac_hall/fan ← 0, 1, 2, 3 (скорость)
--- ---
## CH_SPILED (11) - SPI LED Лента ## CH\_SPILED (11) - SPI LED Лента
**Назначение**: Управление адресуемой SPI LED лентой (WS2812B, APA102) **Назначение**: Управление адресуемой SPI LED лентой (WS2812B, APA102)
@@ -399,7 +399,7 @@ myhome/dev/ac_hall/fan ← 0, 1, 2, 3 (скорость)
--- ---
## CH_MOTOR (12) - Шаговый двигатель ## CH\_MOTOR (12) - Шаговый двигатель
**Назначение**: Управление шаговым двигателем с обратной связью (для задвижек, жалюзи) **Назначение**: Управление шаговым двигателем с обратной связью (для задвижек, жалюзи)
@@ -436,7 +436,7 @@ myhome/dev/gate_motor/val ← текущая позиция обратно
--- ---
## CH_PID (13) - PID Регулятор ## CH\_PID (13) - PID Регулятор
**Назначение**: Универсальный PID контроллер для процессов **Назначение**: Универсальный PID контроллер для процессов
@@ -484,7 +484,7 @@ myhome/dev/gate_motor/val ← текущая позиция обратно
--- ---
## CH_MBUS (14) - Universal Modbus ## CH\_MBUS (14) - Universal Modbus
**Назначение**: Универсальный Modbus канал с полной поддержкой шаблонизации **Назначение**: Универсальный Modbus канал с полной поддержкой шаблонизации
@@ -532,7 +532,7 @@ myhome/dev/gate_motor/val ← текущая позиция обратно
--- ---
## CH_UARTBRIDGE (15) - UART Мост ## CH\_UARTBRIDGE (15) - UART Мост
**Назначение**: Мост между двумя UART портами с отладкой через UDP **Назначение**: Мост между двумя UART портами с отладкой через UDP
@@ -558,7 +558,7 @@ myhome/dev/gate_motor/val ← текущая позиция обратно
--- ---
## CH_RELAYX (16) - Медленный PWM через реле ## CH\_RELAYX (16) - Медленный PWM через реле
**Назначение**: Медленный PWM через реле для инертных систем (тепловые системы, комплексы) **Назначение**: Медленный PWM через реле для инертных систем (тепловые системы, комплексы)
@@ -591,7 +591,7 @@ myhome/dev/floor_heating/val ← текущий PWM
--- ---
## CH_RGBWW (17) - DMX RGBWW ## CH\_RGBWW (17) - DMX RGBWW
**Назначение**: DMX управление RGB + тёплый белый + холодный белый (5 каналов) **Назначение**: DMX управление RGB + тёплый белый + холодный белый (5 каналов)
@@ -615,7 +615,7 @@ myhome/dev/led_tunable_white/RGB ← 255,128,0,200,50
--- ---
## CH_MULTIVENT (18) - Многозональная вентиляция ## CH\_MULTIVENT (18) - Многозональная вентиляция
**Назначение**: Каскадная система вентиляции с независимым регулированием по зонам **Назначение**: Каскадная система вентиляции с независимым регулированием по зонам
@@ -670,7 +670,7 @@ myhome/dev/multivent_main/bedroom/mode ← HEAT, COOL, FAN
--- ---
## CH_ELEVATOR (19) - Управление лифтом ## CH\_ELEVATOR (19) - Управление лифтом
**Назначение**: Управление лифтом (зарезервировано для будущего использования) **Назначение**: Управление лифтом (зарезервировано для будущего использования)
@@ -678,7 +678,7 @@ myhome/dev/multivent_main/bedroom/mode ← HEAT, COOL, FAN
--- ---
## CH_COUNTER (20) - Счётчик импульсов ## CH\_COUNTER (20) - Счётчик импульсов
**Назначение**: Счётчик импульсов (электроэнергия, газ, вода) **Назначение**: Счётчик импульсов (электроэнергия, газ, вода)
@@ -710,7 +710,7 @@ myhome/dev/gas_meter/val ← текущее значение (м³)
--- ---
## CH_HUMIDIFIER (21) - Управление увлажнителем ## CH\_HUMIDIFIER (21) - Управление увлажнителем
**Назначение**: Управление форсуночным увлажнителем воздуха **Назначение**: Управление форсуночным увлажнителем воздуха
@@ -743,7 +743,7 @@ myhome/dev/humidifier_room/cmd ← ON, OFF
--- ---
## CH_MERCURY (22) - Счётчик энергии Mercury ## CH\_MERCURY (22) - Счётчик энергии Mercury
**Назначение**: Счётчик энергии Mercury по RS485/Modbus **Назначение**: Счётчик энергии Mercury по RS485/Modbus
@@ -777,7 +777,7 @@ myhome/dev/energy_mercury/val ← текущие показания энерг
--- ---
## CH_SPRINKLER (23) - Система полива ## CH\_SPRINKLER (23) - Система полива
**Назначение**: Многозональная система автоматического полива с контролем воды и насосов **Назначение**: Многозональная система автоматического полива с контролем воды и насосов
@@ -1,6 +1,6 @@
# LightHub: Полное инженерное описание JSON‑конфигурации контроллера # LightHub: Полное инженерное описание JSON‑конфигурации контроллера
> **Документ актуален для ядра LightHub с типами каналов CH_DIMMER (0) - CH_SPRINKLER (23)** > **Документ актуален для ядра LightHub с типами каналов CH\_DIMMER (0) - CH\_SPRINKLER (23)**
> >
> Предназначен для инженеров автоматизации, интеграторов и разработчиков. > Предназначен для инженеров автоматизации, интеграторов и разработчиков.
> Основан **строго** на официальной документации LazyHome / LightHub и исходном коде. > Основан **строго** на официальной документации LazyHome / LightHub и исходном коде.
@@ -188,7 +188,7 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
| Параметр | Описание | | Параметр | Описание |
|--|--| |--|--|
| GPIO pin | Не используется: пин фиксирован (AVR_DMXOUT_PIN) | | GPIO pin | Не используется: пин фиксирован (AVR\_DMXOUT\_PIN) |
| Кол-во каналов | Число DMX каналов (обычно 512) — берётся только последний элемент массива | | Кол-во каналов | Число DMX каналов (обычно 512) — берётся только последний элемент массива |
--- ---
@@ -400,7 +400,7 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
### Типы каналов (0-23) ### Типы каналов (0-23)
**Полный справочник типов каналов см. в [channel_types_reference.md](channel_types_reference.md)** **Полный справочник типов каналов см. в [channel\_types\_reference.md](channel_types_reference.md)**
| Код | Тип | Описание | Конфигурация | | Код | Тип | Описание | Конфигурация |
|--|--|--|--| |--|--|--|--|
@@ -423,15 +423,15 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
| **16** | `RELAYX` | Медленный PWM | `[GPIO_pin, период_сек]` | | **16** | `RELAYX` | Медленный PWM | `[GPIO_pin, период_сек]` |
| **17** | `DMXRGBWW` | DMX RGBWW | Стартовый DMX канал | | **17** | `DMXRGBWW` | DMX RGBWW | Стартовый DMX канал |
| **18** | `VENTS` | Многозональная вентиляция | `{зоны}` (объект; рабочая форма `[[18,5], {зоны}]`) | | **18** | `VENTS` | Многозональная вентиляция | `{зоны}` (объект; рабочая форма `[[18,5], {зоны}]`) |
| **19** | `ELEVATOR` | Лифт (ELEVATOR_ENABLE) | `{serial, baud, log}` | | **19** | `ELEVATOR` | Лифт (ELEVATOR\_ENABLE) | `{serial, baud, log}` |
| **20** | `COUNTER` | Автосуммирующий счётчик | `[коэффициент_импульса, период_автосуммирования_сек]` | | **20** | `COUNTER` | Автосуммирующий счётчик | `[коэффициент_импульса, период_автосуммирования_сек]` |
| **21** | `HUM` | Увлажнитель (HUMIDIFIER_ENABLE) | `[[пины...], {зоны}, motorExecObj, faultExecObj]` | | **21** | `HUM` | Увлажнитель (HUMIDIFIER\_ENABLE) | `[[пины...], {зоны}, motorExecObj, faultExecObj]` |
| **22** | `MERCURY` | Счётчик энергии Mercury | `[адрес, baudrate, ...]` | | **22** | `MERCURY` | Счётчик энергии Mercury | `[адрес, baudrate, ...]` |
| **23** | `SPRINKLR` | Система полива | `{конфиг}` (корневой объект `""` + зоны с `pin`) | | **23** | `SPRINKLR` | Система полива | `{конфиг}` (корневой объект `""` + зоны с `pin`) |
### Примеры конфигурации items ### Примеры конфигурации items
#### CH_RELAY (6) — Простое реле #### CH\_RELAY (6) — Простое реле
```json ```json
"relay1": [6, 23], // Реле на GPIO 23 "relay1": [6, 23], // Реле на GPIO 23
@@ -439,7 +439,7 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
"relay3": [6, 28, 1, 1] // С начальным значением и командой "relay3": [6, 28, 1, 1] // С начальным значением и командой
``` ```
#### CH_DMX (0) — DMX выход #### CH\_DMX (0) — DMX выход
```json ```json
"lamp1": [0, 5], // DMX канал 5 "lamp1": [0, 5], // DMX канал 5
@@ -447,20 +447,20 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
"dmx_4ch": ["DMX", [1, 2, 3, 4]] // 4-х канальный диммер "dmx_4ch": ["DMX", [1, 2, 3, 4]] // 4-х канальный диммер
``` ```
#### CH_RGBW (1) — RGB+White #### CH\_RGBW (1) — RGB+White
```json ```json
"rgb_light": [1, 10] // RGB+W на DMX 10-13 "rgb_light": [1, 10] // RGB+W на DMX 10-13
``` ```
#### CH_PWM (3) — GPIO PWM #### CH\_PWM (3) — GPIO PWM
```json ```json
"pwm1": [3, 9], // PWM на GPIO 9 "pwm1": [3, 9], // PWM на GPIO 9
"pwm_4ch": [3, [11, 12, 13, 14]] // 4-х канальный PWM "pwm_4ch": [3, [11, 12, 13, 14]] // 4-х канальный PWM
``` ```
#### CH_GROUP (7) — Группа каналов #### CH\_GROUP (7) — Группа каналов
```json ```json
"lights_all": [7, [ "lights_all": [7, [
@@ -470,13 +470,13 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
"lights_bedroom": [7, ["lamp1", "rgb1", "relay1"]] "lights_bedroom": [7, ["lamp1", "rgb1", "relay1"]]
``` ```
#### CH_THERMO (5) — Термостат #### CH\_THERMO (5) — Термостат
```json ```json
"thermo_bath": [5, 24, 33] // GPIO 24, уставка 33°C "thermo_bath": [5, 24, 33] // GPIO 24, уставка 33°C
``` ```
#### CH_ACHAIER (10) — Кондиционер Haier #### CH\_ACHAIER (10) — Кондиционер Haier
Проприетарный UART-протокол (НЕ Modbus): Проприетарный UART-протокол (НЕ Modbus):
@@ -484,14 +484,14 @@ myhome/s_out/lamp1/hue # текущий оттенок RGB лампы
"ac_haier": [10, 0] // portNum 0-3 "ac_haier": [10, 0] // portNum 0-3
``` ```
#### CH_COUNTER (20) — Счётчик энергии #### CH\_COUNTER (20) — Счётчик энергии
```json ```json
"energy": [20, [0.02, 60]], // импульс, период автосуммирования (сек) "energy": [20, [0.02, 60]], // импульс, период автосуммирования (сек)
"gas": [20, 0] // без калибровки "gas": [20, 0] // без калибровки
``` ```
#### CH_MULTIVENT (18) — Многозональная вентиляция #### CH\_MULTIVENT (18) — Многозональная вентиляция
```json ```json
"multivent": [[18, 5], { "multivent": [[18, 5], {
@@ -684,5 +684,5 @@ LightHub использует **жёстко структурированную,
**Версия документа**: 2.0 **Версия документа**: 2.0
**Дата обновления**: 2025-01-24 **Дата обновления**: 2025-01-24
**Актуально для**: LightHub с CH_DIMMER (0) - CH_SPRINKLER (23) **Актуально для**: LightHub с CH\_DIMMER (0) - CH\_SPRINKLER (23)
**Источник**: [item.h](../../lighthub/item.h), [item.cpp](../../lighthub/item.cpp) **Источник**: [item.h](../../lighthub/item.h), [item.cpp](../../lighthub/item.cpp)
+70 -70
View File
@@ -8,29 +8,29 @@
## Содержание ## Содержание
1. [Выходные модули (Out)](#выходные-модули) 1. [Выходные модули (Out)](#выходные-модули)
- [out_Multivent](#out_multivent---многоканальный-кондиционер-вентиляция) - [out\_Multivent](#out_multivent---многоканальный-кондиционер-вентиляция)
- [out_AC](#out_ac---управление-кондиционером) - [out\_AC](#out_ac---управление-кондиционером)
- [out_PID](#out_pid---пид-регулятор) - [out\_PID](#out_pid---пид-регулятор)
- [out_Relay](#out_relay---электромагнитное-реле) - [out\_Relay](#out_relay---электромагнитное-реле)
- [out_PWM](#out_pwm---широтно-импульсная-модуляция) - [out\_PWM](#out_pwm---широтно-импульсная-модуляция)
- [out_DMX](#out_dmx---dmx512-управление-светом) - [out\_DMX](#out_dmx---dmx512-управление-светом)
- [out_Motor](#out_motor---управление-двигателем) - [out\_Motor](#out_motor---управление-двигателем)
- [out_Elevator](#out_elevator---управление-лифтом) - [out\_Elevator](#out_elevator---управление-лифтом)
- [out_Humidifier](#out_humidifier---управление-увлажнителем) - [out\_Humidifier](#out_humidifier---управление-увлажнителем)
- [out_Counter](#out_counter---автосуммирующий-счётчик) - [out\_Counter](#out_counter---автосуммирующий-счётчик)
- [out_SPILed](#out_spiled---управление-светодиодами) - [out\_SPILed](#out_spiled---управление-светодиодами)
- [out_Mercury](#out_mercury---счётчик-меркурий) - [out\_Mercury](#out_mercury---счётчик-меркурий)
- [out_Sprinkler](#out_sprinkler---система-полива) - [out\_Sprinkler](#out_sprinkler---система-полива)
- [out_UARTBridge](#out_uartbridge---uart-мост) - [out\_UARTBridge](#out_uartbridge---uart-мост)
2. [Входные модули (In)](#входные-модули) 2. [Входные модули (In)](#входные-модули)
- [in_CCS811_HDC1080](#in_ccs811_hdc1080---датчик-качества-воздуха) - [in\_CCS811\_HDC1080](#in_ccs811_hdc1080---датчик-качества-воздуха)
--- ---
# Выходные модули # Выходные модули
## out_Multivent — Многоканальный кондиционер/вентиляция ## out\_Multivent — Многоканальный кондиционер/вентиляция
### Описание ### Описание
@@ -100,7 +100,7 @@
| XON | 6 | | XON | 6 |
| XOFF | 7 | | XOFF | 7 |
| AUTO | 0xE (14) | | AUTO | 0xE (14) |
| FAN_ONLY | 0xF (15) | | FAN\_ONLY | 0xF (15) |
| HIGH | 0x10 (16) | | HIGH | 0x10 (16) |
| MEDIUM | 0x11 (17) | | MEDIUM | 0x11 (17) |
| LOW | 0x12 (18) | | LOW | 0x12 (18) |
@@ -110,18 +110,18 @@
### Примеры ### Примеры
Полное описание с примерами: [multivent_module_description.md](../modules/multivent_module_description.md) Полное описание с примерами: [multivent\_module\_description.md](../modules/multivent_module_description.md)
--- ---
## out_AC — Управление кондиционером ## out\_AC — Управление кондиционером
### Описание ### Описание
Управление одиночным кондиционером через проприетарный UART-протокол Haier (9600, кадры 13 байт — команда / 37 байт — ответ). НЕ Modbus. Управление одиночным кондиционером через проприетарный UART-протокол Haier (9600, кадры 13 байт — команда / 37 байт — ответ). НЕ Modbus.
**Основные функции:** **Основные функции:**
- Управление режимом (HEAT, COOL, FAN_ONLY, DRY, AUTO) - Управление режимом (HEAT, COOL, FAN\_ONLY, DRY, AUTO)
- Управление скоростью вентилятора (LOW, MEDIUM, HIGH, OFF или число) - Управление скоростью вентилятора (LOW, MEDIUM, HIGH, OFF или число)
- Управление температурой - Управление температурой
- Поддержка качания жалюзей (SWING) - Поддержка качания жалюзей (SWING)
@@ -158,8 +158,8 @@
| `portNum` | 0-3 | Номер UART-порта (0 = основной Serial) | | `portNum` | 0-3 | Номер UART-порта (0 = основной Serial) |
| `/set` | 16-40 | Установка температуры | | `/set` | 16-40 | Установка температуры |
| `/fan` | LOW/MEDIUM/HIGH/OFF или число | Скорость вентилятора | | `/fan` | LOW/MEDIUM/HIGH/OFF или число | Скорость вентилятора |
| `/cmd` | AUTO/HEAT/COOL/FAN_ONLY/DRY | Текстовые режимы (payload команды) | | `/cmd` | AUTO/HEAT/COOL/FAN\_ONLY/DRY | Текстовые режимы (payload команды) |
| `/mode` | число (B_MODE) | Режим | | `/mode` | число (B\_MODE) | Режим |
| `/lock` | ON/OFF | Блокировка пульта | | `/lock` | ON/OFF | Блокировка пульта |
| `/swing` | ON/OFF | Качание жалюзей | | `/swing` | ON/OFF | Качание жалюзей |
| `/quiet` | ON/OFF | Тихий режим (legacy «queit» принимается; статус публикуется в `/quiet`) | | `/quiet` | ON/OFF | Тихий режим (legacy «queit» принимается; статус публикуется в `/quiet`) |
@@ -167,7 +167,7 @@
--- ---
## out_PID — PID-регулятор ## out\_PID — PID-регулятор
### Описание ### Описание
@@ -215,7 +215,7 @@
--- ---
## out_Relay — Электромагнитное реле ## out\_Relay — Электромагнитное реле
### Описание ### Описание
@@ -254,7 +254,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_PWM — Широтно-импульсная модуляция ## out\_PWM — Широтно-импульсная модуляция
### Описание ### Описание
@@ -263,7 +263,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
**Основные функции:** **Основные функции:**
- Регулирование от 0% до 100% - Регулирование от 0% до 100%
- Поддержка RGB-управления (в base-классе colorChannel) - Поддержка RGB-управления (в base-классе colorChannel)
- Число пинов (1-5) определяет режим: CH_PWM / RGB / RGBW / RGBWW - Число пинов (1-5) определяет режим: CH\_PWM / RGB / RGBW / RGBWW
### Тип в JSON ### Тип в JSON
``` ```
@@ -289,7 +289,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_DMX — DMX512 управление светом ## out\_DMX — DMX512 управление светом
### Описание ### Описание
@@ -324,7 +324,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_Motor — Управление двигателем ## out\_Motor — Управление двигателем
### Описание ### Описание
@@ -374,7 +374,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_Elevator — Управление лифтом ## out\_Elevator — Управление лифтом
### Описание ### Описание
@@ -390,7 +390,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
``` ```
[19, {"serial": "8N1", "baud": 19200, "log": ...}] [19, {"serial": "8N1", "baud": 19200, "log": ...}]
``` ```
Реализован (компилируется с ELEVATOR_ENABLE). itemArg — объект. Порты фиксированные (MODULE_UATRBRIDGE_UARTA/B). Реализован (компилируется с ELEVATOR\_ENABLE). itemArg — объект. Порты фиксированные (MODULE\_UATRBRIDGE\_UARTA/B).
### Формат конфигурации ### Формат конфигурации
@@ -415,7 +415,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_Humidifier — Управление увлажнителем ## out\_Humidifier — Управление увлажнителем
### Описание ### Описание
@@ -453,25 +453,25 @@ RELAYX: [16, [pin, period_сек], val, cmd]
| Состояние | Код | Описание | | Состояние | Код | Описание |
|-----------|-----|---------| |-----------|-----|---------|
| H_UNKNOWN | 0 | Неизвестное | | H\_UNKNOWN | 0 | Неизвестное |
| H_READY | 1 | Готов к работе | | H\_READY | 1 | Готов к работе |
| H_PREPARE_FOR_START | 2 | Подготовка к пуску | | H\_PREPARE\_FOR\_START | 2 | Подготовка к пуску |
| H_PREPARE_VALVES | 3 | Подготовка клапанов | | H\_PREPARE\_VALVES | 3 | Подготовка клапанов |
| H_MOTOR_ON | 4 | Мотор работает | | H\_MOTOR\_ON | 4 | Мотор работает |
| H_OPERATE | 5 | В режиме увлажнения | | H\_OPERATE | 5 | В режиме увлажнения |
| H_MOTOR_PAUSE | 6 | Пауза мотора | | H\_MOTOR\_PAUSE | 6 | Пауза мотора |
| H_MOTOR_OFF | 7 | Мотор выключен | | H\_MOTOR\_OFF | 7 | Мотор выключен |
| H_FLUSH | 8 | Промывка системы | | H\_FLUSH | 8 | Промывка системы |
| H_IDLE | 9 | Ожидание | | H\_IDLE | 9 | Ожидание |
| H_MOTOR_OFF_OK | 10 | Мотор выключен (окончательно) | | H\_MOTOR\_OFF\_OK | 10 | Мотор выключен (окончательно) |
| H_FAULT_PRESSURE | -1 | Ошибка давления | | H\_FAULT\_PRESSURE | -1 | Ошибка давления |
| H_FAULT_PRESSURE_KEEP | -2 | Давление не удерживается | | H\_FAULT\_PRESSURE\_KEEP | -2 | Давление не удерживается |
| H_FAULT_OVERPRESSURE | -3 | Перепад давления | | H\_FAULT\_OVERPRESSURE | -3 | Перепад давления |
| H_FAULT_MOTOR_OFF | -4 | Ошибка: мотор не выключился | | H\_FAULT\_MOTOR\_OFF | -4 | Ошибка: мотор не выключился |
--- ---
## out_Counter — Автосуммирующий счётчик ## out\_Counter — Автосуммирующий счётчик
### Описание ### Описание
@@ -504,7 +504,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_SPILed — Управление светодиодами ## out\_SPILed — Управление светодиодами
### Описание ### Описание
@@ -539,7 +539,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
|----------|-----|---------| |----------|-----|---------|
| `data_pin` | int | GPIO пин (данные) | | `data_pin` | int | GPIO пин (данные) |
| `numLeds` | int | Количество светодиодов, деф 43 | | `numLeds` | int | Количество светодиодов, деф 43 |
| `ledsType` | int | Код NeoPixel (NEO_BRG+NEO_KHZ800 и т.п.) | | `ledsType` | int | Код NeoPixel (NEO\_BRG+NEO\_KHZ800 и т.п.) |
### Управление ### Управление
@@ -553,7 +553,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_Mercury — Счётчик Меркурий ## out\_Mercury — Счётчик Меркурий
### Описание ### Описание
@@ -562,7 +562,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
**Основные функции:** **Основные функции:**
- Чтение энергопотребления (активная/реактивная) - Чтение энергопотребления (активная/реактивная)
- Контроль связи и состояния счётчика - Контроль связи и состояния счётчика
- Тарифные (пиковое/полупиковое/ночное) данные НЕ читаются — только M_NOW - Тарифные (пиковое/полупиковое/ночное) данные НЕ читаются — только M\_NOW
### Тип в JSON ### Тип в JSON
``` ```
@@ -612,7 +612,7 @@ RELAYX: [16, [pin, period_сек], val, cmd]
--- ---
## out_Sprinkler — Система полива ## out\_Sprinkler — Система полива
### Описание ### Описание
@@ -782,7 +782,7 @@ root/s_out/sprinkler/south/val # Выполненный объём/вре
--- ---
## out_UARTBridge — UART мост ## out\_UARTBridge — UART мост
### Описание ### Описание
@@ -790,7 +790,7 @@ root/s_out/sprinkler/south/val # Выполненный объём/вре
**Основные функции:** **Основные функции:**
- Прозрачная маршрутизация UART↔UART - Прозрачная маршрутизация UART↔UART
- Буферизация пакетов (MAX_PDU = 64 байт) - Буферизация пакетов (MAX\_PDU = 64 байт)
- Логирование трафика - Логирование трафика
- Одна скорость на оба порта. Порты фиксированные: Serial1/Serial2 - Одна скорость на оба порта. Порты фиксированные: Serial1/Serial2
@@ -827,7 +827,7 @@ root/s_out/sprinkler/south/val # Выполненный объём/вре
# Входные модули # Входные модули
## in_CCS811_HDC1080 — Датчик качества воздуха ## in\_CCS811\_HDC1080 — Датчик качества воздуха
### Описание ### Описание
@@ -916,21 +916,21 @@ root/s_out/sprinkler/south/val # Выполненный объём/вре
| Модуль | Тип | Назначение | Управление | | Модуль | Тип | Назначение | Управление |
|--------|-----|-----------|-----------| |--------|-----|-----------|-----------|
| out_Multivent | 18 | Многоканальный кондиционер | PID + MQTT | | out\_Multivent | 18 | Многоканальный кондиционер | PID + MQTT |
| out_AC | 10 | Одиночный кондиционер | Проприетарный UART (Haier) | | out\_AC | 10 | Одиночный кондиционер | Проприетарный UART (Haier) |
| out_PID | 13 | PID-регулятор | MQTT | | out\_PID | 13 | PID-регулятор | MQTT |
| out_Relay | 6 | Электромагнитное реле | GPIO | | out\_Relay | 6 | Электромагнитное реле | GPIO |
| out_PWM | 3 | ШИМ-управление | GPIO-PWM | | out\_PWM | 3 | ШИМ-управление | GPIO-PWM |
| out_DMX | 0 | DMX512 освещение | DMX512 | | out\_DMX | 0 | DMX512 освещение | DMX512 |
| out_Motor | 12 | Управление двигателем | GPIO-пары | | out\_Motor | 12 | Управление двигателем | GPIO-пары |
| out_Elevator | 19 | Управление лифтом | UART | | out\_Elevator | 19 | Управление лифтом | UART |
| out_Humidifier | 21 | Управление увлажнителем | GPIO + датчики | | out\_Humidifier | 21 | Управление увлажнителем | GPIO + датчики |
| out_Counter | 20 | Автосуммирующий счётчик | MQTT | | out\_Counter | 20 | Автосуммирующий счётчик | MQTT |
| out_SPILed | 11 | Адресуемые светодиоды | SPI/GPIO | | out\_SPILed | 11 | Адресуемые светодиоды | SPI/GPIO |
| out_Mercury | 22 | Электросчётчик | Modbus RTU | | out\_Mercury | 22 | Электросчётчик | Modbus RTU |
| out_Sprinkler | 23 | Система полива | GPIO + MQTT | | out\_Sprinkler | 23 | Система полива | GPIO + MQTT |
| out_UARTBridge | 15 | UART-мост | UART↔UART | | out\_UARTBridge | 15 | UART-мост | UART↔UART |
| in_CCS811_HDC1080 | входы T=5 (CCS811) / T=6 (HDC1080) | Качество воздуха | I2C | | in\_CCS811\_HDC1080 | входы T=5 (CCS811) / T=6 (HDC1080) | Качество воздуха | I2C |
--- ---
+53 -53
View File
@@ -9,27 +9,27 @@
| Type | Модуль | Класс | Описание | | Type | Модуль | Класс | Описание |
|------|--------|-------|---------| |------|--------|-------|---------|
| 0 | DMX | out_dmx | DMX512 управление освещением | | 0 | DMX | out\_dmx | DMX512 управление освещением |
| 3 | PWM | out_pwm | Широтно-импульсная модуляция | | 3 | PWM | out\_pwm | Широтно-импульсная модуляция |
| 4 | Modbus Dimmer | out_Modbus | AC-диммер через Modbus RTU (legacy) | | 4 | Modbus Dimmer | out\_Modbus | AC-диммер через Modbus RTU (legacy) |
| 6 | Реле | out_relay | Управление электромагнитным реле | | 6 | Реле | out\_relay | Управление электромагнитным реле |
| 10 | AC | out_AC | Управление кондиционером (Haier, UART) | | 10 | AC | out\_AC | Управление кондиционером (Haier, UART) |
| 11 | SPI LED | out_SPILed | Адресуемые светодиоды WS2812/APA102 | | 11 | SPI LED | out\_SPILed | Адресуемые светодиоды WS2812/APA102 |
| 12 | Мотор | out_Motor | Управление моторами с обратной связью | | 12 | Мотор | out\_Motor | Управление моторами с обратной связью |
| 13 | PID | out_pid | PID-регулятор | | 13 | PID | out\_pid | PID-регулятор |
| 14 | Modbus | out_Modbus | Modbus устройства (general) | | 14 | Modbus | out\_Modbus | Modbus устройства (general) |
| 15 | UART Bridge | out_UARTbridge | UART-мост между портами | | 15 | UART Bridge | out\_UARTbridge | UART-мост между портами |
| 16 | RELAYX | out_relay | Медленный PWM через реле | | 16 | RELAYX | out\_relay | Медленный PWM через реле |
| 18 | Multivent | out_Multivent | Многозональная вентиляция | | 18 | Multivent | out\_Multivent | Многозональная вентиляция |
| 19 | Лифт | out_Elevator | Управление лифтом (UART) | | 19 | Лифт | out\_Elevator | Управление лифтом (UART) |
| 20 | Счётчик | out_counter | Счётчик импульсов | | 20 | Счётчик | out\_counter | Счётчик импульсов |
| 21 | Увлажнитель | out_humidifier | Форсуночное увлажнение | | 21 | Увлажнитель | out\_humidifier | Форсуночное увлажнение |
| 22 | Меркурий | out_Mercury | Счётчик электроэнергии Меркурий | | 22 | Меркурий | out\_Mercury | Счётчик электроэнергии Меркурий |
| 23 | Полив | out_sprinkler | Система полива | | 23 | Полив | out\_sprinkler | Система полива |
--- ---
## 1. out_counter — Счётчик импульсов ## 1. out\_counter — Счётчик импульсов
### Конфигурация (Type 20) ### Конфигурация (Type 20)
@@ -47,9 +47,9 @@
### Логика работы ### Логика работы
1. Модуль ждёт команду (S_SET или любой CMD) 1. Модуль ждёт команду (S\_SET или любой CMD)
2. При получении команды с процентом > 0 запускается таймер 2. При получении команды с процентом > 0 запускается таймер
3. По истечении периода [1] добавляется значение [0] * TENS_BASE 3. По истечении периода [1] добавляется значение [0] * TENS\_BASE
4. Считанное значение публикуется в MQTT 4. Считанное значение публикуется в MQTT
### Пример использования ### Пример использования
@@ -65,7 +65,7 @@
--- ---
## 2. out_relay — Электромагнитное реле (Type 6) ## 2. out\_relay — Электромагнитное реле (Type 6)
### Конфигурация ### Конфигурация
@@ -96,7 +96,7 @@
--- ---
## 3. out_Motor — Управление моторами (Type 12) ## 3. out\_Motor — Управление моторами (Type 12)
### Конфигурация ### Конфигурация
@@ -118,11 +118,11 @@
### Логика работы ### Логика работы
1. Модуль сравнивает **targetPos** (из команды 0-255) с **curPos** (из обратной связи) 1. Модуль сравнивает **targetPos** (из команды 0-255) с **curPos** (из обратной связи)
2. Если разница > POS_ERR (10): 2. Если разница > POS\_ERR (10):
- Если targetPos < curPos → движение вниз (pinDown) - Если targetPos < curPos → движение вниз (pinDown)
- Если targetPos > curPos → движение вверх (pinUp) - Если targetPos > curPos → движение вверх (pinUp)
3. При достижении targetPos или maxOnTime мотор останавливается 3. При достижении targetPos или maxOnTime мотор останавливается
4. Защита от перегрузки: одновременно работают макс. MOTOR_QUOTE моторов (обычно 2) 4. Защита от перегрузки: одновременно работают макс. MOTOR\_QUOTE моторов (обычно 2)
### Примеры ### Примеры
@@ -141,7 +141,7 @@
--- ---
## 4. out_PID — PID-регулятор (Type 13) ## 4. out\_PID — PID-регулятор (Type 13)
### Конфигурация ### Конфигурация
@@ -189,7 +189,7 @@
--- ---
## 5. out_PWM — ШИМ управление (Type 3) ## 5. out\_PWM — ШИМ управление (Type 3)
### Конфигурация ### Конфигурация
@@ -215,7 +215,7 @@
--- ---
## 6. out_relay (Type 6) — детально ## 6. out\_relay (Type 6) — детально
### Загружаемые параметры (getConfig) ### Загружаемые параметры (getConfig)
@@ -233,7 +233,7 @@ if (!period) period = 5000UL; // по умолчанию 5 сек
--- ---
## 7. out_counter (Type 20) — детально ## 7. out\_counter (Type 20) — детально
### Загружаемые параметры (Poll) ### Загружаемые параметры (Poll)
@@ -250,7 +250,7 @@ uint32_t period = item->getFloatArg(1) * 1000.0; // [1] в мс
--- ---
## 8. out_Motor (Type 12) — детально ## 8. out\_Motor (Type 12) — детально
### Загружаемые параметры (getConfig) ### Загружаемые параметры (getConfig)
@@ -278,7 +278,7 @@ if (pinDown < 0) {
--- ---
## 9. out_PID (Type 13) — детально ## 9. out\_PID (Type 13) — детально
### Загружаемые параметры (getConfig) ### Загружаемые параметры (getConfig)
@@ -308,7 +308,7 @@ store->setpoint = item->itemVal->valuefloat; // Установка из JSON va
--- ---
## 11. out_humidifier (Type 21) — Форсуночное увлажнение ## 11. out\_humidifier (Type 21) — Форсуночное увлажнение
### Конфигурация ### Конфигурация
@@ -380,30 +380,30 @@ MAX_OPERATION_PRESSURE = 600 // максимальное рабочее д
| Состояние | Код | Описание | | Состояние | Код | Описание |
|-----------|-----|---------| |-----------|-----|---------|
| H_UNKNOWN | 0 | Неизвестное состояние | | H\_UNKNOWN | 0 | Неизвестное состояние |
| H_READY | 1 | Готов к работе | | H\_READY | 1 | Готов к работе |
| H_PREPARE_FOR_START | 2 | Подготовка к пуску | | H\_PREPARE\_FOR\_START | 2 | Подготовка к пуску |
| H_PREPARE_VALVES | 3 | Открытие форсунок | | H\_PREPARE\_VALVES | 3 | Открытие форсунок |
| H_MOTOR_ON | 4 | Включение насоса | | H\_MOTOR\_ON | 4 | Включение насоса |
| H_OPERATE | 5 | В режиме увлажнения | | H\_OPERATE | 5 | В режиме увлажнения |
| H_MOTOR_PAUSE | 6 | Пауза насоса | | H\_MOTOR\_PAUSE | 6 | Пауза насоса |
| H_MOTOR_OFF | 7 | Выключение насоса | | H\_MOTOR\_OFF | 7 | Выключение насоса |
| H_MOTOR_OFF_OK | 10 | Насос остановлен | | H\_MOTOR\_OFF\_OK | 10 | Насос остановлен |
| H_FLUSH | 8 | Промывка системы | | H\_FLUSH | 8 | Промывка системы |
| H_IDLE | 9 | Ожидание | | H\_IDLE | 9 | Ожидание |
| H_FAULT_PRESSURE | -1 | Ошибка давления | | H\_FAULT\_PRESSURE | -1 | Ошибка давления |
| H_FAULT_PRESSURE_KEEP | -2 | Потеря давления во время работы | | H\_FAULT\_PRESSURE\_KEEP | -2 | Потеря давления во время работы |
| H_FAULT_OVERPRESSURE | -3 | Перепад давления | | H\_FAULT\_OVERPRESSURE | -3 | Перепад давления |
| H_FAULT_MOTOR_OFF | -4 | Отказ насоса | | H\_FAULT\_MOTOR\_OFF | -4 | Отказ насоса |
### Логика работы ### Логика работы
1. **Инициализация**: модуль ждёт команду включения или когда уровень влажности > startLevel 1. **Инициализация**: модуль ждёт команду включения или когда уровень влажности > startLevel
2. **Подготовка**: открывает клапаны форсунок, ждёт достижения давления 2. **Подготовка**: открывает клапаны форсунок, ждёт достижения давления
3. **Работа**: включает насос, поддерживает давление в диапазоне [MIN_OPERATION_PRESSURE, MAX_OPERATION_PRESSURE] 3. **Работа**: включает насос, поддерживает давление в диапазоне [MIN\_OPERATION\_PRESSURE, MAX\_OPERATION\_PRESSURE]
4. **Балансировка**: одновременно открыто не более `capacity` форсунок из группы `N` 4. **Балансировка**: одновременно открыто не более `capacity` форсунок из группы `N`
5. **Очистка**: периодическая промывка при давлении FLUSH_PRESSURE 5. **Очистка**: периодическая промывка при давлении FLUSH\_PRESSURE
6. **Контроль**: отключение при падении давления ниже MIN_OPERATION_PRESSURE 6. **Контроль**: отключение при падении давления ниже MIN\_OPERATION\_PRESSURE
### Примеры конфигурации ### Примеры конфигурации
@@ -453,7 +453,7 @@ MAX_OPERATION_PRESSURE = 600 // максимальное рабочее д
--- ---
## 12. out_Mercury (Type 22) — Счётчик электроэнергии ## 12. out\_Mercury (Type 22) — Счётчик электроэнергии
### Конфигурация ### Конфигурация
@@ -497,7 +497,7 @@ MAX_OPERATION_PRESSURE = 600 // максимальное рабочее д
--- ---
## 13. out_AC (Type 10) — Управление кондиционером ## 13. out\_AC (Type 10) — Управление кондиционером
### Конфигурация ### Конфигурация
@@ -535,7 +535,7 @@ portNum = item->getArg(0); // 0=Serial, 1=Serial1, 2=Serial2, 3=Serial3
--- ---
## 14. out_Modbus (тип MBUS) — Modbus устройства ## 14. out\_Modbus (тип MBUS) — Modbus устройства
### Конфигурация общая ### Конфигурация общая
@@ -625,7 +625,7 @@ pollingInterval = delayObj->valueint; // по умолчанию 1000 мс
--- ---
## 15. out_Multivent (Type 18) — Многозональная вентиляция ## 15. out\_Multivent (Type 18) — Многозональная вентиляция
### Конфигурация ### Конфигурация
+9 -9
View File
@@ -34,7 +34,7 @@ root/[id-устройства или bcst или out]/имя_item/[subitem/]suff
- `out` — контроллер публикует статус в эти топики - `out` — контроллер публикует статус в эти топики
- **Пример**: `myhome/s_out/lamp1/set` (где `s_out` — значение `out`) - **Пример**: `myhome/s_out/lamp1/set` (где `s_out` — значение `out`)
#### 3. **item_name** — имя объекта (канала) #### 3. **item\_name** — имя объекта (канала)
Определяется в разделе `items` конфигурации. Определяется в разделе `items` конфигурации.
@@ -59,7 +59,7 @@ myhome/in/multivent/bedroom/set (установить T в спальне)
myhome/in/multivent/kitchen/fan (управление вентилятором кухни) myhome/in/multivent/kitchen/fan (управление вентилятором кухни)
``` ```
**Пример для LED ленты (пиксели 10-20; работает ТОЛЬКО для CH_SPILED, тип 11 — DMX-драйвер subitem игнорирует)**: **Пример для LED ленты (пиксели 10-20; работает ТОЛЬКО для CH\_SPILED, тип 11 — DMX-драйвер subitem игнорирует)**:
``` ```
myhome/in/led_strip/10-20/set (установить значение пиксели 10-20) myhome/in/led_strip/10-20/set (установить значение пиксели 10-20)
``` ```
@@ -87,16 +87,16 @@ myhome/in/floor/OFF/set (применится для теплых
| **`/hue`** | Command | Оттенок (0-365°, HSV формат) | RGB/RGBW/RGBWW | | **`/hue`** | Command | Оттенок (0-365°, HSV формат) | RGB/RGBW/RGBWW |
| **`/sat`** | Command | Насыщенность (0-100%, HSV формат) | RGB/RGBW/RGBWW | | **`/sat`** | Command | Насыщенность (0-100%, HSV формат) | RGB/RGBW/RGBWW |
| **`/HSV`** | Command | Полный цвет (hue,saturation,volume). Суффикс ЗАГЛАВНЫЙ, строчный `/hsv` игнорируется | RGB/RGBW/RGBWW | | **`/HSV`** | Command | Полный цвет (hue,saturation,volume). Суффикс ЗАГЛАВНЫЙ, строчный `/hsv` игнорируется | RGB/RGBW/RGBWW |
| **`/rgb`** | Command | **Не обрабатывается** в текущей сборке (S_RGB) | — | | **`/rgb`** | Command | **Не обрабатывается** в текущей сборке (S\_RGB) | — |
| **`/temp`** | Command | Цветовая температура 153-500 mireds (RGBWW); у AC — текущая T | RGBWW, AC | | **`/temp`** | Command | Цветовая температура 153-500 mireds (RGBWW); у AC — текущая T | RGBWW, AC |
| **`/raw`** | Command | «Сырые» данные, передаваемые драйверу без интерпретации | AC, ELEVATOR | | **`/raw`** | Command | «Сырые» данные, передаваемые драйверу без интерпретации | AC, ELEVATOR |
| **`/fan`** | Command, Status | Скорость вентилятора 0-255 или (HIGH, MEDIUM, LOW, OFF) | AC, Multivent | | **`/fan`** | Command, Status | Скорость вентилятора 0-255 или (HIGH, MEDIUM, LOW, OFF) | AC, Multivent |
| **`/mode`** | Command, Status | Режим работы — число 0-4 (AC). Команды FAN нет — есть FAN_ONLY. Текстовые режимы (HEAT, COOL, DRY, AUTO) — payload в /cmd | AC, Multivent | | **`/mode`** | Command, Status | Режим работы — число 0-4 (AC). Команды FAN нет — есть FAN\_ONLY. Текстовые режимы (HEAT, COOL, DRY, AUTO) — payload в /cmd | AC, Multivent |
| **`/lock`** | Command, Status | Блокировка (ON, OFF) | AC | | **`/lock`** | Command, Status | Блокировка (ON, OFF) | AC |
| **`/swing`** | Command, Status | Направление воздушного потока (ON, OFF) | AC | | **`/swing`** | Command, Status | Направление воздушного потока (ON, OFF) | AC |
| **`/quiet`** | Command, Status | Тихий режим (ON, OFF) | AC | | **`/quiet`** | Command, Status | Тихий режим (ON, OFF) | AC |
| **`/ctrl`** | Command, Status | Управление состоянием (FREEZE, UNFREEZE, ENABLE, DISABLE) | Специальное | | **`/ctrl`** | Command, Status | Управление состоянием (FREEZE, UNFREEZE, ENABLE, DISABLE) | Специальное |
| **`/del`** | Command | Команда с задержкой — только команды ON…FAN_ONLY (код ≤ 0x0F); HIGH/MEDIUM/LOW/HEAT_COOL/HEAT/COOL/DRY запланировать нельзя | ON…FAN_ONLY | | **`/del`** | Command | Команда с задержкой — только команды ON…FAN\_ONLY (код ≤ 0x0F); HIGH/MEDIUM/LOW/HEAT\_COOL/HEAT/COOL/DRY запланировать нельзя | ON…FAN\_ONLY |
--- ---
@@ -138,7 +138,7 @@ myhome/lighthub01/lamp1/set ← 150
root/out/item[/subitem]/suffix root/out/item[/subitem]/suffix
``` ```
**Примеры** (при out="s_out"): **Примеры** (при out="s\_out"):
``` ```
myhome/s_out/lamp1/set → 255 (текущая яркость, 0-255; общий топик s_out/lamp1 — 0-100) myhome/s_out/lamp1/set → 255 (текущая яркость, 0-255; общий топик s_out/lamp1 — 0-100)
myhome/s_out/lamp1/cmd → ON (последняя команда) myhome/s_out/lamp1/cmd → ON (последняя команда)
@@ -311,7 +311,7 @@ myhome/in/light/cmd → "ON 3000"
### Восстановление состояния при старте ### Восстановление состояния при старте
1. Контроллер подписывается на **статусные топики** на **8 секунд** после старта (TIMEOUT_RETAIN = 8000 мс) 1. Контроллер подписывается на **статусные топики** на **8 секунд** после старта (TIMEOUT\_RETAIN = 8000 мс)
2. Брокер отправляет **последний актуальный статус** 2. Брокер отправляет **последний актуальный статус**
3. Контроллер восстанавливает все значения: яркость, цвет, температуру и т.д. 3. Контроллер восстанавливает все значения: яркость, цвет, температуру и т.д.
@@ -394,7 +394,7 @@ curl --user arduino:password -X POST http://192.168.1.10/item/ac_main/mode -d "
1. **Командные широковещательные**: `root/bcst/#` 1. **Командные широковещательные**: `root/bcst/#`
2. **Командные индивидуальные**: `root/id-устройства/#` 2. **Командные индивидуальные**: `root/id-устройства/#`
3. **Статусные** (только при старте, на 8 сек, TIMEOUT_RETAIN = 8000 мс): `root/out/+/+/#` 3. **Статусные** (только при старте, на 8 сек, TIMEOUT\_RETAIN = 8000 мс): `root/out/+/+/#`
4. **Служебные**: `$command` ловится общей подпиской `root/id-устройства/#` (отдельной подписки нет) 4. **Служебные**: `$command` ловится общей подпиской `root/id-устройства/#` (отдельной подписки нет)
--- ---
@@ -471,5 +471,5 @@ mosquitto_sub -h 192.168.1.100 -t "myhome/s_out/#" -v
--- ---
**Версия документа**: 2.1 (актуально для работа_с_mqtt из wiki.lazyhome.ru) **Версия документа**: 2.1 (актуально для работа\_с\_mqtt из wiki.lazyhome.ru)
**Источники**: [MQTT wiki](https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_mqtt), [API wiki](https://www.lazyhome.ru/dokuwiki/doku.php?id=api) **Источники**: [MQTT wiki](https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_mqtt), [API wiki](https://www.lazyhome.ru/dokuwiki/doku.php?id=api)
+5 -5
View File
@@ -92,7 +92,7 @@ mosquitto_pub -h 192.168.1.100 -t "myhome/in/rgb/HSV" -m "240,100,200"
### Цвет по RGB (не поддерживается) ### Цвет по RGB (не поддерживается)
> Суффикс `/rgb` **не поддерживается** в текущей сборке (S_RGB не обрабатывается). > Суффикс `/rgb` **не поддерживается** в текущей сборке (S\_RGB не обрабатывается).
> Цвет задаётся через `/HSV` или строкой «h,s,v[,ct]» в общем топике без суффикса. > Цвет задаётся через `/HSV` или строкой «h,s,v[,ct]» в общем топике без суффикса.
```bash ```bash
@@ -288,7 +288,7 @@ curl http://192.168.1.10/ram/lamp1
| `/hue` | Оттенок RGB | 0-365° | | `/hue` | Оттенок RGB | 0-365° |
| `/sat` | Насыщенность RGB | 0-100% | | `/sat` | Насыщенность RGB | 0-100% |
| `/HSV` | Полный HSV (ЗАГЛАВНЫЙ) | hue,sat,value | | `/HSV` | Полный HSV (ЗАГЛАВНЫЙ) | hue,sat,value |
| `/rgb` | **Не поддерживается** (S_RGB не обрабатывается) | — | | `/rgb` | **Не поддерживается** (S\_RGB не обрабатывается) | — |
| `/fan` | Вентилятор | LOW, MEDIUM, HIGH, OFF или число| | `/fan` | Вентилятор | LOW, MEDIUM, HIGH, OFF или число|
| `/mode` | Режим работы — число 0-4 (AC); текстовые режимы — через /cmd | 0-4 | | `/mode` | Режим работы — число 0-4 (AC); текстовые режимы — через /cmd | 0-4 |
| `/ctrl` | Управление | ENABLE, DISABLE, FREEZE, UNFREEZE | | `/ctrl` | Управление | ENABLE, DISABLE, FREEZE, UNFREEZE |
@@ -297,6 +297,6 @@ curl http://192.168.1.10/ram/lamp1
--- ---
**Дополнительно**: **Дополнительно**:
- Полный справочник: [mqtt_api_reference.md](mqtt_api_reference.md) - Полный справочник: [mqtt\_api\_reference.md](mqtt_api_reference.md)
- Справочник суффиксов: [suffixes_reference.md](suffixes_reference.md) - Справочник суффиксов: [suffixes\_reference.md](suffixes_reference.md)
- Примеры конфигураций: [configuration_examples.md](configuration_examples.md) - Примеры конфигураций: [configuration\_examples.md](configuration_examples.md)
+4 -4
View File
@@ -1,6 +1,6 @@
# OTA — обновление прошивки по воздуху # OTA — обновление прошивки по воздуху
> Источник: Wiki LightHub (lazyhome.ru), страница «ota_обновление_прошивки_по_воздуху». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «ota\_обновление\_прошивки\_по\_воздуху». Снапшот от 2026-10-02.
### OTA ### OTA
@@ -19,7 +19,7 @@
Чтобы прошивка могла успешно обновиться, она должна занимать строго не более 50% flash памяти. Это не является проблемой для всех архитектур, исключая MEGA2560. Данный контроллер имеет очень скромные характеристики, поэтому приходится ужиматься. В пред-компилированной версии для этой архитектуры отключены почти все опциональные модули (DMX, Modbus, 1-wire). Но перекомпилировав проект, можно подключить нужные опции, пожертвовав чем-то еще (например, MDNS) Чтобы прошивка могла успешно обновиться, она должна занимать строго не более 50% flash памяти. Это не является проблемой для всех архитектур, исключая MEGA2560. Данный контроллер имеет очень скромные характеристики, поэтому приходится ужиматься. В пред-компилированной версии для этой архитектуры отключены почти все опциональные модули (DMX, Modbus, 1-wire). Но перекомпилировав проект, можно подключить нужные опции, пожертвовав чем-то еще (например, MDNS)
См файл build-flags/build_flags_mega2560-optiboot с опциями по умолчанию, которые можно переопределить в custom-build-flags/build_flags_mega2560-optiboot См файл build-flags/build\_flags\_mega2560-optiboot с опциями по умолчанию, которые можно переопределить в custom-build-flags/build\_flags\_mega2560-optiboot
Подробнее про опции компиляции в разделе [опции компиляции](https://www.lazyhome.ru/dokuwiki/doku.php?id=опции_компиляции) Подробнее про опции компиляции в разделе [опции компиляции](https://www.lazyhome.ru/dokuwiki/doku.php?id=опции_компиляции)
@@ -51,9 +51,9 @@ arduinoOTA -address 192.168.1.2 -port 80 -username arduino -password password -s
В примере приведены username и password по-умолчанию В примере приведены username и password по-умолчанию
Пароль необходимо сменить на свой Пароль необходимо сменить на свой
Задать пароль и сохранить его в NVRAM можно при помощи команды otapwd [cli_интерфейс](cli_interface.md) Задать пароль и сохранить его в NVRAM можно при помощи команды otapwd [cli\_интерфейс](cli_interface.md)
для коммита прошивки от 20/05/24 и позднее, можно воспользоваться опциями компиляции DEFAULT_OTA_USERNAME и DEFAULT_OTA_PASSWORD для коммита прошивки от 20/05/24 и позднее, можно воспользоваться опциями компиляции DEFAULT\_OTA\_USERNAME и DEFAULT\_OTA\_PASSWORD
Примечание (2026-10-02): OTA в актуальных версиях прошивки переделана. Механизм управляется опцией компиляции `OTA_ENABLE` (флаг в `build-flags/build_flags_*` и код под `#ifdef OTA_ENABLE` в `lighthub/main.cpp`), обновление по воздуху для ESP-платформ осуществляется через библиотеку ArduinoOTA (форк https://github.com/anklimov/ArduinoOTA). Для ESP32/ESP8266 в `platformio.ini` задана таблица разделов `board_build.partitions = min_spiffs.csv`, выделенная под обновление прошивка больше не ограничена правилом «строго не более 50% flash» (комментарий в platformio.ini: «>50% space - ok for ESP due spare partition»). Правило 50% flash по-прежнему актуально для AVR-платформ (MEGA2560). Порт OTA по умолчанию 65280 (`OTA_PORT`, `lighthub/options.h:28-29`), для esp32-wifi задан `-DOTA_PORT=80`. В wiki не упомянута сборка esp32c3-wifi, также поддерживающая OTA. Примечание (2026-10-02): OTA в актуальных версиях прошивки переделана. Механизм управляется опцией компиляции `OTA_ENABLE` (флаг в `build-flags/build_flags_*` и код под `#ifdef OTA_ENABLE` в `lighthub/main.cpp`), обновление по воздуху для ESP-платформ осуществляется через библиотеку ArduinoOTA (форк https://github.com/anklimov/ArduinoOTA). Для ESP32/ESP8266 в `platformio.ini` задана таблица разделов `board_build.partitions = min_spiffs.csv`, выделенная под обновление прошивка больше не ограничена правилом «строго не более 50% flash» (комментарий в platformio.ini: «>50% space - ok for ESP due spare partition»). Правило 50% flash по-прежнему актуально для AVR-платформ (MEGA2560). Порт OTA по умолчанию 65280 (`OTA_PORT`, `lighthub/options.h:28-29`), для esp32-wifi задан `-DOTA_PORT=80`. В wiki не упомянута сборка esp32c3-wifi, также поддерживающая OTA.
+1 -1
View File
@@ -25,7 +25,7 @@
Параметр `T` соответствует значению **32** — это тип входа «rotary encoder». Параметр `T` соответствует значению **32** — это тип входа «rotary encoder».
Параметр `"+-"` определяет обработчик, вызываемый при вращении рукоятки энкодера по или против часовой стрелки. Обработчик аналогичен описанному в разделе «диммирование с использованием кнопок» ([button_presses.md](button_presses.md)). Но там пары параметров `icmd`/`irev` и `ecmd`/`erev` используются поочередно, а в случае энкодера первый параметр используется в случае вращения по часовой стрелке, а второй — против часовой. Параметр `"+-"` определяет обработчик, вызываемый при вращении рукоятки энкодера по или против часовой стрелки. Обработчик аналогичен описанному в разделе «диммирование с использованием кнопок» ([button\_presses.md](button_presses.md)). Но там пары параметров `icmd`/`irev` и `ecmd`/`erev` используются поочередно, а в случае энкодера первый параметр используется в случае вращения по часовой стрелке, а второй — против часовой.
Настройка в примере ниже переключает локальное устройство `dimmer` между состояниями ON и OFF (команда `toggle`) по однократному клику на энкодер (параметр `click`), а при вращении рукоятки по и против часовой стрелки увеличивает или уменьшает яркость локального устройства `dimmer` соответственно (команды `%+1` и `%-1`): Настройка в примере ниже переключает локальное устройство `dimmer` между состояниями ON и OFF (команда `toggle`) по однократному клику на энкодер (параметр `click`), а при вращении рукоятки по и против часовой стрелки увеличивает или уменьшает яркость локального устройства `dimmer` соответственно (команды `%+1` и `%-1`):
+29 -29
View File
@@ -29,7 +29,7 @@ myhome/in/lamp_bedroom/set
| `/set` | ✅ | ✅ | Установка численного значения | 0-255 (шкала 0-100 — только в общем топике без суффикса) | | `/set` | ✅ | ✅ | Установка численного значения | 0-255 (шкала 0-100 — только в общем топике без суффикса) |
| `/val` | ✅ | ❌ | Вход сенсора (THERMO, PID, MULTIVENT, SPRINKLER) | Число (T / значение) | | `/val` | ✅ | ❌ | Вход сенсора (THERMO, PID, MULTIVENT, SPRINKLER) | Число (T / значение) |
| `/raw` | ✅ | ✅ | «Сырые» данные, передаваемые драйверу без интерпретации | Текст / число | | `/raw` | ✅ | ✅ | «Сырые» данные, передаваемые драйверу без интерпретации | Текст / число |
| `/del` | ✅ | ❌ | Команда с задержкой. Только команды ON…FAN_ONLY (код ≤ 0x0F); HIGH/MEDIUM/LOW/HEAT_COOL/HEAT/COOL/DRY запланировать нельзя | Текст (команда + время) | | `/del` | ✅ | ❌ | Команда с задержкой. Только команды ON…FAN\_ONLY (код ≤ 0x0F); HIGH/MEDIUM/LOW/HEAT\_COOL/HEAT/COOL/DRY запланировать нельзя | Текст (команда + время) |
> **Полный список команд** (payload `/cmd`): `ON`, `OFF`, `REST`, `TOGGLE`, `HALT`, `XON`, `XOFF`, `INCREASE`, `DECREASE`, `ENABLE`, `DISABLE`, `UNFREEZE`, `FREEZE`, `AUTO`, `FAN_ONLY`, `HIGH`, `MEDIUM`, `LOW`, `HEAT_COOL`, `HEAT`, `COOL`, `DRY`, `RGB`, `HSV`, `RESET`. > **Полный список команд** (payload `/cmd`): `ON`, `OFF`, `REST`, `TOGGLE`, `HALT`, `XON`, `XOFF`, `INCREASE`, `DECREASE`, `ENABLE`, `DISABLE`, `UNFREEZE`, `FREEZE`, `AUTO`, `FAN_ONLY`, `HIGH`, `MEDIUM`, `LOW`, `HEAT_COOL`, `HEAT`, `COOL`, `DRY`, `RGB`, `HSV`, `RESET`.
> `TOGGLE` в `/ctrl` не включает/выключает, а **инвертирует флаг DISABLE**. > `TOGGLE` в `/ctrl` не включает/выключает, а **инвертирует флаг DISABLE**.
@@ -41,7 +41,7 @@ myhome/in/lamp_bedroom/set
| `/hue` | ✅ | ✅ | Оттенок (HSV) | 0-365° | | `/hue` | ✅ | ✅ | Оттенок (HSV) | 0-365° |
| `/sat` | ✅ | ✅ | Насыщенность (HSV) | 0-100% | | `/sat` | ✅ | ✅ | Насыщенность (HSV) | 0-100% |
| `/HSV` | ✅ | ✅ | Полный цвет (hue,sat,val). Суффикс ЗАГЛАВНЫЙ, строчный `/hsv` игнорируется | `H,S,V` | | `/HSV` | ✅ | ✅ | Полный цвет (hue,sat,val). Суффикс ЗАГЛАВНЫЙ, строчный `/hsv` игнорируется | `H,S,V` |
| `/rgb` | ❌ | ❌ | **Не поддерживается** в текущей сборке (S_RGB нигде не обрабатывается) | — | | `/rgb` | ❌ | ❌ | **Не поддерживается** в текущей сборке (S\_RGB нигде не обрабатывается) | — |
| `/temp` | ✅ | ✅ | Цветовая температура 153-500 mireds (RGBWW); у AC — текущая T | 153-500 | | `/temp` | ✅ | ✅ | Цветовая температура 153-500 mireds (RGBWW); у AC — текущая T | 153-500 |
**Примеры**: **Примеры**:
@@ -108,7 +108,7 @@ myhome/in/ac_main/quiet → ON
| `/cmd` | ✅ | ✅ | Включить/выключить | ON, OFF, TOGGLE | | `/cmd` | ✅ | ✅ | Включить/выключить | ON, OFF, TOGGLE |
| `/set` | ✅ | ✅ | Установленная температура | Текущее значение | | `/set` | ✅ | ✅ | Установленная температура | Текущее значение |
| `/fan` | ✅ | ✅ | Скорость вентилятора (HIGH/MEDIUM/LOW → 255/128/64) | HIGH, MEDIUM, LOW | | `/fan` | ✅ | ✅ | Скорость вентилятора (HIGH/MEDIUM/LOW → 255/128/64) | HIGH, MEDIUM, LOW |
| `/mode` | ✅ | ❌ | Только у основного item (обратная связь от AC). У зон S_MODE не обрабатывается — режим зоны задаётся командой в `zone/cmd` | — | | `/mode` | ✅ | ❌ | Только у основного item (обратная связь от AC). У зон S\_MODE не обрабатывается — режим зоны задаётся командой в `zone/cmd` | — |
**Структура многозональной вентиляции**: **Структура многозональной вентиляции**:
@@ -227,30 +227,30 @@ myhome/in/ac/HEAT/set → 25
| Номер | Тип канала | Суффиксы | Примеры | | Номер | Тип канала | Суффиксы | Примеры |
|:-----:|-----------|----------|---------| |:-----:|-----------|----------|---------|
| 0 | CH_DIMMER (DMX 1-4 ch) | `/cmd`, `/set` (subitem-адресация игнорируется) | Лампа, светодиод | | 0 | CH\_DIMMER (DMX 1-4 ch) | `/cmd`, `/set` (subitem-адресация игнорируется) | Лампа, светодиод |
| 1 | CH_RGBW (DMX 4 ch) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV`, `/temp` | RGBW люстра | | 1 | CH\_RGBW (DMX 4 ch) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV`, `/temp` | RGBW люстра |
| 2 | CH_RGB (DMX 3 ch) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` | RGB лента, LED | | 2 | CH\_RGB (DMX 3 ch) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` | RGB лента, LED |
| 3 | CH_PWM | `/cmd`, `/set` | PWM вывод | | 3 | CH\_PWM | `/cmd`, `/set` | PWM вывод |
| 4 | CH_MODBUS | `/cmd`, `/set` | Modbus диммер | | 4 | CH\_MODBUS | `/cmd`, `/set` | Modbus диммер |
| 5 | CH_THERMO | `/cmd`, `/set`, `/val` (вход сенсора), `/ctrl` | Термостат | | 5 | CH\_THERMO | `/cmd`, `/set`, `/val` (вход сенсора), `/ctrl` | Термостат |
| 6 | CH_RELAY | `/cmd`, `/set`, `/del` | Реле, розетка | | 6 | CH\_RELAY | `/cmd`, `/set`, `/del` | Реле, розетка |
| 7 | CH_GROUP | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` | Группа каналов | | 7 | CH\_GROUP | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` | Группа каналов |
| 8 | CH_VCTEMP | — | Регулятор Vacon (PID) | | 8 | CH\_VCTEMP | — | Регулятор Vacon (PID) |
| 9 | CH_VC | — | Привод Vacon (Modbus) | | 9 | CH\_VC | — | Привод Vacon (Modbus) |
| 10 | CH_AC (Haier) | `/cmd`, `/set` (16-40), `/mode` (0-4), `/fan`, `/lock`, `/swing`, `/quiet` (legacy `queit`), `/temp`, `/raw` | Кондиционер | | 10 | CH\_AC (Haier) | `/cmd`, `/set` (16-40), `/mode` (0-4), `/fan`, `/lock`, `/swing`, `/quiet` (legacy `queit`), `/temp`, `/raw` | Кондиционер |
| 11 | CH_SPILED | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` + subitem-пиксели 10-20 | Адресуемая LED лента | | 11 | CH\_SPILED | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV` + subitem-пиксели 10-20 | Адресуемая LED лента |
| 12 | CH_MOTOR | `/cmd`, `/set` | Сервопривод | | 12 | CH\_MOTOR | `/cmd`, `/set` | Сервопривод |
| 13 | CH_PID | `/cmd`, `/set`, `/val` (вход сенсора), `/ctrl` | PID регулятор, теплые полы | | 13 | CH\_PID | `/cmd`, `/set`, `/val` (вход сенсора), `/ctrl` | PID регулятор, теплые полы |
| 14 | CH_MBUS | `/cmd`, `/set` | Modbus устройство | | 14 | CH\_MBUS | `/cmd`, `/set` | Modbus устройство |
| 15 | CH_UARTBRIDGE | `/cmd`, `/set` | UART-мост | | 15 | CH\_UARTBRIDGE | `/cmd`, `/set` | UART-мост |
| 16 | CH_RELAYX | `/cmd`, `/set`, `/del` | Реле + ШИМ | | 16 | CH\_RELAYX | `/cmd`, `/set`, `/del` | Реле + ШИМ |
| 17 | CH_RGBWW (DMXRGBWW) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV`, `/temp` | Теплый+холодный белый | | 17 | CH\_RGBWW (DMXRGBWW) | `/cmd`, `/set`, `/hue`, `/sat`, `/HSV`, `/temp` | Теплый+холодный белый |
| 18 | CH_MULTIVENT | `/cmd`, `/set`, `/fan` + zone-subitem-ы (`set`, `fan`, `cmd`) | Многозональная вентиляция | | 18 | CH\_MULTIVENT | `/cmd`, `/set`, `/fan` + zone-subitem-ы (`set`, `fan`, `cmd`) | Многозональная вентиляция |
| 19 | CH_ELEVATOR | `/cmd`, `/set`, `/raw` | Лифт | | 19 | CH\_ELEVATOR | `/cmd`, `/set`, `/raw` | Лифт |
| 20 | CH_COUNTER | `/cmd`, `/set` | Счетчик | | 20 | CH\_COUNTER | `/cmd`, `/set` | Счетчик |
| 21 | CH_HUMIDIFIER | `/cmd` | Увлажнитель | | 21 | CH\_HUMIDIFIER | `/cmd` | Увлажнитель |
| 22 | CH_MERCURY | — | Счетчик электроэнергии | | 22 | CH\_MERCURY | — | Счетчик электроэнергии |
| 23 | CH_SPRINKLER | `/cmd`, `/set`, `/val` | Полив (ирригатор) | | 23 | CH\_SPRINKLER | `/cmd`, `/set`, `/val` | Полив (ирригатор) |
--- ---
@@ -319,7 +319,7 @@ myhome/s_out/ac_hallway/fan → HIGH
], 22] ], 22]
} }
``` ```
(13 — CH_PID; 2-й аргумент — массив `[kP,kI,kD,dT,…], {выходной execObj}, {каскад}]`; 3-й — стартовый setpoint 22°C) (13 — CH\_PID; 2-й аргумент — массив `[kP,kI,kD,dT,…], {выходной execObj}, {каскад}]`; 3-й — стартовый setpoint 22°C)
**Команды**: **Команды**:
``` ```
@@ -472,4 +472,4 @@ light:
**Версия документа**: 2.0 (обновлено для соответствия wiki.lazyhome.ru) **Версия документа**: 2.0 (обновлено для соответствия wiki.lazyhome.ru)
**Последнее обновление**: 2024 **Последнее обновление**: 2024
**Источник**: https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_mqtt **Источник**: https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\_%D1%81\_mqtt
@@ -17,7 +17,7 @@
| 5 | THERMO | Thermostat | ON/OFF термостат | array | `[24, 33]` (GPIO, T°C) | | 5 | THERMO | Thermostat | ON/OFF термостат | array | `[24, 33]` (GPIO, T°C) |
| 6 | RELAY | Relay Output | GPIO реле | int | `23` (GPIO pin) | | 6 | RELAY | Relay Output | GPIO реле | int | `23` (GPIO pin) |
| 7 | GROUP | Group Channel | Логическая группа каналов | array | `["lamp1", "lamp2"]` | | 7 | GROUP | Group Channel | Логическая группа каналов | array | `["lamp1", "lamp2"]` |
| 8 | VCTEMP | Vacom Temp | Температура из VC-канала | string | `"fm"` (имя CH_VC канала) | | 8 | VCTEMP | Vacom Temp | Температура из VC-канала | string | `"fm"` (имя CH\_VC канала) |
| 9 | MBUSVC | Vacom Motor | Vacom мотор регулятор | array | `[96, "a_ext"]` (адрес, имя) | | 9 | MBUSVC | Vacom Motor | Vacom мотор регулятор | array | `[96, "a_ext"]` (адрес, имя) |
| 10 | ACHAIER | AC Haier | Кондиционер Haier (UART) | int | `1` (порт 0-3) | | 10 | ACHAIER | AC Haier | Кондиционер Haier (UART) | int | `1` (порт 0-3) |
| 11 | SPILED | SPI LED | NeoPixel LED лента | array | `[7, 8]` (data-пин 7, 8 светодиодов) | | 11 | SPILED | SPI LED | NeoPixel LED лента | array | `[7, 8]` (data-пин 7, 8 светодиодов) |
@@ -25,7 +25,7 @@
| 13 | PID | PID Regulator | PID регулятор | array | `[[1.0,0.05,...],{...}]` | | 13 | PID | PID Regulator | PID регулятор | array | `[[1.0,0.05,...],{...}]` |
| 14 | MBUS | Modbus | Universal Modbus v2 | array | `[96, "template", {...}]` | | 14 | MBUS | Modbus | Universal Modbus v2 | array | `[96, "template", {...}]` |
| 15 | UARTBRDG | UART Bridge | UART мост | object | `{"serial","baud","ip","port","hd","log","bond"}` | | 15 | UARTBRDG | UART Bridge | UART мост | object | `{"serial","baud","ip","port","hd","log","bond"}` |
| 16 | RELAYX | Relay PWM | Медленный PWM реле | array | `[22, 60]` (GPIO, период_сек) | | 16 | RELAYX | Relay PWM | Медленный PWM реле | array | `[22, 60]` (GPIO, период\_сек) |
| 17 | DMXRGBWW | DMX RGBWW | DMX RGB+2White (5 каналов) | int | `30` (DMX 30-34) | | 17 | DMXRGBWW | DMX RGBWW | DMX RGB+2White (5 каналов) | int | `30` (DMX 30-34) |
| 18 | VENTS | Multivent | Многозональная вентиляция | object | `{зоны}` (без Modbus-адреса) | | 18 | VENTS | Multivent | Многозональная вентиляция | object | `{зоны}` (без Modbus-адреса) |
| 19 | ELEVATOR | Elevator | Лифт (реализован) | object | `{"serial":"8N1","baud":19200}` | | 19 | ELEVATOR | Elevator | Лифт (реализован) | object | `{"serial":"8N1","baud":19200}` |
@@ -70,7 +70,7 @@
## Детальная таблица (с командами и суффиксами) ## Детальная таблица (с командами и суффиксами)
### CH_DIMMER (0) — DMX Диммер ### CH\_DIMMER (0) — DMX Диммер
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -83,7 +83,7 @@
| **Начальное значение** | Опционально (элемент 3) | | **Начальное значение** | Опционально (элемент 3) |
| **MQTT примеры** | `myhome/<имя_контроллера>/lamp/cmd ← ON`, `myhome/<имя_контроллера>/lamp/set ← 150` (индивидуальный командный топик) | | **MQTT примеры** | `myhome/<имя_контроллера>/lamp/cmd ← ON`, `myhome/<имя_контроллера>/lamp/set ← 150` (индивидуальный командный топик) |
### CH_RGBW (1) — DMX RGB+White ### CH\_RGBW (1) — DMX RGB+White
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -96,7 +96,7 @@
| **MQTT формат RGBW** | `255,128,0,100` (R,G,B,W) | | **MQTT формат RGBW** | `255,128,0,100` (R,G,B,W) |
| **MQTT команды** | `/HSV`, `/RGB`, `/hue`, `/sat`, `/temp` | | **MQTT команды** | `/HSV`, `/RGB`, `/hue`, `/sat`, `/temp` |
### CH_RGB (2) — DMX RGB ### CH\_RGB (2) — DMX RGB
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -105,7 +105,7 @@
| **Формат конфига** | `[2, 15]` (DMX каналы 15-17) | | **Формат конфига** | `[2, 15]` (DMX каналы 15-17) |
| **Суффиксы** | /cmd, /val, /set, /hue, /sat, /temp, /RGB | | **Суффиксы** | /cmd, /val, /set, /hue, /sat, /temp, /RGB |
### CH_PWM (3) — GPIO PWM ### CH\_PWM (3) — GPIO PWM
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -117,16 +117,16 @@
| **Частота** | 4000 Гц (Mega2560, таймеры 3/4); на ESP32 PWM недоступен (stub) | | **Частота** | 4000 Гц (Mega2560, таймеры 3/4); на ESP32 PWM недоступен (stub) |
| **Суффиксы** | /cmd, /val, /set | | **Суффиксы** | /cmd, /val, /set |
### CH_MODBUS (4) — AC Dimmer (Legacy) ### CH\_MODBUS (4) — AC Dimmer (Legacy)
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | Управление AC-диммером через Modbus (устаревшее) | | **Назначение** | Управление AC-диммером через Modbus (устаревшее) |
| **Конфигурация** | array `[addr, reg, mask, max_val]` | | **Конфигурация** | array `[addr, reg, mask, max_val]` |
| **Параметры** | - addr: Modbus адрес (1-247)<br>- reg: регистр (обычно 0)<br>- mask: маска (0, 1, 2 (пропуск 16 бит), 3 (Modbus relay), 4 (swap байтов), -1/отсутствует — без поллинга)<br>- max_val: максимальное значение (обычно 255) | | **Параметры** | - addr: Modbus адрес (1-247)<br>- reg: регистр (обычно 0)<br>- mask: маска (0, 1, 2 (пропуск 16 бит), 3 (Modbus relay), 4 (swap байтов), -1/отсутствует — без поллинга)<br>- max\_val: максимальное значение (обычно 255) |
| **Примечание** | **Использовать CH_MBUS (14) для новых проектов** | | **Примечание** | **Использовать CH\_MBUS (14) для новых проектов** |
### CH_THERMO (5) — ON/OFF Термостат ### CH\_THERMO (5) — ON/OFF Термостат
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -137,7 +137,7 @@
| **Гистерезис** | Включение при T<уставка−1, выключение при T≥уставка | | **Гистерезис** | Включение при T<уставка−1, выключение при T≥уставка |
| **MQTT команды** | `/set` (целевая T), `/val` (вход текущей температуры) | | **MQTT команды** | `/set` (целевая T), `/val` (вход текущей температуры) |
### CH_RELAY (6) — GPIO Реле ### CH\_RELAY (6) — GPIO Реле
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -148,7 +148,7 @@
| **Макс. ток** | 40 мА на pin (требуется транзистор для реле) | | **Макс. ток** | 40 мА на pin (требуется транзистор для реле) |
| **Состояния** | 0 = OFF, 1 = ON | | **Состояния** | 0 = OFF, 1 = ON |
### CH_GROUP (7) — Группа каналов ### CH\_GROUP (7) — Группа каналов
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -158,15 +158,15 @@
| **Команды** | ON, OFF, TOGGLE, SET (для диммеров) | | **Команды** | ON, OFF, TOGGLE, SET (для диммеров) |
| **Рекурсия** | Поддерживается (группы в группах) | | **Рекурсия** | Поддерживается (группы в группах) |
### CH_VCTEMP (8) — Vacom PID Терморегулятор ### CH\_VCTEMP (8) — Vacom PID Терморегулятор
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | Публикация температуры из VC-канала Vacom | | **Назначение** | Публикация температуры из VC-канала Vacom |
| **Конфигурация** | string — имя_канала_VC (itemArg — строка-имя item типа CH_VC (9)) | | **Конфигурация** | string — имя\_канала\_VC (itemArg — строка-имя item типа CH\_VC (9)) |
| **Пример** | `[8, "fm"]` | | **Пример** | `[8, "fm"]` |
### CH_VC (9) — Vacom Мотор-регулятор ### CH\_VC (9) — Vacom Мотор-регулятор
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -174,17 +174,17 @@
| **Конфигурация** | array `[modbus_адрес, "имя_объекта"]` | | **Конфигурация** | array `[modbus_адрес, "имя_объекта"]` |
| **Пример** | `[9, [96, "a_ext"]]` | | **Пример** | `[9, [96, "a_ext"]]` |
### CH_AC (10) — Кондиционер Haier ### CH\_AC (10) — Кондиционер Haier
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | Управление кондиционером Haier | | **Назначение** | Управление кондиционером Haier |
| **Конфигурация** | `[10, portNum(0-3)]` | | **Конфигурация** | `[10, portNum(0-3)]` |
| **Порт** | Номер serial порта (0-3) | | **Порт** | Номер serial порта (0-3) |
| **Режимы** | AUTO, FAN_ONLY, HEAT, COOL, DRY, HEAT_COOL (текст — в payload /cmd; /mode — число); fan: LOW/MEDIUM/HIGH; /set 16-40 | | **Режимы** | AUTO, FAN\_ONLY, HEAT, COOL, DRY, HEAT\_COOL (текст — в payload /cmd; /mode — число); fan: LOW/MEDIUM/HIGH; /set 16-40 |
| **Требует** | Проприетарный UART-протокол Haier (9600, кадры 13/37 байт) | | **Требует** | Проприетарный UART-протокол Haier (9600, кадры 13/37 байт) |
### CH_SPILED (11) — SPI LED Лента ### CH\_SPILED (11) — SPI LED Лента
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -193,7 +193,7 @@
| **Протокол** | NeoPixel (один data-пин); по умолчанию Adafruit NeoPixel, при FASTLED — TM1809 | | **Протокол** | NeoPixel (один data-пин); по умолчанию Adafruit NeoPixel, при FASTLED — TM1809 |
| **Диапазон пинов** | 0-53 | | **Диапазон пинов** | 0-53 |
### CH_MOTOR (12) — Моторная задвижка с обратной связью ### CH\_MOTOR (12) — Моторная задвижка с обратной связью
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -204,7 +204,7 @@
| **maxOnTime** | Максимальное время движения (мс, дефолт 10000) | | **maxOnTime** | Максимальное время движения (мс, дефолт 10000) |
| **Команды** | ON — к заданной позиции, OFF — в позицию 0, HALT | | **Команды** | ON — к заданной позиции, OFF — в позицию 0, HALT |
### CH_PID (13) — PID Регулятор ### CH\_PID (13) — PID Регулятор
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -218,7 +218,7 @@
| **alarm** | Значение аварии | | **alarm** | Значение аварии |
| **min/max** | Диапазон выхода | | **min/max** | Диапазон выхода |
### CH_MBUS (14) — Universal Modbus ### CH\_MBUS (14) — Universal Modbus
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -229,7 +229,7 @@
| **Params** | Привязка параметров к MQTT/items | | **Params** | Привязка параметров к MQTT/items |
| **Тип данных** | i16, i32, u16, u32, i8h, i8l, u8h, u8l, x10, 100 | | **Тип данных** | i16, i32, u16, u32, i8h, i8l, u8h, u8l, x10, 100 |
### CH_UARTBRIDGE (15) — UART Мост ### CH\_UARTBRIDGE (15) — UART Мост
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -237,7 +237,7 @@
| **Конфигурация** | object `{serial, baud, ip, port, hd, log, bond}` (порты фиксированы) | | **Конфигурация** | object `{serial, baud, ip, port, hd, log, bond}` (порты фиксированы) |
| **Отладка** | Может логировать через UDP | | **Отладка** | Может логировать через UDP |
### CH_RELAYX (16) — Медленный PWM через реле ### CH\_RELAYX (16) — Медленный PWM через реле
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -247,16 +247,16 @@
| **Период** | Цикл коммутации в секундах (дефолт 5 с, ограничений нет) | | **Период** | Цикл коммутации в секундах (дефолт 5 с, ограничений нет) |
| **Применение** | Система напольного отопления, тепловые системы | | **Применение** | Система напольного отопления, тепловые системы |
### CH_RGBWW (17) — DMX RGBWW ### CH\_RGBWW (17) — DMX RGBWW
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | RGB + Тёплый белый + Холодный белый | | **Назначение** | RGB + Тёплый белый + Холодный белый |
| **Конфигурация** | int (стартовый DMX) | | **Конфигурация** | int (стартовый DMX) |
| **Каналов DMX** | 5 (R, G, B, W_warm, W_cold) | | **Каналов DMX** | 5 (R, G, B, W\_warm, W\_cold) |
| **Формат** | DMX 30-34 (5 каналов) | | **Формат** | DMX 30-34 (5 каналов) |
### CH_MULTIVENT (18) — Многозональная вентиляция ### CH\_MULTIVENT (18) — Многозональная вентиляция
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -266,15 +266,15 @@
| **PID** | Для каждой зоны свои коэффициенты | | **PID** | Для каждой зоны свои коэффициенты |
| **itemArg** | объект зон (не массив с адресом) | | **itemArg** | объект зон (не массив с адресом) |
### CH_ELEVATOR (19) — Лифт ### CH\_ELEVATOR (19) — Лифт
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | Управление лифтом | | **Назначение** | Управление лифтом |
| **Конфигурация** | `[19, {"serial":"8N1","baud":19200,"log":...}]` | | **Конфигурация** | `[19, {"serial":"8N1","baud":19200,"log":...}]` |
| **Статус** | Реализован; компилируется с ELEVATOR_ENABLE (включён только в custom-build mega2560-optiboot) | | **Статус** | Реализован; компилируется с ELEVATOR\_ENABLE (включён только в custom-build mega2560-optiboot) |
### CH_COUNTER (20) — Счётчик импульсов ### CH\_COUNTER (20) — Счётчик импульсов
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -284,15 +284,15 @@
| **Период** | Период автосуммирования (сек) | | **Период** | Период автосуммирования (сек) |
| **Вход** | Внешние импульсы (GPIO-входа в конфиге нет) | | **Вход** | Внешние импульсы (GPIO-входа в конфиге нет) |
### CH_HUMIDIFIER (21) — Увлажнитель ### CH\_HUMIDIFIER (21) — Увлажнитель
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
| **Назначение** | Управление увлажнителем воздуха (только один в системе) | | **Назначение** | Управление увлажнителем воздуха (только один в системе) |
| **Конфигурация** | array `[[pumpPin, flushPin, pressurePin, maxPumpTime, idleTime, capacity, minLevel, startLevel], {зоны_краны}, motorExecObj, faultExecObj]` | | **Конфигурация** | array `[[pumpPin, flushPin, pressurePin, maxPumpTime, idleTime, capacity, minLevel, startLevel], {зоны_краны}, motorExecObj, faultExecObj]` |
| **Сборка** | Компилируется с HUMIDIFIER_ENABLE (custom lighthub21) | | **Сборка** | Компилируется с HUMIDIFIER\_ENABLE (custom lighthub21) |
### CH_MERCURY (22) — Счётчик энергии Mercury ### CH\_MERCURY (22) — Счётчик энергии Mercury
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -305,7 +305,7 @@
| **Пароль** | Строка из 6 цифр или массив 6 цифр | | **Пароль** | Строка из 6 цифр или массив 6 цифр |
| **PollingInterval** | Интервал опроса (мс, дефолт 10000) | | **PollingInterval** | Интервал опроса (мс, дефолт 10000) |
### CH_SPRINKLER (23) — Система полива ### CH\_SPRINKLER (23) — Система полива
| Параметр | Значение | | Параметр | Значение |
|----------|----------| |----------|----------|
@@ -425,9 +425,9 @@
|-----|---------------------------| |-----|---------------------------|
| SPRINKLER (23) | due, esp32-wifi, esp32c3-wifi, lighthub21, nrf52840 | | SPRINKLER (23) | due, esp32-wifi, esp32c3-wifi, lighthub21, nrf52840 |
| MERCURY (22) | due, lighthub21, stm32 | | MERCURY (22) | due, lighthub21, stm32 |
| ELEVATOR (19) | только custom-build mega2560-optiboot (ELEVATOR_ENABLE) | | ELEVATOR (19) | только custom-build mega2560-optiboot (ELEVATOR\_ENABLE) |
| HUMIDIFIER (21) | только custom-build lighthub21 (HUMIDIFIER_ENABLE) | | HUMIDIFIER (21) | только custom-build lighthub21 (HUMIDIFIER\_ENABLE) |
| UARTBRIDGE (15) | закомментирован во всех стандартных build-flags (UARTBRIDGE_ENABLE) | | UARTBRIDGE (15) | закомментирован во всех стандартных build-flags (UARTBRIDGE\_ENABLE) |
--- ---
+6 -6
View File
@@ -1,6 +1,6 @@
# Интерфейс настройки контроллера # Интерфейс настройки контроллера
> Источник: Wiki LightHub (lazyhome.ru), страница «интерфейс_настройки». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «интерфейс\_настройки». Снапшот от 2026-10-02.
### Интерфейс настройки контроллера ### Интерфейс настройки контроллера
@@ -34,7 +34,7 @@
* Появляется возможность поиска контроллеров в вашей локальной сети, так как в них давно реализован протокол MDNS * Появляется возможность поиска контроллеров в вашей локальной сети, так как в них давно реализован протокол MDNS
Недостаток тут только один - надо потратить 5 минут на установку этого плагина. Недостаток тут только один - надо потратить 5 минут на установку этого плагина.
Так как браузер не имеет прав просканировать локальную сеть на предмет наличия контроллеров, плагин использует утилиту zeroconf_lookup которая была разработана в рамках открытого проекта https://github.com/railduino/zeroconf-lookup Так как браузер не имеет прав просканировать локальную сеть на предмет наличия контроллеров, плагин использует утилиту zeroconf\_lookup которая была разработана в рамках открытого проекта https://github.com/railduino/zeroconf-lookup
На базе этого проекта, я сделал прототип плагина для конфигурирования контроллеров lighthub На базе этого проекта, я сделал прототип плагина для конфигурирования контроллеров lighthub
https://github.com/anklimov/zeroconf-lighthub https://github.com/anklimov/zeroconf-lighthub
@@ -58,21 +58,21 @@ https://github.com/anklimov/zeroconf-lighthub
* Для этого открываем браузер chrome, в меню "расширения" выбираем "управление расширениями". * Для этого открываем браузер chrome, в меню "расширения" выбираем "управление расширениями".
* Включаем переключатель "режим разработчика", * Включаем переключатель "режим разработчика",
* нажимаем кнопку"Загрузить распакованное расширение". * нажимаем кнопку"Загрузить распакованное расширение".
* Выбираем папку __zeroconf-lighthub-master/Chrome__ в распакованном на предыдущем этапе архиве * Выбираем папку _\_zeroconf-lighthub-master/Chrome_\_ в распакованном на предыдущем этапе архиве
* Расширение устанавливается, заглядываем на страницу его свойств и копируем идентификатор расширения (например gepnlbipogackhpjkojhkonkijdgpgji ) это нам пригодится чуть позже * Расширение устанавливается, заглядываем на страницу его свойств и копируем идентификатор расширения (например gepnlbipogackhpjkojhkonkijdgpgji ) это нам пригодится чуть позже
### Как установить утилиту: ### Как установить утилиту:
### Windows ### Windows
- Переходите в каталог __zeroconf-lighthub-master\Windows_Go__ - Переходите в каталог _\_zeroconf-lighthub-master\Windows\_Go_\_
- Из командной строки запускаете - `zeroconf_lookup.exe -i -с gepnlbipogackhpjkojhkonkijdgpgji` (тут укажите ваш идентификатор расширения, скопированный на предыдущем этапе) - Из командной строки запускаете - `zeroconf_lookup.exe -i -с gepnlbipogackhpjkojhkonkijdgpgji` (тут укажите ваш идентификатор расширения, скопированный на предыдущем этапе)
- После этого переносить данный файл с этого места или удалять папку нельзя - После этого переносить данный файл с этого места или удалять папку нельзя
- Если ставили плагин из магазина приложений - можно при запуске не указывать идентификатор расширения. `zeroconf_lookup.exe -i` - Если ставили плагин из магазина приложений - можно при запуске не указывать идентификатор расширения. `zeroconf_lookup.exe -i`
### MacOS ### MacOS
то же самое, только выполнимый файл лежит в директории __zeroconf-lighthub/Apple_Go__ то же самое, только выполнимый файл лежит в директории _\_zeroconf-lighthub/Apple\_Go_\_
### Использование ### Использование
@@ -83,6 +83,6 @@ https://github.com/anklimov/zeroconf-lighthub
## Сверка с кодом (2026-10-02) ## Сверка с кодом (2026-10-02)
- Корректно: обращение по адресу контроллера (`http://<ip>` / `http://<имя>.local`) приводит к 301-редиректу на страницу управления с публичного ресурса: `httpHandler` в `lighthub/main.cpp:264-286` отвечает `Location: http://<REDIRECTION_URL>?mac=...&ip=...&port=...&name=...`. По умолчанию `REDIRECTION_URL` для esp32-wifi задан как `http://lazyhome.ru/pwa` (`build-flags/build_flags_esp32-wifi`), то есть «портал» подгружается с lazyhome.ru и дальше использует HTTP API контроллера. - Корректно: обращение по адресу контроллера (`http://<ip>` / `http://<имя>.local`) приводит к 301-редиректу на страницу управления с публичного ресурса: `httpHandler` в `lighthub/main.cpp:264-286` отвечает `Location: http://<REDIRECTION_URL>?mac=...&ip=...&port=...&name=...`. По умолчанию `REDIRECTION_URL` для esp32-wifi задан как `http://lazyhome.ru/pwa` (`build-flags/build_flags_esp32-wifi`), то есть «портал» подгружается с lazyhome.ru и дальше использует HTTP API контроллера.
- Корректно: MDNS-анонс контроллера реализован (`MDNS.addService("http", "tcp", OTA_PORT)`, main.cpp:650; на STM — `mdns.addServiceRecord`, main.cpp:1332), на этом основан поиск плагина через zeroconf_lookup. - Корректно: MDNS-анонс контроллера реализован (`MDNS.addService("http", "tcp", OTA_PORT)`, main.cpp:650; на STM — `mdns.addServiceRecord`, main.cpp:1332), на этом основан поиск плагина через zeroconf\_lookup.
- Корректно: веб-контент не размещается в памяти контроллера — в коде есть только HTTP API: `GET/POST /item/<имя>`, `GET /ram/[<имя>]`, `POST /command/<команда>` (подача CLI-команд по HTTP), `POST /config.json` (локальное изменение конфига отключает загрузку с портала, main.cpp:368-374). - Корректно: веб-контент не размещается в памяти контроллера — в коде есть только HTTP API: `GET/POST /item/<имя>`, `GET /ram/[<имя>]`, `POST /command/<команда>` (подача CLI-команд по HTTP), `POST /config.json` (локальное изменение конфига отключает загрузку с портала, main.cpp:368-374).
- Примечание: ограничение Chrome на доступ внешних страниц к локальной сети — особенность браузеров, описана верно; рекомендация по fireFox/плагину актуальна. - Примечание: ограничение Chrome на доступ внешних страниц к локальной сети — особенность браузеров, описана верно; рекомендация по fireFox/плагину актуальна.
+3 -3
View File
@@ -1,6 +1,6 @@
# Заливка прошивки # Заливка прошивки
> Источник: Wiki LightHub (lazyhome.ru), страница «заливка_прошивки». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «заливка\_прошивки». Снапшот от 2026-10-02.
## Заливка уже откомпилированной прошивки ## Заливка уже откомпилированной прошивки
@@ -12,7 +12,7 @@
Далее, нажимаем зеленую кнопку "Clone or download" Далее, нажимаем зеленую кнопку "Clone or download"
Выбираем пункт "Download ZIP", скачиваем и распаковываем архив Выбираем пункт "Download ZIP", скачиваем и распаковываем архив
Переходим в директорию lighthub-master/compiled/<требуемая_платформа> (список платформ выше) Переходим в директорию lighthub-master/compiled/<требуемая\_платформа> (список платформ выше)
Подключаете плату USB кабелем к компьютеру (кроме платформы NRF52 - там программирование только при помощи специального устройства JLink, об этом позже) Подключаете плату USB кабелем к компьютеру (кроме платформы NRF52 - там программирование только при помощи специального устройства JLink, об этом позже)
@@ -40,7 +40,7 @@
В Atom или VSC выбираем пункт "Открыть директорию" (Open Folder), и указываем директорию lighthub.master (или в директорию lighthub если использовался git) В Atom или VSC выбираем пункт "Открыть директорию" (Open Folder), и указываем директорию lighthub.master (или в директорию lighthub если использовался git)
Далее, выбираем файл platformio.ini и раскомментариваем в нем нужный вам вариант платформы (платы) в пункте env_default (убираем ; перед строкой, содержащей нужную платформу, добавляем - перед строкой, содержащей ненужные платформы) Далее, выбираем файл platformio.ini и раскомментариваем в нем нужный вам вариант платформы (платы) в пункте env\_default (убираем ; перед строкой, содержащей нужную платформу, добавляем - перед строкой, содержащей ненужные платформы)
NEW - если используете среду VSC (рекомендуется) - то можете ничего не комментировать/раскомментировать а просто выбрать нужную платформу в меню "switch PlatformIO Project environment" (нажмите на Default (lighthub) в самом низу экрана) NEW - если используете среду VSC (рекомендуется) - то можете ничего не комментировать/раскомментировать а просто выбрать нужную платформу в меню "switch PlatformIO Project environment" (нажмите на Default (lighthub) в самом низу экрана)
+1 -1
View File
@@ -1,6 +1,6 @@
# LightHub на разном железе # LightHub на разном железе
> Источник: Wiki LightHub (lazyhome.ru), страница «lighthub_на_разном_железе». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «lighthub\_на\_разном\_железе». Снапшот от 2026-10-02.
Прошивка может компилироваться и работать на следующих аппаратных платформах: Прошивка может компилироваться и работать на следующих аппаратных платформах:
+2 -2
View File
@@ -1,6 +1,6 @@
# MAC-адрес контроллера # MAC-адрес контроллера
> Источник: Wiki LightHub (lazyhome.ru), страница «mac_адрес». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «mac\_адрес». Снапшот от 2026-10-02.
Важно, чтобы у вашего контроллера был уникальный MAC адрес. Важно, чтобы у вашего контроллера был уникальный MAC адрес.
Это важно не только потому, что в пределах одной локальной сети два контроллера с одинаковыми MAC не могут работать но еще и потому, что при старте, контроллер загружает с сервера конфигураций или с других контроллеров по шине CAN свою настройку, используя MAC как свой уникальный ключ. Это важно не только потому, что в пределах одной локальной сети два контроллера с одинаковыми MAC не могут работать но еще и потому, что при старте, контроллер загружает с сервера конфигураций или с других контроллеров по шине CAN свою настройку, используя MAC как свой уникальный ключ.
@@ -38,7 +38,7 @@
| Платформа | Механизм в коде | Строки | Соответствие wiki | | Платформа | Механизм в коде | Строки | Соответствие wiki |
|---|---|---|---| |---|---|---|---|
| (все) `CUSTOM_FIRMWARE_MAC` | MAC разбирается из build-flag (`parseBytes(macStr, ':', ...)`), затем принудительно: `mac[0] &= 0xFE; mac[0] \|= 2;` (locally-administered, не multicast) | main.cpp:2823-2828 | ✅ «опция CUSTOM_FIRMWARE_MAC» | | (все) `CUSTOM_FIRMWARE_MAC` | MAC разбирается из build-flag (`parseBytes(macStr, ':', ...)`), затем принудительно: `mac[0] &= 0xFE; mac[0] \|= 2;` (locally-administered, не multicast) | main.cpp:2823-2828 | ✅ «опция CUSTOM\_FIRMWARE\_MAC» |
| ESP8266/ESP32 (`WIFI_ENABLE`) | Используется штатный MAC чипа: `WiFi.macAddress(sysConf.mac)` | main.cpp:2830-2833 | ✅ «ESP и так имеют уникальные адреса» | | ESP8266/ESP32 (`WIFI_ENABLE`) | Используется штатный MAC чипа: `WiFi.macAddress(sysConf.mac)` | main.cpp:2830-2833 | ✅ «ESP и так имеют уникальные адреса» |
| DUE (`__SAM3X8E__`) / STM32 (`ARDUINO_ARCH_STM32`) | MAC генерируется из серийного номера чипа: `mac[0]=0xDE;` остальные байты = сумма байтов `UniqueID.UID_Byte[]` | main.cpp:2835-2840 | ✅ «DUE и STM имеют уникальный ID чипа» | | DUE (`__SAM3X8E__`) / STM32 (`ARDUINO_ARCH_STM32`) | MAC генерируется из серийного номера чипа: `mac[0]=0xDE;` остальные байты = сумма байтов `UniqueID.UID_Byte[]` | main.cpp:2835-2840 | ✅ «DUE и STM имеют уникальный ID чипа» |
| fallback `DEFAULT_FIRMWARE_MAC` | Хардкод `{0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFF}` | options.h:180 | (доп. fallback, в wiki не описан) | | fallback `DEFAULT_FIRMWARE_MAC` | Хардкод `{0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xFF}` | options.h:180 | (доп. fallback, в wiki не описан) |
+7 -7
View File
@@ -1,6 +1,6 @@
# Входы и выходы платы LightHub # Входы и выходы платы LightHub
> Источник: Wiki LightHub (lazyhome.ru), страница «входы_выходы». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «входы\_выходы». Снапшот от 2026-10-02.
## Электропитание ## Электропитание
@@ -16,7 +16,7 @@ DCDC преобразователь может работать в двух ре
Режим питания платы Ардуино выбирается джампером J4 (желто-фиолетовый на рисунке ниже) Режим питания платы Ардуино выбирается джампером J4 (желто-фиолетовый на рисунке ниже)
В "желтом" режиме, Ардуино питается с выхода DCDC, в фиолетовом - от входного питания. В "желтом" режиме, Ардуино питается с выхода DCDC, в фиолетовом - от входного питания.
_Важно: при использовании второго (фиолетового) режима, контроллер следует питать от источника 12В. Использование источника 24В выведет процессорную плату из строя_~~ \_Важно: при использовании второго (фиолетового) режима, контроллер следует питать от источника 12В. Использование источника 24В выведет процессорную плату из строя\_~~
Внимание: Используйте контроллер версии 2.2 ТОЛЬКО в режиме, когда плата Ардуино питается от DCDC преобразователя. (J4 в Желтом режиме). Испытания показали, что DCDC преобразователь в ином случае работает нестабильно. Внимание: Используйте контроллер версии 2.2 ТОЛЬКО в режиме, когда плата Ардуино питается от DCDC преобразователя. (J4 в Желтом режиме). Испытания показали, что DCDC преобразователь в ином случае работает нестабильно.
@@ -45,9 +45,9 @@ _Важно: при использовании второго (фиолетов
Контроллер поставляется с перемычками, установленными для работе в диапазоне питающих напряжений 12-24В и UEXT 3,3В Контроллер поставляется с перемычками, установленными для работе в диапазоне питающих напряжений 12-24В и UEXT 3,3В
_Внимание: логические уровни сигналов на разъеме UEXT соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE_ \_Внимание: логические уровни сигналов на разъеме UEXT соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE\_
_Подача уровней, превышающие данные значения, могут вывести процессор из строя._ \_Подача уровней, превышающие данные значения, могут вывести процессор из строя.\_
## Версия платы 2.2 ## Версия платы 2.2
@@ -62,10 +62,10 @@ _Подача уровней, превышающие данные значени
Выберете по таблице интересующий вход или выход, найдите в таблице номер MPU PIN, его используйте в конфиге Выберете по таблице интересующий вход или выход, найдите в таблице номер MPU PIN, его используйте в конфиге
Также, таблица пригодится чтобы преобразовать названия аналоговых каналов в цифровой номер PIN Также, таблица пригодится чтобы преобразовать названия аналоговых каналов в цифровой номер PIN
_Внимание: максимальные уровни сигналов на клеммниках PWM 0-3, PWM 10, и разъеме RJ-45 (UNPROT 0-7) соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE_ \_Внимание: максимальные уровни сигналов на клеммниках PWM 0-3, PWM 10, и разъеме RJ-45 (UNPROT 0-7) соответствуют применяемой процессорной плате: 5В для MEGA2560 и 3,3В для DUE\_
_Подача на данные разъемы напряжений, превышающие данные значения, могут вывести процессор из строя._ \_Подача на данные разъемы напряжений, превышающие данные значения, могут вывести процессор из строя.\_
_Данные входы не защищены. Подключайте к ним только локальную слаботочную нагрузку_ \_Данные входы не защищены. Подключайте к ним только локальную слаботочную нагрузку\_
| Mnemonic | MPU PIN # | Plug | Plug PIN | Gnd | Comment | | Mnemonic | MPU PIN # | Plug | Plug PIN | Gnd | Comment |
|---|---|---|---|---|---| |---|---|---|---|---|---|
+4 -4
View File
@@ -1,6 +1,6 @@
# Подключение 1-Wire датчиков # Подключение 1-Wire датчиков
> Источник: Wiki LightHub (lazyhome.ru), страница «подключение_1-wire_датчиков». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «подключение\_1-wire\_датчиков». Снапшот от 2026-10-02.
## Подключение к контроллеру ## Подключение к контроллеру
@@ -27,11 +27,11 @@
}, },
``` ```
АДРЕС_ДАТЧИКА в виде: 282DA307D6013C08 АДРЕС\_ДАТЧИКА в виде: 282DA307D6013C08
## MQTT ## MQTT
Подписываемся на топик "myhome/s_out/Temperature01" и получаем значения температуры. Подписываемся на топик "myhome/s\_out/Temperature01" и получаем значения температуры.
## Простой релейный термостат (теплый пол) ## Простой релейный термостат (теплый пол)
@@ -61,7 +61,7 @@
Суффикс /val при передаче температуры локальным обьектам можно не добавлять Суффикс /val при передаче температуры локальным обьектам можно не добавлять
Значение температуры, также, может быть принято с внешних систем или иных контроллеров по MQTT c использованием топика формата /myhome/controller-id/local_termostat/val Значение температуры, также, может быть принято с внешних систем или иных контроллеров по MQTT c использованием топика формата /myhome/controller-id/local\_termostat/val
При отсутствии показаний в течение 10 мин термостат отключается и переходит в аварийный режим, выдавая аварию в топик /alarm При отсутствии показаний в течение 10 мин термостат отключается и переходит в аварийный режим, выдавая аварию в топик /alarm
+1 -1
View File
@@ -79,7 +79,7 @@ CAN-шины очень широко используются в промышл
| 7 | `sysCmd` | Системные команды (см. commandType) | | 7 | `sysCmd` | Системные команды (см. commandType) |
| 8 | `rawPinCtrl` | Прямое управление пинами | | 8 | `rawPinCtrl` | Прямое управление пинами |
### Формат данных (datagram_t) ### Формат данных (datagram\_t)
```c ```c
enum metricType { MAC=1, IP=2, NetMask=3, GW=4, DNS=5, UpTime=6, Salt=7 }; enum metricType { MAC=1, IP=2, NetMask=3, GW=4, DNS=5, UpTime=6, Salt=7 };
+1 -1
View File
@@ -1,6 +1,6 @@
# Интеграция с Home Assistant # Интеграция с Home Assistant
> Источник: Wiki LightHub (lazyhome.ru), страница «интеграция_с_homeassistant». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «интеграция\_с\_homeassistant». Снапшот от 2026-10-02.
Контроллер LightHub прекрасно интегрируется в систему Home Assistant с использованием MQTT Контроллер LightHub прекрасно интегрируется в систему Home Assistant с использованием MQTT
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+40 -40
View File
@@ -1,6 +1,6 @@
# Настройка Modbus # Настройка Modbus
> Источник: Wiki LightHub (lazyhome.ru), страницы «настройка_modbus» и «режим_шлюза_ip_modbus». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страницы «настройка\_modbus» и «режим\_шлюза\_ip\_modbus». Снапшот от 2026-10-02.
## Функциональность драйвера Modbus v2 ## Функциональность драйвера Modbus v2
@@ -25,7 +25,7 @@ LightHub можно настроить на работу в качестве ш
В примере выше: В примере выше:
- "t_heat" - имя параметра устройства. - "t\_heat" - имя параметра устройства.
- "reg" - регистр (или стартовый HOLDING REGISTER) параметра - "reg" - регистр (или стартовый HOLDING REGISTER) параметра
- "ir" - INPUT REGISTER или "reg"- HOLDING REGISTER или "coil": COIL или "din" - DISCRETE INPUT - "ir" - INPUT REGISTER или "reg"- HOLDING REGISTER или "coil": COIL или "din" - DISCRETE INPUT
- "map" - правила преобразования (TBD) - "map" - правила преобразования (TBD)
@@ -162,10 +162,10 @@ LightHub можно настроить на работу в качестве ш
Устройство опрашивается согласно настройкам в библиотеке. А вот результаты опроса используются согласно настройкам в items. Устройство опрашивается согласно настройкам в библиотеке. А вот результаты опроса используются согласно настройкам в items.
В данном примере, В данном примере,
- "ch1" передается в MQTT топик "myhome/s_out/aaa1" плюс локальному устройству "localdimmer1" - "ch1" передается в MQTT топик "myhome/s\_out/aaa1" плюс локальному устройству "localdimmer1"
- "ch2" передается в MQTT топик "abc/aaa2" (если в названии топика есть / - он не дополняется слева статусным префиксом) - "ch2" передается в MQTT топик "abc/aaa2" (если в названии топика есть / - он не дополняется слева статусным префиксом)
- "ch3" передается локальному устройству "localdimmer3" - "ch3" передается локальному устройству "localdimmer3"
- "ch4" передается в MQTT топик "myhome/s_out/aaa4" и "myhome/s_out/aaa44", локальному устройству "localdimmer4" и "localdimmer44" (использован массив из двух JSON объектов) - "ch4" передается в MQTT топик "myhome/s\_out/aaa4" и "myhome/s\_out/aaa44", локальному устройству "localdimmer4" и "localdimmer44" (использован массив из двух JSON объектов)
Строки ch1 - ch4 в данном примере, определенные в третем параметре массива конфигурации, далее будем называть "именованными параметрами modbus item" Строки ch1 - ch4 в данном примере, определенные в третем параметре массива конфигурации, далее будем называть "именованными параметрами modbus item"
@@ -328,18 +328,18 @@ NB. Не надо именовать данные параметры имена
items:{ items:{
"p_zal3":[14,[2,"panel", "p_zal3":[14,[2,"panel",
{ {
"fan" :{"emit":"edem/air/vents/zal3/fan"}, "fan" :{"emit":"house/air/vents/zal3/fan"},
"mode":{"emit":"edem/air/vents/zal3/mode"}, "mode":{"emit":"house/air/vents/zal3/mode"},
"pwr" :{"emit":"edem/air/vents/zal3/pwr"}, "pwr" :{"emit":"house/air/vents/zal3/pwr"},
"sethum":{"emit":"edem/air/humzal3/set"}, "sethum":{"emit":"house/air/humzal3/set"},
"hum" :{"emit":"edem/air/humzal3/val","@S":null}, "hum" :{"emit":"house/air/humzal3/val","@S":null},
"setvoc":{"emit":"edem/air/voczal3/set"}, "setvoc":{"emit":"house/air/voczal3/set"},
"voc" :{"emit":"edem/air/voczal3/val"}, "voc" :{"emit":"house/air/voczal3/val"},
"settemp" :{"item":"tzal3/set"}, "settemp" :{"item":"tzal3/set"},
"roomtemp" :{"emit":"edem/fl2/term_bedr/1/val"}, "roomtemp" :{"emit":"house/fl2/term_bedr/1/val"},
"ch_temp":{}, "ch_temp":{},
"ch_hum":{}, "ch_hum":{},
"ext_temp":{}, "ext_temp":{},
@@ -359,7 +359,7 @@ NB. Не надо именовать данные параметры имена
Например так: Например так:
```json ```json
"fan" :{"emit":"edem/air/vents/zal3/fan","@V":null}, "fan" :{"emit":"house/air/vents/zal3/fan","@V":null},
``` ```
В этом случае, после того, как мы что-то записали в регистр, при следующем же опросе устройства, это будет обнаружено (если значение изменилось) и будут предприняты настроенные действия (например, значение будет отправлено по MQTT и отобразится в мобильном приложении Home Assistant) В этом случае, после того, как мы что-то записали в регистр, при следующем же опросе устройства, это будет обнаружено (если значение изменилось) и будут предприняты настроенные действия (например, значение будет отправлено по MQTT и отобразится в мобильном приложении Home Assistant)
@@ -433,12 +433,12 @@ RAW 14
"vent":[14,[247,"airset", "vent":[14,[247,"airset",
{ {
"tset":{"emit":"edem/s_out/vent/tset/set","@V":null}, "tset":{"emit":"house/s_out/vent/tset/set","@V":null},
"pmode":{"emit":"edem/s_out/vent/pmode/set","@V":null}, "pmode":{"emit":"house/s_out/vent/pmode/set","@V":null},
"fanspeed":{"emit":"edem/s_out/vent/fanspeed/set","@V":null}, "fanspeed":{"emit":"house/s_out/vent/fanspeed/set","@V":null},
"on":{"emit":"edem/s_out/vent/on/set","@V":null}, "on":{"emit":"house/s_out/vent/on/set","@V":null},
"rtemp":{"emit":"edem/s_out/vent/rtemp"}, "rtemp":{"emit":"house/s_out/vent/rtemp"},
"fanmin":{}, "fanmin":{},
"fanmax":{} "fanmax":{}
@@ -460,7 +460,7 @@ RAW 14
- AUTO - AUTO
- ON - ON
- HEAT - HEAT
- FAN_ONLY - FAN\_ONLY
Для команды OFF записываем 0 Для команды OFF записываем 0
Это реализуется строкой Это реализуется строкой
@@ -527,20 +527,20 @@ RAW 14
"vent":[14,[247,"airset", "vent":[14,[247,"airset",
{ {
"tset":{"emit":"edem/s_out/vent/set","@V":null}, "tset":{"emit":"house/s_out/vent/set","@V":null},
"pmode":{"emit":"edem/s_out/vent/cmd","@V":null}, "pmode":{"emit":"house/s_out/vent/cmd","@V":null},
"fanspeed":{"emit":"edem/s_out/vent/fan","@V":null}, "fanspeed":{"emit":"house/s_out/vent/fan","@V":null},
"on":{"emit":"edem/s_out/vent/oncmd","@V":null}, "on":{"emit":"house/s_out/vent/oncmd","@V":null},
"ruheat":{"emit":"edem/s_out/vent/ruheat"}, "ruheat":{"emit":"house/s_out/vent/ruheat"},
"ruslow":{"emit":"edem/s_out/vent/rupump"}, "ruslow":{"emit":"house/s_out/vent/rupump"},
"ramode":{"emit":"edem/s_out/vent/ramode"}, "ramode":{"emit":"house/s_out/vent/ramode"},
"rfanspd":{"emit":"edem/s_out/vent/rfanspd"}, "rfanspd":{"emit":"house/s_out/vent/rfanspd"},
"rfanlvl":{"emit":"edem/s_out/vent/rfanlvl"}, "rfanlvl":{"emit":"house/s_out/vent/rfanlvl"},
"rpumpon":{"emit":"edem/s_out/vent/rpumpon"}, "rpumpon":{"emit":"house/s_out/vent/rpumpon"},
"rtemp":{"emit":"edem/s_out/vent/rtemp"}, "rtemp":{"emit":"house/s_out/vent/rtemp"},
"rtempset":{"emit":"edem/s_out/vent/rtempset"}, "rtempset":{"emit":"house/s_out/vent/rtempset"},
"fault":{"emit":"edem/s_out/vent/fault"}, "fault":{"emit":"house/s_out/vent/fault"},
"tautoheat":{}, "tautoheat":{},
"tautocool":{}, "tautocool":{},
@@ -554,7 +554,7 @@ RAW 14
"twaterstart":{}, "twaterstart":{},
"twatershut":{}, "twatershut":{},
"twateridle":{}, "twateridle":{},
"fanauto":{"emit":"edem/s_out/vent/fanauto/set","@V":null}, "fanauto":{"emit":"house/s_out/vent/fanauto/set","@V":null},
"numspeed":{}, "numspeed":{},
"offbyfan":{} "offbyfan":{}
} }
@@ -587,13 +587,13 @@ RAW 14
Сверено с `lighthub/modules/out_modbus.cpp`, `lighthub/modules/out_modbus.h`, `lighthub/ipmodbus.cpp`, `lighthub/ipmodbus.h`, `lighthub/options.h`, `lighthub/item.h`. Сверено с `lighthub/modules/out_modbus.cpp`, `lighthub/modules/out_modbus.h`, `lighthub/ipmodbus.cpp`, `lighthub/ipmodbus.h`, `lighthub/options.h`, `lighthub/item.h`.
- Ключи шаблона устройства, подтвержденные в коде (`out_Modbus::getConfig`, out_modbus.cpp:139-249): `baud` (по умолчанию 9600), `serial` (по умолчанию `SERIAL_8N1`), `poll` с подклавишами `regs`, `irs`, `coils`, `dins` и `delay` (по умолчанию 1000 мс — в wiki значение по умолчанию не указано), `par`. - Ключи шаблона устройства, подтвержденные в коде (`out_Modbus::getConfig`, out\_modbus.cpp:139-249): `baud` (по умолчанию 9600), `serial` (по умолчанию `SERIAL_8N1`), `poll` с подклавишами `regs`, `irs`, `coils`, `dins` и `delay` (по умолчанию 1000 мс — в wiki значение по умолчанию не указано), `par`.
- Ключи параметра в `par` (out_modbus.cpp:433-467, 1084-1085, 203-204): `reg`, `ir`, `coil`, `din`, `type`, `map`, `id`, `prefetch` (boolean). Ключ `prefetch` поддерживается кодом (при записи предварительно опрашивается регистр), но в wiki не описан. - Ключи параметра в `par` (out\_modbus.cpp:433-467, 1084-1085, 203-204): `reg`, `ir`, `coil`, `din`, `type`, `map`, `id`, `prefetch` (boolean). Ключ `prefetch` поддерживается кодом (при записи предварительно опрашивается регистр), но в wiki не описан.
- Поддерживаемые типы (таблица `regSize_P`, out_modbus.cpp:47-60): `i16`, `i32`, `u16`, `u32`, `i8h`, `i8l`, `u8h`, `u8l`, `x10`, `100` — только эти типы. Список в wiki неполный: отсутствуют `u8h` и `u8l`. - Поддерживаемые типы (таблица `regSize_P`, out\_modbus.cpp:47-60): `i16`, `i32`, `u16`, `u32`, `i8h`, `i8l`, `u8h`, `u8l`, `x10`, `100` — только эти типы. Список в wiki неполный: отсутствуют `u8h` и `u8l`.
- Ключ `mapcmd` (пример панели Zentec, раздел «Подавление повторных значений») в коде не найден — поддерживается только `map`; вероятно, опечатка/устаревшее имя. - Ключ `mapcmd` (пример панели Zentec, раздел «Подавление повторных значений») в коде не найден — поддерживается только `map`; вероятно, опечатка/устаревшее имя.
- Ключ `"mode":"r"` в примере параметра `rtemp` в out_modbus.cpp не обрабатывается — вероятно, унаследован от драйвера Modbus v1. - Ключ `"mode":"r"` в примере параметра `rtemp` в out\_modbus.cpp не обрабатывается — вероятно, унаследован от драйвера Modbus v1.
- В коде есть ключ `sendchanges` (out_modbus.cpp:1085), не упомянутый в wiki. - В коде есть ключ `sendchanges` (out\_modbus.cpp:1085), не упомянутый в wiki.
- Перечень числовых идентификаторов суффиксов в wiki (HUE 9, SAT 10, TEMP 11, VAL 12, DELAYED 13, RAW 14) **не совпадает** с текущим кодом (item.h:27-39): `CMD 1, SET 2, VAL 3, DELAYED 4, HSV 5, RGB 6, FAN 7, MODE 8, CTRL 9, HUE 10, SAT 11, TEMP 12, RAW 13`. Примеры с `id` 11-18 (Zentec, вентустановка) соответствуют старой нумерации; при использовании на актуальной прошивке значения `id` нужно пересматривать. - Перечень числовых идентификаторов суффиксов в wiki (HUE 9, SAT 10, TEMP 11, VAL 12, DELAYED 13, RAW 14) **не совпадает** с текущим кодом (item.h:27-39): `CMD 1, SET 2, VAL 3, DELAYED 4, HSV 5, RGB 6, FAN 7, MODE 8, CTRL 9, HUE 10, SAT 11, TEMP 12, RAW 13`. Примеры с `id` 11-18 (Zentec, вентустановка) соответствуют старой нумерации; при использовании на актуальной прошивке значения `id` нужно пересматривать.
- Описание типа `i8h`/`i8l` («при записи другие 8 бит будут заполнены 0xFF») не подтверждается кодом: запись идет целиком в 16-битный регистр смещенным байтом (`writeSingleRegister`, out_modbus.cpp:897-905), остальные биты обнуляются. - Описание типа `i8h`/`i8l` («при записи другие 8 бит будут заполнены 0xFF») не подтверждается кодом: запись идет целиком в 16-битный регистр смещенным байтом (`writeSingleRegister`, out\_modbus.cpp:897-905), остальные биты обнуляются.
- Механика `@S`/`@V` (подавление повторных значений и «записали сами — не обрабатываем») подтверждена: `createLastMeasured`/`getLastMeasured`, сравнение с `@V` («Ignored - equal with setted val», out_modbus.cpp:676-701). - Механика `@S`/`@V` (подавление повторных значений и «записали сами — не обрабатываем») подтверждена: `createLastMeasured`/`getLastMeasured`, сравнение с `@V` («Ignored - equal with setted val», out\_modbus.cpp:676-701).
- Шлюз IP-Modbus: компиляционная опция `IPMODBUS` (ipmodbus.h:1), порты TCP и UDP — оба 502 (ipmodbus.h:26-27), значения по умолчанию `MODBUS_SERIAL_BAUD 9600` и `MODBUS_SERIAL_PARAM SERIAL_8N1` (options.h:154-159) — совпадает с wiki. - Шлюз IP-Modbus: компиляционная опция `IPMODBUS` (ipmodbus.h:1), порты TCP и UDP — оба 502 (ipmodbus.h:26-27), значения по умолчанию `MODBUS_SERIAL_BAUD 9600` и `MODBUS_SERIAL_PARAM SERIAL_8N1` (options.h:154-159) — совпадает с wiki.
+1 -1
View File
@@ -62,7 +62,7 @@ And appropriate configuration of LightHub items
Note: Note:
There is not necessary to set-up persistent topics in Openhab nor configure persistent storage in OpenHab. There is not necessary to set-up persistent topics in Openhab nor configure persistent storage in OpenHab.
LightHub using persistent MQTT publishing for Status topic /myhome/s_out. After "cold start" and establishing MQTT connection with broker, Lighthub subscribing on Status topic for 5 seconds interval to capture and retrieve previous status from persistent MQTT topic /myhome/s_out LightHub using persistent MQTT publishing for Status topic /myhome/s\_out. After "cold start" and establishing MQTT connection with broker, Lighthub subscribing on Status topic for 5 seconds interval to capture and retrieve previous status from persistent MQTT topic /myhome/s\_out
## Сверка с кодом (2026-10-02) ## Сверка с кодом (2026-10-02)
+3 -3
View File
@@ -1,6 +1,6 @@
# Работаем дистанционно # Работаем дистанционно
> Источник: Wiki LightHub (lazyhome.ru), страница «работаем_дистанционно». Снапшот от 2026-10-02. > Источник: Wiki LightHub (lazyhome.ru), страница «работаем\_дистанционно». Снапшот от 2026-10-02.
## ОТА прошивка ## ОТА прошивка
@@ -25,7 +25,7 @@ password - значение по-умолчанию. Его можно заме
## Работа с SYSLOG ## Работа с SYSLOG
Для Windows устанавливаем Visual Syslog Сервер для Windows [https://github.com/MaxBelkov/visualsyslog/blob/master/readme_rus.md](https://github.com/MaxBelkov/visualsyslog/blob/master/readme_rus.md) Для Windows устанавливаем Visual Syslog Сервер для Windows [https://github.com/MaxBelkov/visualsyslog/blob/master/readme\_rus.md](https://github.com/MaxBelkov/visualsyslog/blob/master/readme_rus.md)
В корне конфигурационного файлa Lighthub указываем: В корне конфигурационного файлa Lighthub указываем:
@@ -37,7 +37,7 @@ password - значение по-умолчанию. Его можно заме
## Выполнение CLI команд через MQTT ## Выполнение CLI команд через MQTT
Достаточно в топик myhome/имя_контроллера/$command послать нужную команду [CLI интерфейс](../core/cli_interface.md) Достаточно в топик myhome/имя\_контроллера/$command послать нужную команду [CLI интерфейс](../core/cli_interface.md)
Также, можно воспользоваться http [API](https://www.lazyhome.ru/dokuwiki/doku.php?id=api) Также, можно воспользоваться http [API](https://www.lazyhome.ru/dokuwiki/doku.php?id=api)
+463
View File
@@ -0,0 +1,463 @@
# Панель управления климатом Zentec Z031-2C0 — интеграция с LightHub
> Документ описывает настенную панель управления климатом **Z031-2C0** с
> нестандартной прошивкой **P190919LH** (адаптация стокового ПО P190919 под
> LightHub), её карту регистров Modbus и схему интеграции в умный дом
> LightHub + Home Assistant. Все примеры в документе — обобщённые рабочие
> конфигурации; имена топиков соответствуют схеме `house/<контроллер>/...`.
>
> Назначение переработанного ПО: с одной панели в помещении управлять
> кондиционером, приточной вентиляцией, увлажнителем, температурой воздуха
> (батареи отопления) и температурой тёплого пола.
---
## 1. Отличия от стоковой прошивки
Стоковая панель Z031 управляла одной вентустановкой и имела дежурный режим.
В прошивке P190919LH пользовательский интерфейс переработан:
| Функция | Стоковая прошивка | P190919LH |
|---|---|---|
| Кнопка «Питание» | Дежурный/рабочий режим | Вкл/выкл кондиционера (гл. экран); вкл/выкл увлажнителя (режим увлажнения); смена режима кондиционера (режим кондиционера) |
| Главный экран | Рабочий экран вентустановки | Попеременно: уставка температуры воздуха и текущее время |
| Стрелки ↑/↓ (гл. экран) | — | Уставка температуры воздуха: применяется одновременно к термостату батарей **и** к кондиционеру |
| Кнопка «Вентилятор» | Скорость вентустановки | Интенсивность многозональной приточной вентиляции (значок «A» — авторежим по датчику CO2) |
| Кнопка «Режим» | — | Циклическое переключение экранов: главный → увлажнение → качество воздуха → уличная температура → тёплый пол → кондиционер |
| Режим «температура отработанного теплоносителя» | Отображение | Заменён на **настройку температуры тёплого пола** |
| Режим «отображение и обработка воздуха» | Режим вентустановки | Заменён на **режим управления кондиционером** (уставка — стрелки, режим — «Питание», скорость вентилятора — «Вентилятор») |
Режимы дежурного/рабочего в новом ПО нет. При работе кондиционера его режим
индицируется вверху панели значками «охлаждение» / «нагрев» / «вентиляция».
Мигание значка «волнистая линия» у индикатора скорости вентиляции означает,
что вентилятор включён (даже если он обслуживает иную зону).
## 2. Органы управления и индикации
![Панель Z031, нумерация элементов](images/z031/panel_buttons.png)
| Поз. | Назначение | Описание |
|---|---|---|
| 1 | Индикатор работы вентилятора | ![скорость](images/z031/ind_fan_speed.png) В главном режиме — установленная скорость приточной вентиляции или авторежим. Мигает, когда работает приточная вентиляция в доме |
| 2 | «Фильтр» / «Авария» | ![фильтр](images/z031/ind_filter.png) Требуется замена фильтра / серьёзная авария |
| 3 | Дополнительный режим | ![увлажнение вкл](images/z031/ind_hum_on.png) / ![увлажнение выкл](images/z031/ind_hum_off.png) режим увлажнения; ![качество воздуха](images/z031/ind_airq.png) режим качества воздуха |
| 4 | Физические параметры | ![встр. датчик](images/z031/ind_t_int.png) встроенный датчик, ![канальный](images/z031/ind_t_duct.png) канальный, ![улица](images/z031/ind_t_out.png) улица, ![помещение](images/z031/ind_t_room.png) помещение, ![тёплый пол](images/z031/ind_t_floor.png) тёплый пол (с настройкой), ![мощность](images/z031/ind_heatpwr.png) мощность нагревателя, % |
| 5 | День недели | |
| 6 | Режим кондиционера | ![авто](images/z031/ind_ac_auto.png) авто, ![вентиляция](images/z031/ind_ac_vent.png) вентиляция, ![охлаждение](images/z031/ind_ac_cool.png) охлаждение, ![нагрев](images/z031/ind_ac_heat.png) нагрев |
| 7 | Вспомогательный индикатор | ![уставка T](images/z031/ind_set_temp.png) уставка температуры; ![уставка влажности](images/z031/ind_set_hum.png) уставка влажности/качества воздуха; ![параметризация](images/z031/ind_param.png) сервисный режим параметризации |
| 8 | Главный индикатор | ![время](images/z031/ind_time.png) время, ![ошибка](images/z031/ind_err.png) код ошибки, ![температура](images/z031/ind_temp.png) температура, ![влажность](images/z031/ind_humval.png) влажность/качество воздуха |
| 9 | Индикатор таймера | ![таймер](images/z031/ind_timer.png) выполняется управление по расписанию |
| 10.1 | «Питание» | Главный экран — вкл/выкл кондиционера; увлажнение — вкл/выкл увлажнителя; кондиционер — смена режимов работы |
| 10.2 | «Таймер/Режим» | Циклическое переключение экранов: главный → увлажнение → качество воздуха → уличная температура → тёплый пол → кондиционер; настройка времени/даты в сервисных меню |
| 10.3 | «Вентилятор» | Главный экран — скорость приточной вентиляции; кондиционер — скорость вентилятора кондиционера; вход в меню параметризации (удержание 4 с) |
| 10.4/10.5 | «Стрелка вверх/вниз» | Изменение уставок и параметров, вход в дополнительные меню |
## 3. Меню параметризации
Вход: удержание кнопки «Вентилятор» 4 секунды, выбор пункта стрелками,
вход — кратковременное нажатие «Вентилятор».
| № | Пункт | Назначение |
|---|---|---|
| 1 | `o_1` | Настройка расписания (таймер, задачи t1–t9) |
| 2 | `o_2` | Настройка часов и календаря |
| 3 | `o_3` | Настройка параметров (группы A, B, C, D, E, F, U) |
Кнопки в меню: «Режим» — переход между полями (в о\_1 — активация записи
таймера), «Питание» — выход в главный экран, «Вентилятор» — переход к
следующему полю (в о\_3 — кольцевой переход группа → номер → значение).
## 4. Карта регистров Modbus
Протокол: Modbus RTU, `8E1` (8 бит, чётность Even, 1 стоп-бит), 9600 бод.
Тип регистра параметров: беззнаковый 2 байта, команда чтения
Read Holding Registers.
### 4.1 Группа A — технологические параметры (адреса 50000–50007)
| Параметр | Назначение | Нач. значение | Доступ | Адрес |
|---|---|---:|:---:|---:|
| A0 | Маска режима тёплого пола (аналог A6) | 10 | R/W | 50000 |
| A1 | Маска режима кондиционера (аналог A6) | 15 | R/W | 50001 |
| A2 | Конфигурация вентилятора кондиционера (аналог A5) | 3 | R/W | 50002 |
| A3 | Кол-во скоростей кондиционера | 3 | R/W | 50003 |
| A4 | Макс. кол-во скоростей вентилятора (1–7). При 0 — не выводится скорость, авторежим, знак вентилятора и обдува | 5 | R/W | 50004 |
| A5 | Конфигурация вентилятора: bit0 — разрешить авторежим; bit1 — значок вентилятора; bit2 — значок обдува | 5 | R/W | 50005 |
| A6 | Маска режима работы: bit0 — vent, bit1 — warm, bit2 — cool, bit3 — auto | 15 | R/W | 50006 |
| A7 | Маска дополнительных режимов: bit0 — влажность; bit1 — качество воздуха; bit2 — тёплый пол; bit3 — кондиционер | 15 | R/W | 50007 |
### 4.2 Группа B — технологические параметры (адреса 50008–50015)
| Параметр | Назначение | Нач. значение | Доступ | Адрес |
|---|---|---:|:---:|---:|
| B0 | Мин. уставка температуры (15–30) | 15 | R/W | 50008 |
| B1 | Макс. уставка температуры (30–255) | 35 | R/W | 50009 |
| B2 | Мин. уставка влажности (0–50) | 25 | R/W | 50010 |
| B3 | Макс. уставка влажности (50–100) | 70 | R/W | 50011 |
| B4 | Мин. уставка качества воздуха (0–50) | 10 | R/W | 50012 |
| B5 | Макс. уставка качества воздуха (50–100) | 99 | R/W | 50013 |
| B6 | Точка измерения температуры (вывод на гл. экран): 0 — встроенный датчик; 1 — канальный; 2 — вытяжка (домик) | 1 | R/W | 50014 |
| B7 | Маска вспомогательного вывода: bit0 — встроенная T; bit1 — канальная T; bit2 — вытяжка; bit3 — улица; bit4 — тёплый пол; bit5 — мощность нагревателя % | 24 | R/W | 50015 |
### 4.3 Группы C, D, E, F — параметры свободного назначения
Адреса 50016–50047 (C0–C7, D0–D7, E0–E7, F0–F7), по 8 ячеек в группе,
значения 0–255, R/W, начальное значение 0.
### 4.4 Группа U — системные параметры (адреса 50048–50055)
| Параметр | Назначение | Нач. значение | Доступ | Адрес |
|---|---|---:|:---:|---:|
| U0 | Флаг первого включения | 0 | R/W | 50048 |
| U1 | Корректировка встроенного датчика T (шаг 1 °C) | 10 | R/W | 50049 |
| U2 | Время автовыхода из вспомогательных меню, с (5–30) | 15 | R/W | 50050 |
| U3–U6 | Подсветка min/max дневная и ночная (0–100) | 20/100/0/20 | R/W | 50051–50054 |
| U7 | Резерв | 0 | R/W | 50055 |
### 4.5 Переменные управления (адреса 39993–40008)
| Назначение | ПЗУ | Пределы | Нач. значение | Доступ | Адрес |
|---|:---:|---|---:|:---:|---:|
| Авторежим вентилятора | — | 0/1 | — | R/W | 39999 |
| Авторежим вентилятора конд. | — | 0/1 | — | R/W | 39993 |
| Уставка скорости вентилятора (приток) | + | 1–7 | 1 | R/W | 40000 |
| Главный режим работы (битовая маска) | + | 1/2/4/8 | 1 | R/W | 40001 |
| Главная уставка температуры | + | 0–99 | 18 | R/W | 40002 |
| Главный пуск (питание кондиционера) | + | 0–1 | 0 | R/W | 40003 |
| Аварии 01–16 | — | битовая маска | — | R/W | 40004 |
| Аварии 17–32 | — | битовая маска | — | R/W | 40005 |
| Аварии 33–48 | — | битовая маска | — | R/W | 40006 |
| Главная уставка влажности | + | 0–99 | 0 | R/W | 40007 |
| Главная уставка VOC % | + | 0–99 | 0 | R/W | 40008 |
| Уставка температуры кондиционера | — | °C | — | R/W | 39994 |
| Режим работы тёплого пола | — | | — | R/W | 39995 |
| Уставка температуры тёплого пола | — | °C | 30 | R/W | 39996 |
| Скорость вентиляции кондиционера | — | | 0 | R/W | 39997 |
| Увлажнение включено | — | 0/1 | 0 | R/W | 39998 |
Битовая маска главного режима (40001): bit0 — vent (1), bit1 — warm (2),
bit2 — cool (4), bit3 — auto (8).
**ВАЖНО.** Регистры 40000, 40001, 40002, 40007, 40008 имеют прямой доступ к
ПЗУ (flash с ресурсом 10000 циклов записи). Частая запись недопустима.
Запись значения вне диапазона, ограниченного параметрами групп A/B, приводит
к циклической перезаписи ПЗУ и преждевременному выходу панели из строя.
Поэтому в LightHub для таких параметров включён `prefetch: true` —
контроллер пишет в регистр только при реальном изменении значения.
### 4.6 Аварии
Регистры 40004/40005/40006 — битовые маски аварий E01–E16, E17–E32,
E33–E48 (бит 0 = E01 и т.д.). Запись значения 1–15 блокирует клавиатуру,
останавливает систему («Главный пуск» = 0) и показывает «АВАРИЯ Exx».
Запись 0 возвращает экран в главный режим. Можно записывать несколько бит
одновременно — сообщения выводятся последовательно. В конфигурации Эдема
регистр 40005 (alm17) используется для отображения аварии увлажнителя,
40004 (alm01) — аварии вентустановки.
При отсутствии запросов к панели на экране выводится код «АВАРИЯ LN».
### 4.7 Технические переменные (только чтение, 30000–30002)
| Назначение | Тип | Доступ | Адрес |
|---|---|:---:|---:|
| Температура от встроенного датчика* | SInt16 | R | 30000 |
| Влажность от встроенного датчика** | UInt8 | R | 30001 |
| Встроенный датчик качества воздуха** | UInt8 | R | 30002 |
### 4.8 Технические переменные (R/W, 40009–40017)
| Назначение | Тип | Доступ | Адрес |
|---|---|:---:|---:|
| Канальный внешний датчик температуры (приточный воздух)* | SInt16 | R/W | 40009 |
| Температура наружного воздуха* | SInt16 | R/W | 40010 |
| Температура вытяжного воздуха* | SInt16 | R/W | 40011 |
| Температура тёплого пола* | SInt16 | R/W | 40012 |
| Канальный датчик влажности*** | UInt8 | R/W | 40013 |
| Общая мощность нагревателя, %*** | UInt8 | R/W | 40014 |
| Качество воздуха с внешнего датчика | UInt16 | R/W | 40015 |
| Текущая температура кондиционера* | SInt16 | R/W | 40016 |
| Скорость главной вентустановки | UInt8 | R/W | 40017 |
\* значение ×10 (267 → 26.7 °C). \*\* в модели Z031-2C0 не используется.
\*\*\* значение 0–99.
Часы/календарь панели также доступны по Modbus: 65512 — год, 65513 — месяц,
65514 — день, 65515 — день недели, 65516 — час, 65517 — минута, 65518 —
секунда, 65519 — часовой пояс (UInt8, R/W).
## 5. Интеграция с LightHub
Панель — Modbus RTU-абонент контроллера LightHub (тип канала **MBUS**,
канал-тип 14). Архитектура интеграции на примере объекта «Эдем»:
```
MQTT (Home Assistant, syslog)
▲ │
│ ▼
┌─────────────────────┐
│ LightHub "house3" │ CAN addr 13
│ - Modbus master │──── RTU 8E1 9600 ──► Панель Z031 №1 (зал) addr 31
│ - PID термостаты │──── RTU 8E1 9600 ──► Панель Z031 №2 (кабинет) addr 32
│ (батареи, тёплый │──── RTU 8E1 9600 ──► Панель Z031 №3 (спальня) addr 33
│ пол) │──── 1-Wire ──► датчики температуры помещений/полов
│ - датчики CO2 (S8) │
└─────────┬───────────┘
│ CAN (маршрутизация команд/статусов)
▼
┌─────────────────────┐
│ LightHub "air" │ CAN addr 15
│ - приточная │──── Modbus ──► вентустановка (приток, нагреватели, насос)
│ вентустановка │
│ - MULTIVENT: зоны │──── реле задвижек зон
│ - HUMIDIFIER: │──── клапаны зон, насос, датчик давления
│ увлажнение │
│ - PID по CO2 │───── CO2 датчики Sensair S8 по комнатам
└─────────────────────┘
```
### 5.1 Modbus-шаблон панели
Шаблон `panel` задаётся в секции `modbus` конфига LightHub. Он описывает
линию (`serial: "8E1"`), расписание опроса (`poll`) и таблицу соответствия
параметров (`par`). Опрашиваются диапазоны 39993–40008 и 30000–30001
каждые 5 секунд:
```json
"panel": {
"serial": "8E1",
"poll": {
"regs": [[39993, 40008], [30000, 30001]],
"delay": 5000
},
"par": { ... }
}
```
Каждый параметр `par` привязывает имя (subitem) к регистру и опциям:
| Имя (subitem) | Регистр | Опции | Смысл |
|---|---:|---|---|
| `fanspeed` | 40000 | `prefetch`, `map`, `id: 7` (S\_FAN) | Скорость приточной вентиляции; `map.val` [1,255,1,5] масштабирует 1–7 в 0–255; команда OFF → 0 |
| `settemp` | 40002 | `prefetch`, `id: 12` | Уставка температуры воздуха (батареи + кондиционер) |
| `alm01` / `alm17` / `alm33` | 40004/40005/40006 | `id: 13/14/15` | Регистры аварий |
| `sethum` | 40007 | `prefetch`, `id: 16` | Уставка влажности |
| `setvoc` | 40008 | `prefetch`, `map.val` [400,2000,0,100], `id: 17` | Уставка качества воздуха: ppm CO2 ↔ % |
| `roomtemp` | 30000 | `type: "x10"` | Температура встроенного датчика (×10) |
| `hum` | 30001 | | Влажность встроенного датчика |
| `voc` | 30002 | | Качество воздуха встроенного датчика |
| `ch_temp` | 40009 | `type: "x10"` | Приточный (канальный) воздух |
| `ext_temp` | 40010 | `type: "x10"`, `id: 18` | Наружная температура |
| `out_temp` | 40011 | `type: "x10"`, `id: 19` | Температура вытяжки |
| `floor_temp` | 40012 | `type: "x10"`, `id: 20` | Температура тёплого пола |
| `ch_hum` | 40013 | `id: 28` | Влажность канального датчика |
| `heat_pwr` | 40014 | `id: 29` | Мощность нагревателя, % |
| `extvoc` | 40015 | `map.val` [400,2000,0,100], `id: 27` | CO2 внешнего датчика (ppm ↔ %) |
| `actemp` | 40016 | `type: "x10"`, `id: 25` | Текущая температура кондиционера |
| `fanlvl` | 40017 | `id: 21` | Скорость главной вентустановки |
| `floormode` | 39995 | `prefetch`, `id: 22` | Режим тёплого пола |
| `setfloor` | 39996 | `prefetch`, `id: 23` | Уставка тёплого пола |
| `humpwr` | 39998 | `prefetch`, `map.cmd` ON→1 / OFF→0, `id: 24` | Увлажнение вкл/выкл |
| `fanauto` | 39999 | `prefetch`, `map.cmd` ENABLE/AUTO→1, DISABLE→0, `id: 7` | Авторежим вентиляции по CO2 |
| `acsettemp` | 39994 | `prefetch`, `id: 26` | Уставка кондиционера |
| `acon` | 40003 | `prefetch`, `map.cmd` OFF→0, `def: 40001`, `id: 8` | Питание кондиционера |
| `acmode` | 40001 | `prefetch`, `map.cmd` FAN\_ONLY→1, HEAT→4, COOL→2, AUTO→8, `id: 8` | Режим кондиционера |
| `acfanauto` | 39993 | `prefetch`, `map.cmd` AUTO→1, `def: 39997`, `id: 2` | Авторежим вентилятора кондиционера |
| `acfan` | 39997 | `prefetch`, `map.cmd` OFF→0, LOW→1, MEDIUM→2, HIGH→3, `id: 2` | Скорость вентилятора кондиционера |
| `y/mo/d/dw/h/m/s` | 65512–65518 | | Часы/календарь |
| `blmind/blmaxd/blminn/blmaxn` | 50051–50054 | | Подсветка |
Механика драйвера MBUS:
- **Опрос**: списки `regs` читаются каждые `delay` мс; найденные значения
публикуются в статусные топики (или направляются в связанные items через
`item`/`emit` у параметра).
- **Запись**: при получении команды на item ищется параметр шаблона по имени
subitem, иначе — по числовому коду суффикса, совпадающему с `id`
(стандартные коды: S\_CMD=1, S\_SET=2, S\_VAL=3, S\_FAN=7, S\_MODE=8).
- **`prefetch: true`**: перед записью читается текущее значение регистра;
запись выполняется только при отличии. Обязательно для регистров с
прямым доступом к ПЗУ (см. раздел 4.5).
- **`map.val`** масштабирует числовое значение между регистром и
LightHub-значением: `[fromRegMin, fromRegMax, toMin, toMax]`.
**`map.cmd`** преобразует текстовые команды (ON, HEAT, COOL...) в числа
регистра и обратно. **`def`** — подстановка значения из другого регистра
при записи.
- **`@S: 0`** в описании параметра item'а подавляет повторную публикацию
неизменившегося статуса.
### 5.2 Каналы панелей (items)
Каждая панель — item типа `MBUS` (14) с адресом абонента и именем шаблона:
```json
"p_zal3": [14, [31, "panel", { ...маршрутизация параметров... }], null, 8192, 0]
```
Первый элемент — Modbus-адрес панели (31/32/33), второй — имя шаблона,
третий — объект маршрутизации. Маршрутизация связывает параметр шаблона с
локальными items, MQTT и CAN:
```json
"p_zal3": [14, [31, "panel", {
"fanspeed": { "can": [15, 3, "fan", 7], "@S": 0 },
"settemp": [{ "item": "tzal3/set", "@S": 0 }, // уставка → PID батарей
{ "item": "ac_zal3/set" }], // и → уставка кондиционера
"acsettemp": { "item": "ac_zal3/set", "@S": 0 },
"acon": { "item": "ac_zal3/cmd", "@S": 0 },
"acfanauto": { "item": "ac_zal3/fan", "@S": 0 },
"setfloor": { "item": "tfl31/set", "@S": 0 }, // уставка тёплого пола → PID пола
"sethum": { "can": [15, 431, "set"], "@S": 0 }, // → увлажнитель на контроллере air
"humpwr": { "can": [15, 431, "cmd"], "@S": 0 },
"setvoc": { "can": [15, 331, "set"], "@S": 0 }, // → CO2-PID вентиляции на air
"fanauto": { "can": [15, 331, "cmd"], "@S": 0 },
"hum": { "emit": "${snsr}humzal3/val", "@S": null,
"can": [15, 431, "val"] }, // влажность → air (обратная связь)
"roomtemp": { "emit": "t_zal3_p", "@S": 0 },
"ch_temp": {}, "ext_temp": {}, "out_temp": {}, "extvoc": {},
"floor_temp": {}, "actemp": {}, "fanlvl": {},
"alm01": {}, "alm17": {}, "alm33": {},
"acmode": { "@S": 0 }, "acfan": { "@S": 0 },
"m": {}, "s": {}, "blmind": {}, "blmaxd": {}
}], null, 8192, 0]
```
Элемент `"can"` — маршрутизация на другой контроллер по CAN: `[адрес,
itemId, суффикс, subitem]`. Здесь `15` — CAN-адрес контроллера `air`,
`331/332/333` — item'ы PID-регуляторов CO2 (`co2zal3`, `co2cab3`,
`co2bedr3`), `431/432/433` — item'ы PID-регуляторов увлажнения
(`humzal3`, `humcab3`, `humbedr3`). Элемент `"emit"` публикует значение в
MQTT-топик, `"item"` отправляет в локальный item.
### 5.3 Управление температурой воздуха (батареи + кондиционер)
Уставка с панели (`settemp`, регистр 40002) расходится на два контура:
- **PID-термостат батарей** (`tzal3`, `tcab3`, `tbedr3` — тип 13): уставка
через `"item": "tzal3/set"`, вход — 1-Wire датчик температуры помещения
(`p_zal3/ch_temp` → `tzal3`), выход — slow-PWM реле термоклапана
(`rzal3` — тип 16, RELAYPWM).
- **Кондиционер** (`ac_zal3`, `ac_cab3` — тип 10, ACHAIER): уставка
`ac_zal3/set` берётся из `acsettemp` панели, а `settemp` одновременно
обновляет её — стрелки на главном экране меняют температуру и батарей,
и кондиционера.
Текущая температура кондиционера (`actemp`, регистр 40016) передаётся в
`ac_zal3/temp` и дальше в Home Assistant как `current_temperature`.
### 5.4 Управление тёплым полом
Режим тёплого пола на панели (регистры 39995/39996) связан с локальными
PID-регуляторами пола: `setfloor` → `tfl31/set` (туалет), `tfl32/set`
(ванна), `tbath3/set` (ванная при спальне). Температура пола приходит
обратно в регистр 40012 через 1-Wire датчики (`p_zal3/floor_temp` ←
`tfl31` и т.д.).
### 5.5 Вентиляция и увлажнение (контроллер air)
Приточная вентиляция и увлажнение живут на отдельном контроллере `air`
(CAN-адрес 15), панель ими управляет через CAN-маршрутизацию (см. 5.2):
- **Приточная вентиляция** — item `vents` (тип 18, MULTIVENT): зоны
`zal3`, `cab3`, `bedr3` с задвижками; центральная установка `vent`
(тип 14, MBUS, шаблон `airset`) — приточный вентилятор, нагреватели,
насос. Запросы воздуха в зоны формируют PID-регуляторы CO2
(`co2zal3` и т.д., тип 13, вход — датчик Sensair S8, выход — `/fan`
зоны). Панель через `fanspeed` (S\_FAN, CAN item 3 — центральная
установка) и `setvoc`/`fanauto` (CAN item 331/332/333 — CO2-PID зоны)
задаёт интенсивность и режим «авто по CO2». Статус скорости главной
установки возвращается в панель через регистр 40017 (`fanlvl`).
- **Увлажнение** — item `hum` (тип 21, HUMIDIFIER) на контроллере `air`:
насос, промывочный клапан, зональные клапаны, датчик давления. Панель
управляет зоной (`humpwr` → вкл/выкл увлажнителя зоны, `sethum` →
уставка) через CAN item'ы `humzal3`/`humcab3`/`humbedr3` (PID, тип 13),
влажность помещения передаётся панелью обратно на `air` и в MQTT
(`${snsr}humzal3/val`). Авария увлажнителя подаётся на панели через
регистр 40005 (`alm17`).
### 5.6 Home Assistant (MQTT)
Статусные топики LightHub (`house/s_out/...`) и командные топики
(`house/house3/...`, `house/air/...`) подключаются к HA через
`mqtt.yaml`. Примеры сущностей, связанных с панелями:
```yaml
# Кондиционер зала (панель p_zal3, item ac_zal3)
climate:
- name: "Кондиционер Зал 3"
modes: [off, heat, auto, cool, fan_only]
fan_modes: [auto, high, medium, low]
mode_state_topic: "house/s_out/ac_zal3/cmd"
mode_command_topic: "house/house3/ac_zal3/cmd"
temperature_low_command_topic: "house/house3/ac_zal3/set"
temperature_high_command_topic: "house/house3/tzal3/set" # уставка батарей
current_temperature_topic: "house/s_out/ac_zal3/temp" # actemp (reg 40016)
fan_mode_command_topic: "house/house3/ac_zal3/fan"
# Увлажнитель зала (контроллер air)
humidifier:
- name: "Увлажнитель зал 3-й этаж"
command_topic: "house/air/humzal3/cmd"
state_topic: "house/s_out/humzal3/cmd"
target_humidity_command_topic: "house/air/humzal3/set"
target_humidity_state_topic: "house/s_out/humzal3/set"
current_humidity_topic: "house/snsr/humzal3/val"
# Приток зала (multivent + CO2-PID, preset auto/manual)
fan:
- name: "Приток зал 3эт"
state_topic: "house/s_out/vents/zal3/cmd"
command_topic: "house/air/vents/zal3/cmd"
percentage_state_topic: "house/s_out/vents/zal3/fan"
percentage_command_topic: "house/air/vents/zal3/fan"
preset_mode_state_topic: "house/s_out/co2zal3/ctrl"
preset_mode_command_topic: "house/air/co2zal3/ctrl"
# Климат (батареи, PID термостат)
- name: "Климат Зал"
mode_command_topic: "house/house3/tzal3/cmd"
temperature_command_topic: "house/house3/tzal3/set"
current_temperature_topic: "house/s_out/t_zal3"
action_topic: "house/s_out/rzal3/action"
# Тёплый пол
- name: "Теплый пол туалет"
mode_command_topic: "house/house3/tfl31/cmd"
temperature_command_topic: "house/house3/tfl31/set"
current_temperature_topic: "house/s_out/t_fl31"
# Аварии на панелях
sensor:
- name: "Увлажнитель авария"
state_topic: "house/in/panels/alm17/set"
- name: "Вентиляция авария"
state_topic: "house/in/panels/alm01/set"
- name: "Вентилятор" # скорость главной вентустановки (reg 40017)
state_topic: "house/in/panels/fanlvl/set"
unit_of_measurement: '%'
```
Групповой item `panels` (`[7, 210]`, члены `p_zal3`, `p_cab3`,
`p_bedr3`) даёт единые топики `house/in/panels/<параметр>/set` для
широковещательного управления всеми панелями сразу (используется для `alm01`,
`alm17`, `fanlvl`).
## 6. Замечания по эксплуатации
- Панель синхронизирует время по Modbus (регистры 65512–65518) — при
подключении к LightHub время ведёт контроллер.
- Не пишите в ПЗУ-регистры (40000/40001/40002/40007/40008) чаще, чем это
делает человек с панели; `prefetch: true` в шаблоне защищает от
избыточных записей.
- Уставка VOC задаётся в LightHub в ppm CO2 (400–2000) и масштабируется в
проценты панели (0–100 %; 50 % ≈ 1000 ppm).
- Код «АВАРИЯ LN» на панели означает отсутствие Modbus-запросов —
проверяйте линию и контроллер.
---
**Источник данных**: документ «Стандартное программное обеспечение панели
P190919 LH, адаптированное под систему умного дома LightHub» (D190919LH),
драйверы `lighthub/modules/out_modbus.*`
(CH\_MBUS), `out_multivent.*` (CH\_MULTIVENT), `out_humidifier.*`
(CH\_HUMIDIFIER), `out_ac.*` (CH\_AC), `out_pid.*` (CH\_PID).
@@ -52,229 +52,229 @@
mqtt: mqtt:
switch: switch:
- name: "Полив" - name: "Полив"
state_topic: "edem/s_out/sprinkler/cmd" state_topic: "house/s_out/sprinkler/cmd"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив север" - name: "Полив север"
state_topic: "edem/s_out/sprinkler/nord/cmd" state_topic: "house/s_out/sprinkler/nord/cmd"
command_topic: "edem/air/sprinkler/nord/cmd" command_topic: "house/air/sprinkler/nord/cmd"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив юг" - name: "Полив юг"
state_topic: "edem/s_out/sprinkler/south/cmd" state_topic: "house/s_out/sprinkler/south/cmd"
command_topic: "edem/air/sprinkler/south/cmd" command_topic: "house/air/sprinkler/south/cmd"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив капельный" - name: "Полив капельный"
state_topic: "edem/s_out/sprinkler/trees/cmd" state_topic: "house/s_out/sprinkler/trees/cmd"
command_topic: "edem/air/sprinkler/trees/cmd" command_topic: "house/air/sprinkler/trees/cmd"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив розетки" - name: "Полив розетки"
state_topic: "edem/s_out/sprinkler/outlets/cmd" state_topic: "house/s_out/sprinkler/outlets/cmd"
command_topic: "edem/air/sprinkler/outlets/cmd" command_topic: "house/air/sprinkler/outlets/cmd"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
button: button:
- name: "Полив сброс" - name: "Полив сброс"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "RESET" payload_press: "RESET"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив блокировка" - name: "Полив блокировка"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "FREEZE" payload_press: "FREEZE"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив разблокировка" - name: "Полив разблокировка"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "UNFREEZE" payload_press: "UNFREEZE"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив разрешить" - name: "Полив разрешить"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "ENABLE" payload_press: "ENABLE"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив запретить" - name: "Полив запретить"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "DISABLE" payload_press: "DISABLE"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив осушение бака" - name: "Полив осушение бака"
command_topic: "edem/air/sprinkler/cmd" command_topic: "house/air/sprinkler/cmd"
payload_press: "DRY" payload_press: "DRY"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
number: number:
- name: "Полив юг" - name: "Полив юг"
state_topic: "edem/s_out/sprinkler/south/set" state_topic: "house/s_out/sprinkler/south/set"
command_topic: "edem/air/sprinkler/south/set" command_topic: "house/air/sprinkler/south/set"
min: 0 min: 0
max: 6000 max: 6000
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив север" - name: "Полив север"
state_topic: "edem/s_out/sprinkler/nord/set" state_topic: "house/s_out/sprinkler/nord/set"
command_topic: "edem/air/sprinkler/nord/set" command_topic: "house/air/sprinkler/nord/set"
min: 0 min: 0
max: 6000 max: 6000
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив капельный" - name: "Полив капельный"
state_topic: "edem/s_out/sprinkler/trees/set" state_topic: "house/s_out/sprinkler/trees/set"
command_topic: "edem/air/sprinkler/trees/set" command_topic: "house/air/sprinkler/trees/set"
min: 0 min: 0
max: 6000 max: 6000
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив юг выполнено" - name: "Полив юг выполнено"
state_topic: "edem/s_out/sprinkler/south/val" state_topic: "house/s_out/sprinkler/south/val"
command_topic: "edem/air/sprinkler/south/val" command_topic: "house/air/sprinkler/south/val"
min: 0 min: 0
max: 60000 max: 60000
mode: slider mode: slider
icon: "mdi:timer-sand" icon: "mdi:timer-sand"
unit_of_measurement: 'sec' unit_of_measurement: 'sec'
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив север выполнено" - name: "Полив север выполнено"
state_topic: "edem/s_out/sprinkler/nord/val" state_topic: "house/s_out/sprinkler/nord/val"
command_topic: "edem/air/sprinkler/nord/val" command_topic: "house/air/sprinkler/nord/val"
min: 0 min: 0
max: 60000 max: 60000
mode: slider mode: slider
icon: "mdi:timer-sand" icon: "mdi:timer-sand"
unit_of_measurement: 'sec' unit_of_measurement: 'sec'
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив капельный выполнено" - name: "Полив капельный выполнено"
state_topic: "edem/s_out/sprinkler/trees/val" state_topic: "house/s_out/sprinkler/trees/val"
command_topic: "edem/air/sprinkler/trees/val" command_topic: "house/air/sprinkler/trees/val"
min: 0 min: 0
max: 60000 max: 60000
mode: slider mode: slider
icon: "mdi:timer-sand" icon: "mdi:timer-sand"
unit_of_measurement: 'sec' unit_of_measurement: 'sec'
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
sensor: sensor:
- name: "Полив бак Макс" - name: "Полив бак Макс"
state_topic: "edem/s_out/sprinkler/$wMax" state_topic: "house/s_out/sprinkler/$wMax"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив бак Мin" - name: "Полив бак Мin"
state_topic: "edem/s_out/sprinkler/$wMin" state_topic: "house/s_out/sprinkler/$wMin"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив водопровод" - name: "Полив водопровод"
state_topic: "edem/s_out/sprinkler/$rVIN" state_topic: "house/s_out/sprinkler/$rVIN"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив дренаж вкл" - name: "Полив дренаж вкл"
state_topic: "edem/s_out/sprinkler/$rDren" state_topic: "house/s_out/sprinkler/$rDren"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив дренаж качает" - name: "Полив дренаж качает"
state_topic: "edem/s_out/sprinkler/$fbDren" state_topic: "house/s_out/sprinkler/$fbDren"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив насос вкл" - name: "Полив насос вкл"
state_topic: "edem/s_out/sprinkler/$rPump" state_topic: "house/s_out/sprinkler/$rPump"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив насос качает" - name: "Полив насос качает"
state_topic: "edem/s_out/sprinkler/$fbPump" state_topic: "house/s_out/sprinkler/$fbPump"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив состояние" - name: "Полив состояние"
state_topic: "edem/s_out/sprinkler/$state" state_topic: "house/s_out/sprinkler/$state"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив ошибка" - name: "Полив ошибка"
state_topic: "edem/s_out/sprinkler/$fault" state_topic: "house/s_out/sprinkler/$fault"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Поливаем юг" - name: "Поливаем юг"
state_topic: "edem/s_out/sprinkler/south/$state" state_topic: "house/s_out/sprinkler/south/$state"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Поливаем север" - name: "Поливаем север"
state_topic: "edem/s_out/sprinkler/nord/$state" state_topic: "house/s_out/sprinkler/nord/$state"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Поливаем капельно" - name: "Поливаем капельно"
state_topic: "edem/s_out/sprinkler/trees/$state" state_topic: "house/s_out/sprinkler/trees/$state"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив розетка статус" - name: "Полив розетка статус"
state_topic: "edem/s_out/sprinkler/outlets/$state" state_topic: "house/s_out/sprinkler/outlets/$state"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
- name: "Полив блокировки" - name: "Полив блокировки"
state_topic: "edem/s_out/sprinkler/ctrl" state_topic: "house/s_out/sprinkler/ctrl"
availability_topic: "edem/air/$state" availability_topic: "house/air/$state"
payload_available: "ready" payload_available: "ready"
payload_not_available: "disconnected" payload_not_available: "disconnected"
``` ```
@@ -850,8 +850,8 @@ views:
## 6. Как пользоваться панелью ## 6. Как пользоваться панелью
![sprinkler_1.jpeg](../reference/images/sprinkler_1.jpeg) ![sprinkler\_1.jpeg](../reference/images/sprinkler_1.jpeg)
![sprinkler_2.jpeg](../reference/images/sprinkler_2.jpeg) ![sprinkler\_2.jpeg](../reference/images/sprinkler_2.jpeg)
- **Общее состояние:** Отображает статус системы и режим (заморозка/разрешено/запрещено). Ошибка не показывается, но иконка станет красной при неисправности. - **Общее состояние:** Отображает статус системы и режим (заморозка/разрешено/запрещено). Ошибка не показывается, но иконка станет красной при неисправности.
- **Бак:** Иконка батарейки меняет цвет и текст в зависимости от уровня воды (пусто/наполовину/полный). Нажатие открывает историю уровня. - **Бак:** Иконка батарейки меняет цвет и текст в зависимости от уровня воды (пусто/наполовину/полный). Нажатие открывает историю уровня.
- **Водопровод и насосы:** Показывают текущий статус (Выкл/Вкл/Качает) с цветовой индикацией. Клик – история соответствующего датчика. - **Водопровод и насосы:** Показывают текущий статус (Выкл/Вкл/Качает) с цветовой индикацией. Клик – история соответствующего датчика.
+7 -7
View File
@@ -1,4 +1,4 @@
# LightHub: Модуль многоканальной системы полива (out_sprinkler) # LightHub: Модуль многоканальной системы полива (out\_sprinkler)
Данный модуль реализует многозональную систему полива Данный модуль реализует многозональную систему полива
## Система состоит из следующих компонент: ## Система состоит из следующих компонент:
@@ -19,9 +19,9 @@
* SP\_DREN\_EMPTY - дренажный насос выключился встроенным поплавком - колодец пуст * SP\_DREN\_EMPTY - дренажный насос выключился встроенным поплавком - колодец пуст
* SP\_VIN - включено наполнение из водопровода * SP\_VIN - включено наполнение из водопровода
* SP\_FULL - бак наполнен * SP\_FULL - бак наполнен
* SP\_DRYING - режим осушения системы: налив перекрыт, работает насос полива для слива бака (SP\_DRYING=7, out_sprinkler.h:34) * SP\_DRYING - режим осушения системы: налив перекрыт, работает насос полива для слива бака (SP\_DRYING=7, out\_sprinkler.h:34)
Строковые значения, публикуемые в топик `$state` (out_sprinkler.cpp:263-308): `OFF`, `DREN_ON`, `DREN_OPERATE`, `DREN_EMPTY`, `VIN`, `FULL`, `DRYING`, `FAULT_VIN`, `FAULT_DREN`, `UNKNOWN`. Строковые значения, публикуемые в топик `$state` (out\_sprinkler.cpp:263-308): `OFF`, `DREN_ON`, `DREN_OPERATE`, `DREN_EMPTY`, `VIN`, `FULL`, `DRYING`, `FAULT_VIN`, `FAULT_DREN`, `UNKNOWN`.
граф переходов конечного автомата системы налива воды граф переходов конечного автомата системы налива воды
@@ -38,7 +38,7 @@ VIN|fbDren|DREN\_OPERATE|вылючить клапан vIN для набора
VIN, DREN\_OPERATE|vMax|FULL | выключить vIN, rDren - бак полон| VIN, DREN\_OPERATE|vMax|FULL | выключить vIN, rDren - бак полон|
VIN|таймаут 1200 сек | FAULT\_VIN| выключить vIN - бак так и не наполнился| VIN|таймаут 1200 сек | FAULT\_VIN| выключить vIN - бак так и не наполнился|
DREN\_OPERATE|fbPump (качает основной насос)|DREN\_OPERATE|сброс таймера (@timer = now) — не считать ошибку, пока качает основной насос (L562)| DREN\_OPERATE|fbPump (качает основной насос)|DREN\_OPERATE|сброс таймера (@timer = now) — не считать ошибку, пока качает основной насос (L562)|
DREN\_OPERATE|таймаут 4000 сек |FAULT_DREN|выключить rDren - не смотря на продолжительную работу насоса бак не наполнен| DREN\_OPERATE|таймаут 4000 сек |FAULT\_DREN|выключить rDren - не смотря на продолжительную работу насоса бак не наполнен|
FULL|! wMax|DREN\_ON|дренаж перезапускается при опустошении бака (L609-617)| FULL|! wMax|DREN\_ON|дренаж перезапускается при опустошении бака (L609-617)|
FAULT\_VIN, FAULT\_DREN|wMax|FULL|сброс ошибки при наполнении бака (L619-635)| FAULT\_VIN, FAULT\_DREN|wMax|FULL|сброс ошибки при наполнении бака (L619-635)|
@@ -195,7 +195,7 @@ root/name/sprinkler/val -> -1 //система перейдет в режим FR
Дополнительно к перекрытию поступления воды в бак (заблокирован автомат пополнения бака из дренажного насоса и водопровода) данная команда включает помпу. Дополнительно к перекрытию поступления воды в бак (заблокирован автомат пополнения бака из дренажного насоса и водопровода) данная команда включает помпу.
- DRY переопределяет ON: если система находится в режиме `@state==SP_DRYING` и приходит команда ON, она исполняется как CMD_DRY, а не ON (out_sprinkler.cpp:837-841). - DRY переопределяет ON: если система находится в режиме `@state==SP_DRYING` и приходит команда ON, она исполняется как CMD\_DRY, а не ON (out\_sprinkler.cpp:837-841).
- Режим DRY персистентен: `@state=SP_DRYING` хранится в конфиге и переживает перезагрузку контроллера; реле восстанавливаются из `@lastVals`, после рестарта в топик публикуется `DRYING`. - Режим DRY персистентен: `@state=SP_DRYING` хранится в конфиге и переживает перезагрузку контроллера; реле восстанавливаются из `@lastVals`, после рестарта в топик публикуется `DRYING`.
Далее, требуется слить бак включением выбранных зон полива или через водяные розетки. Далее, требуется слить бак включением выбранных зон полива или через водяные розетки.
@@ -207,7 +207,7 @@ root/name/sprinkler/val -> -1 //система перейдет в режим FR
При старте (первый Poll) контроллер принудительно публикует все ключевые статусы: `$wMax`/`$wMin`/`$fbDren`/`$fbPump`/`$rPump`/`$rDren`/`$rVIN` + `$state`/`$fault` (L474-487). Повторно `$state`/`$fault` публикуются при командах ON/OFF (L842, L848). При старте (первый Poll) контроллер принудительно публикует все ключевые статусы: `$wMax`/`$wMin`/`$fbDren`/`$fbPump`/`$rPump`/`$rDren`/`$rVIN` + `$state`/`$fault` (L474-487). Повторно `$state`/`$fault` публикуются при командах ON/OFF (L842, L848).
**Ошибки (onFault / $fault):** при каждом переходе состояния публикуется код ошибки в топик `$fault`: 0 — без ошибки, 1 — FAULT_VIN, 2 — FAULT_DREN (L311-315). Вместо публикации в `$fault` можно задать EXEC-объект `onFault` в корневом (`""`) объекте — в этом случае при срабатывании ошибки исполняется он с кодом ошибки аргументом (L260-262, L311-314). **Ошибки (onFault / $fault):** при каждом переходе состояния публикуется код ошибки в топик `$fault`: 0 — без ошибки, 1 — FAULT\_VIN, 2 — FAULT\_DREN (L311-315). Вместо публикации в `$fault` можно задать EXEC-объект `onFault` в корневом (`""`) объекте — в этом случае при срабатывании ошибки исполняется он с кодом ошибки аргументом (L260-262, L311-314).
**Примеры выдачи в топики:** **Примеры выдачи в топики:**
@@ -267,7 +267,7 @@ sensor:
state_topic: "root/s_out/sprinkler/nord/val" state_topic: "root/s_out/sprinkler/nord/val"
- name: "Полив капельный выполнено" - name: "Полив капельный выполнено"
state_topic: "edem/s_out/sprinkler/trees/val" state_topic: "house/s_out/sprinkler/trees/val"
- name: "Поливаем юг" - name: "Поливаем юг"
state_topic: "root/s_out/sprinkler/south/$state" state_topic: "root/s_out/sprinkler/south/$state"
File diff suppressed because it is too large Load Diff
+22 -22
View File
@@ -6,7 +6,7 @@
## 🆕 Новые документы ## 🆕 Новые документы
### 1. **mqtt_api_reference.md** (900+ строк) ### 1. **mqtt\_api\_reference.md** (900+ строк)
Полный справочник MQTT API и структуры топиков LightHub Полный справочник MQTT API и структуры топиков LightHub
**Содержание:** **Содержание:**
@@ -26,7 +26,7 @@
- Объяснение механизма восстановления состояния - Объяснение механизма восстановления состояния
- Полная документация HTTP API - Полная документация HTTP API
### 2. **suffixes_reference_v2.md** (800+ строк) ### 2. **suffixes\_reference\_v2.md** (800+ строк)
Исправленный справочник суффиксов MQTT согласно официальной wiki Исправленный справочник суффиксов MQTT согласно официальной wiki
**Содержание:** **Содержание:**
@@ -48,7 +48,7 @@
- Правильные диапазоны значений - Правильные диапазоны значений
- Примеры на реальных сценариях - Примеры на реальных сценариях
### 3. **mqtt_quick_reference.md** (350+ строк) ### 3. **mqtt\_quick\_reference.md** (350+ строк)
Быстрая шпаргалка часто используемых MQTT команд Быстрая шпаргалка часто используемых MQTT команд
**Содержание:** **Содержание:**
@@ -81,19 +81,19 @@
- ✅ Добавлены MQTT примеры в быстрый старт - ✅ Добавлены MQTT примеры в быстрый старт
- ✅ Указано на правильность согласно wiki.lazyhome.ru - ✅ Указано на правильность согласно wiki.lazyhome.ru
### 2. **START_HERE.md** — Стартовая точка ### 2. **START\_HERE.md** — Стартовая точка
**Изменения:** **Изменения:**
- ✅ Новые документы поднялись в начало списка - ✅ Новые документы поднялись в начало списка
- ✅ Добавлена шпаргалка mqtt_quick_reference.md - ✅ Добавлена шпаргалка mqtt\_quick\_reference.md
- ✅ Подчеркнута новизна mqtt_api_reference.md - ✅ Подчеркнута новизна mqtt\_api\_reference.md
- ✅ Указано на исправления в suffixes_reference_v2.md - ✅ Указано на исправления в suffixes\_reference\_v2.md
--- ---
## ❌ Устаревшие документы ## ❌ Устаревшие документы
### suffixes_reference.md (архив) ### suffixes\_reference.md (архив)
- Заменен на: **suffixes_reference_v2.md** - Заменен на: **suffixes\_reference\_v2.md**
- Причина: Неправильная структура суффиксов (не согласовывалась с wiki) - Причина: Неправильная структура суффиксов (не согласовывалась с wiki)
- Оставлен для истории - Оставлен для истории
@@ -165,38 +165,38 @@
## 📚 Как использовать обновленную документацию ## 📚 Как использовать обновленную документацию
### Для новых пользователей: ### Для новых пользователей:
1. Начните с [mqtt_quick_reference.md](mqtt_quick_reference.md) (шпаргалка) 1. Начните с [mqtt\_quick\_reference.md](mqtt_quick_reference.md) (шпаргалка)
2. Затем изучите [mqtt_api_reference.md](mqtt_api_reference.md) (полный справочник) 2. Затем изучите [mqtt\_api\_reference.md](mqtt_api_reference.md) (полный справочник)
3. Используйте примеры из [configuration_examples.md](configuration_examples.md) 3. Используйте примеры из [configuration\_examples.md](configuration_examples.md)
### Для опытных пользователей: ### Для опытных пользователей:
1. Обновите топики согласно [mqtt_api_reference.md](mqtt_api_reference.md) 1. Обновите топики согласно [mqtt\_api\_reference.md](mqtt_api_reference.md)
2. Изучите новые суффиксы в [suffixes_reference_v2.md](suffixes_reference_v2.md) 2. Изучите новые суффиксы в [suffixes\_reference\_v2.md](suffixes_reference_v2.md)
3. Используйте HTTP API для альтернативного управления 3. Используйте HTTP API для альтернативного управления
### Для интеграций (Home Assistant, Node-Red, etc.): ### Для интеграций (Home Assistant, Node-Red, etc.):
1. Изучите структуру топиков: `root/[id или bcst или out]/item/[subitem]/suffix` 1. Изучите структуру топиков: `root/[id или bcst или out]/item/[subitem]/suffix`
2. Используйте примеры из [mqtt_api_reference.md](mqtt_api_reference.md) 2. Используйте примеры из [mqtt\_api\_reference.md](mqtt_api_reference.md)
3. Используйте [mqtt_quick_reference.md](mqtt_quick_reference.md) как шпаргалку 3. Используйте [mqtt\_quick\_reference.md](mqtt_quick_reference.md) как шпаргалку
--- ---
## ✅ Валидация ## ✅ Валидация
Все документы проверены согласно официальной wiki: Все документы проверены согласно официальной wiki:
- ✅ https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_mqtt - ✅ https://www.lazyhome.ru/dokuwiki/doku.php?id=%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\_%D1%81\_mqtt
- ✅ https://www.lazyhome.ru/dokuwiki/doku.php?id=api - ✅ https://www.lazyhome.ru/dokuwiki/doku.php?id=api
--- ---
## 🔗 Навигация ## 🔗 Навигация
- **Быстрый старт**: [START_HERE.md](START_HERE.md) - **Быстрый старт**: [START\_HERE.md](START_HERE.md)
- **Полный индекс**: [README.md](README.md) - **Полный индекс**: [README.md](README.md)
- **Шпаргалка**: [mqtt_quick_reference.md](mqtt_quick_reference.md) - **Шпаргалка**: [mqtt\_quick\_reference.md](mqtt_quick_reference.md)
- **MQTT справочник**: [mqtt_api_reference.md](mqtt_api_reference.md) - **MQTT справочник**: [mqtt\_api\_reference.md](mqtt_api_reference.md)
- **Суффиксы**: [suffixes_reference_v2.md](suffixes_reference_v2.md) - **Суффиксы**: [suffixes\_reference\_v2.md](suffixes_reference_v2.md)
- **Конфигурация**: [light_hub_полное_инженерное_описание_json_конфигурации_v2.md](light_hub_полное_инженерное_описание_json_конфигурации_v2.md) - **Конфигурация**: [light\_hub\_полное\_инженерное\_описание\_json\_конфигурации\_v2.md](light_hub_полное_инженерное_описание_json_конфигурации_v2.md)
--- ---
@@ -32,13 +32,13 @@
"ac_2":[14,[128, "ac_2":[14,[128,
"haier", "haier",
{ {
"pwr":{"emit":"edem/s_out/ac_2/cmd","item":"vac/mode","@V":null}, "pwr":{"emit":"house/s_out/ac_2/cmd","item":"vac/mode","@V":null},
"$temp":{"emit":"edem/s_out/ac_2/$temp","item":"vac/temp","@S":null}, "$temp":{"emit":"house/s_out/ac_2/$temp","item":"vac/temp","@S":null},
"$fault":{"emit":"edem/s_out/ac_2/$fault"}, "$fault":{"emit":"house/s_out/ac_2/$fault"},
"set":{"emit":"edem/s_out/ac_2/set","item":"vac/set"}, "set":{"emit":"house/s_out/ac_2/set","item":"vac/set"},
"acmode":{"emit":"edem/s_out/ac_2/$mode","@V":null}, "acmode":{"emit":"house/s_out/ac_2/$mode","@V":null},
"fan":{"emit":"edem/s_out/ac_2/fan","@V":null}, "fan":{"emit":"house/s_out/ac_2/fan","@V":null},
"lock":{"emit":"edem/s_out/ac_2/lock","@V":null}, "lock":{"emit":"house/s_out/ac_2/lock","@V":null},
"fanoff":{} "fanoff":{}
} }
] ]
@@ -35,7 +35,7 @@
Примеры: Примеры:
<code> <code>
{"emit":"edem/edem3/p_zal3/mode"} {"emit":"house/house3/p_zal3/mode"}
[{"emit":"t_bath3","item":"tbath3"},{"item":"p_bedr3/floor_temp","can":[0,206,"val"]] [{"emit":"t_bath3","item":"tbath3"},{"item":"p_bedr3/floor_temp","can":[0,206,"val"]]
</code> </code>
@@ -327,18 +327,18 @@ NB. Не надо именовать данные параметры имена
items:{ items:{
"p_zal3":[14,[2,"panel", "p_zal3":[14,[2,"panel",
{ {
"fan" :{"emit":"edem/air/vents/zal3/fan"}, "fan" :{"emit":"house/air/vents/zal3/fan"},
"mode":{"emit":"edem/air/vents/zal3/mode"}, "mode":{"emit":"house/air/vents/zal3/mode"},
"pwr" :{"emit":"edem/air/vents/zal3/pwr"}, "pwr" :{"emit":"house/air/vents/zal3/pwr"},
"sethum":{"emit":"edem/air/humzal3/set"}, "sethum":{"emit":"house/air/humzal3/set"},
"hum" :{"emit":"edem/air/humzal3/val","@S":null}, "hum" :{"emit":"house/air/humzal3/val","@S":null},
"setvoc":{"emit":"edem/air/voczal3/set"}, "setvoc":{"emit":"house/air/voczal3/set"},
"voc" :{"emit":"edem/air/voczal3/val"}, "voc" :{"emit":"house/air/voczal3/val"},
"settemp" :{"item":"tzal3/set"}, "settemp" :{"item":"tzal3/set"},
"roomtemp" :{"emit":"edem/fl2/term_bedr/1/val"}, "roomtemp" :{"emit":"house/fl2/term_bedr/1/val"},
"ch_temp":{}, "ch_temp":{},
"ch_hum":{}, "ch_hum":{},
"ext_temp":{}, "ext_temp":{},
@@ -358,7 +358,7 @@ NB. Не надо именовать данные параметры имена
Данную фильтрацию можно отменить, если в настройке параметра добавить переменную @V типа, отличного от целого. Данную фильтрацию можно отменить, если в настройке параметра добавить переменную @V типа, отличного от целого.
Например так: Например так:
<code> <code>
"fan" :{"emit":"edem/air/vents/zal3/fan","@V":null}, "fan" :{"emit":"house/air/vents/zal3/fan","@V":null},
</code> </code>
В этом случае, после того, как мы что-то записали в регистр, при следующем же опросе устройства, это будет обнаружено (если значение изменилось) и будут предприняты настроенные действия (например, значение будет отправлено по MQTT и отобразится в мобильном приложении Home Assistant) В этом случае, после того, как мы что-то записали в регистр, при следующем же опросе устройства, это будет обнаружено (если значение изменилось) и будут предприняты настроенные действия (например, значение будет отправлено по MQTT и отобразится в мобильном приложении Home Assistant)
@@ -432,12 +432,12 @@ RAW 14
"vent":[14,[247,"airset", "vent":[14,[247,"airset",
{ {
"tset":{"emit":"edem/s_out/vent/tset/set","@V":null}, "tset":{"emit":"house/s_out/vent/tset/set","@V":null},
"pmode":{"emit":"edem/s_out/vent/pmode/set","@V":null}, "pmode":{"emit":"house/s_out/vent/pmode/set","@V":null},
"fanspeed":{"emit":"edem/s_out/vent/fanspeed/set","@V":null}, "fanspeed":{"emit":"house/s_out/vent/fanspeed/set","@V":null},
"on":{"emit":"edem/s_out/vent/on/set","@V":null}, "on":{"emit":"house/s_out/vent/on/set","@V":null},
"rtemp":{"emit":"edem/s_out/vent/rtemp"}, "rtemp":{"emit":"house/s_out/vent/rtemp"},
"fanmin":{}, "fanmin":{},
"fanmax":{} "fanmax":{}
@@ -519,20 +519,20 @@ RAW 14
"vent":[14,[247,"airset", "vent":[14,[247,"airset",
{ {
"tset":{"emit":"edem/s_out/vent/set","@V":null}, "tset":{"emit":"house/s_out/vent/set","@V":null},
"pmode":{"emit":"edem/s_out/vent/cmd","@V":null}, "pmode":{"emit":"house/s_out/vent/cmd","@V":null},
"fanspeed":{"emit":"edem/s_out/vent/fan","@V":null}, "fanspeed":{"emit":"house/s_out/vent/fan","@V":null},
"on":{"emit":"edem/s_out/vent/oncmd","@V":null}, "on":{"emit":"house/s_out/vent/oncmd","@V":null},
"ruheat":{"emit":"edem/s_out/vent/ruheat"}, "ruheat":{"emit":"house/s_out/vent/ruheat"},
"ruslow":{"emit":"edem/s_out/vent/rupump"}, "ruslow":{"emit":"house/s_out/vent/rupump"},
"ramode":{"emit":"edem/s_out/vent/ramode"}, "ramode":{"emit":"house/s_out/vent/ramode"},
"rfanspd":{"emit":"edem/s_out/vent/rfanspd"}, "rfanspd":{"emit":"house/s_out/vent/rfanspd"},
"rfanlvl":{"emit":"edem/s_out/vent/rfanlvl"}, "rfanlvl":{"emit":"house/s_out/vent/rfanlvl"},
"rpumpon":{"emit":"edem/s_out/vent/rpumpon"}, "rpumpon":{"emit":"house/s_out/vent/rpumpon"},
"rtemp":{"emit":"edem/s_out/vent/rtemp"}, "rtemp":{"emit":"house/s_out/vent/rtemp"},
"rtempset":{"emit":"edem/s_out/vent/rtempset"}, "rtempset":{"emit":"house/s_out/vent/rtempset"},
"fault":{"emit":"edem/s_out/vent/fault"}, "fault":{"emit":"house/s_out/vent/fault"},
"tautoheat":{}, "tautoheat":{},
"tautocool":{}, "tautocool":{},
@@ -546,7 +546,7 @@ RAW 14
"twaterstart":{}, "twaterstart":{},
"twatershut":{}, "twatershut":{},
"twateridle":{}, "twateridle":{},
"fanauto":{"emit":"edem/s_out/vent/fanauto/set","@V":null}, "fanauto":{"emit":"house/s_out/vent/fanauto/set","@V":null},
"numspeed":{}, "numspeed":{},
"offbyfan":{} "offbyfan":{}
} }