Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
настройка_modbus [2022/05/18 10:33] Sanch-KK [Раздел "items" конфигурации] |
настройка_modbus [2025/04/06 10:48] (текущий) Admin [Mapping значений и команд контроллера в регистры Modbus] |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ** Данная статья формируется в процессе написания кода ** | ||
| - | Далее описана функциональность драйвера Modbus v2 | + | ====== Функциональность драйвера Modbus v2 ====== |
| LightHub можно настроить на работу в качестве шлюза с фактически любым устройством, | LightHub можно настроить на работу в качестве шлюза с фактически любым устройством, | ||
| Строка 24: | Строка 24: | ||
| В примере выше: | В примере выше: | ||
| - | * " | + | |
| - | * " | + | * " |
| - | * "ir: - INPUT REGISTER | + | * "ir: - INPUT REGISTER |
| - | * " | + | * " |
| - | * " | + | * " |
| Возможные варианты типов: | Возможные варианты типов: | ||
| - | * i16 - знаковый 16-ти битный регистр (по умолчанию) | + | |
| - | * i32 - знаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие) | + | * i32 - знаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие) |
| - | * u16 - беззнаковый 16-ти битный регистр | + | * u16 - беззнаковый 16-ти битный регистр |
| - | * u32 - беззнаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие) | + | * u32 - беззнаковый 32-ти битный регистр (первый регистр - младшие биты, следующий - старшие) |
| - | * i8h - старшие 8 бит регистра (при записи значения, | + | * i8h - старшие 8 бит регистра (при записи значения, |
| - | * i8l - старшие 8 бит регистра (при записи значения, | + | * i8l - старшие 8 бит регистра (при записи значения, |
| - | * x10 - дробное число с точностью до 0.1 полученное путем деления значения 16 битного регистра со знаком на 10 (часто используется в разных устройствах для кодирования температуры, | + | * x10 - дробное число с точностью до 0.1 полученное путем деления значения 16 битного регистра со знаком на 10 (часто используется в разных устройствах для кодирования температуры, |
| - | * 100 - дробное число с точностью до 0.01 полученное путем деления значения 16 битного регистра со знаком на 100 | + | * 100 - дробное число с точностью до 0.01 полученное путем деления значения 16 битного регистра со знаком на 100 |
| Строка 54: | Строка 54: | ||
| Обозначает, | Обозначает, | ||
| - | * Команда чтения группы из 15-ти регистров с 40000 по 40014 | + | |
| - | * Команда чтения группы из 3-x регистров с 30000 по 30002 | + | * Команда чтения группы из 3-x регистров с 30000 по 30002 |
| - | * Команда чтения одиночного регистра 40099 | + | * Команда чтения одиночного регистра 40099 |
| Для каждого из успешно прочитанных регистров, | Для каждого из успешно прочитанных регистров, | ||
| Строка 62: | Строка 62: | ||
| Отправка происходит, | Отправка происходит, | ||
| + | кроме regs допустимы irs и coils | ||
| + | |||
| + | Или вот пример для сенсора Sensair S8 | ||
| + | Опрашиваем INPUT REGISTERS 0-3, | ||
| + | < | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | А вот пример подключения Modbus адаптера кондиционера Haier | ||
| + | < | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | }, | ||
| + | | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ] | ||
| + | ] | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| ==== Разделы baud и serial ==== | ==== Разделы baud и serial ==== | ||
| Строка 232: | Строка 295: | ||
| < | < | ||
| + | " | ||
| + | { | ||
| + | |||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | } | ||
| + | }, | ||
| + | | ||
| " | " | ||
| { | { | ||
| Строка 251: | Строка 345: | ||
| " | " | ||
| " | " | ||
| - | " | + | " |
| - | " | + | |
| } | } | ||
| ]] | ]] | ||
| + | } | ||
| </ | </ | ||
| + | |||
| + | Также, по-умолчанию, | ||
| + | |||
| + | Например, | ||
| + | |||
| + | Данную фильтрацию можно отменить, | ||
| + | Например так: | ||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | В этом случае, | ||
| + | |||
| + | < | ||
| + | |||
| + | ===== Запись в Modbus устройство ===== | ||
| + | Параметры Модбас устройства можно записывать аналогично, | ||
| + | |||
| + | |||
| + | Рассмотрим на примере вентустановки: | ||
| + | |||
| + | Скорость можно поменять, | ||
| + | // | ||
| + | Для обращения через MQTT топик будет выглядеть как myhome/ | ||
| + | |||
| + | Внимание, | ||
| + | |||
| + | |||
| + | Параметры fanmin и fanmax доступны только на запись (контроллер не будет отслеживать изменение их значений) | ||
| + | |||
| + | |||
| + | также, есть возможность " | ||
| + | |||
| + | Перечень суффиксов: | ||
| + | < | ||
| + | CMD 1 | ||
| + | SET 2 | ||
| + | HSV 5 | ||
| + | RGB 6 | ||
| + | FAN 7 | ||
| + | MODE 8 | ||
| + | HUE 9 | ||
| + | SAT 10 | ||
| + | TEMP 11 | ||
| + | VAL 12 | ||
| + | DELAYED 13 | ||
| + | RAW 14 | ||
| + | </ | ||
| + | |||
| + | в примере ниже, это значит, | ||
| + | // | ||
| + | |||
| + | А при записи в vent/cmd это значение установится как в регистр 41 (параметр on) так и в регистр 43 (параметр pmode) так как у них указан одинаковый id=1, соответствующий суффиксу /cmd | ||
| + | |||
| + | < | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | }, | ||
| + | |||
| + | | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | |||
| + | } | ||
| + | ]], | ||
| + | | ||
| + | } | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ===== Mapping значений и команд контроллера в регистры Modbus ===== | ||
| + | Более подробно настройка преобразований описана в отдельном разделе [[использование_преобразований_map]] | ||
| + | |||
| + | Далее, разобраны примеры применения | ||
| + | Рассмотрим на примере вентустановки | ||
| + | Допустим, | ||
| + | * AUTO | ||
| + | * ON | ||
| + | * HEAT | ||
| + | * FAN_ONLY | ||
| + | Для команды OFF записываем 0 | ||
| + | |||
| + | Это реализуется строкой | ||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | наличие " | ||
| + | |||
| + | Соответственно, | ||
| + | |||
| + | В нашей вентустановке за переключение режима работы (нагрев-вентиляция-авто) отвечает отдельный регистр 43 | ||
| + | |||
| + | настроим отображение режима работы на требуемые значения данного регистра и, также, привяжем это отображение к командному топику (" | ||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | теперь при переключении режимов в регистр 43 будет записываться 3 для Авторежима, | ||
| + | |||
| + | Еще лайфхак: | ||
| + | < | ||
| + | " | ||
| + | </ | ||
| + | В примере выше, в значения регистра будет маппироваться только команда, | ||
| + | |||
| + | первый null перед массивом соответствия команда -> значение по умолчанию, | ||
| + | Если не подобрали - пытаемся преобразовать по значению | ||
| + | |||
| + | Если не использовать " | ||
| + | |||
| + | (описание не завершено) | ||
| + | |||
| + | < | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | |||
| + | " | ||
| + | " | ||
| + | " | ||
| + | |||
| + | " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | { | ||
| + | " | ||
| + | | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | ]] | ||
| + | } | ||
| + | </ | ||
| + | |||