|
|
(не показано 238 промежуточных версий 9 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE: Драйвер wb-mqtt-serial}}
| | В настоящее время поддерживается работа с устройствами |
| == Описание ==
| | Modbus RTU, подключаемыми через RS-485. |
| [[Image: wb-mqtt-serial a few protocols.png |500px|thumb|right| Драйвер wb-mqtt-serial может одновременно опрашивать устройства, работающие по разным протоколам: <br> 1 — виртуальный порт для устройств с протоколом Modbus TCP,<br> 2 — устройство работает по протоколу Modbus RTU,<br> 3 — устройство работает по протоколу DLMS]]
| |
| === Общая информация ===
| |
| ''wb-mqtt-serial'' — драйвер master-slave протоколов для устройств, подключённых:
| |
| * к шине RS-485 — протокол Modbus RTU и других;
| |
| * через Ethernet — протоколы Modbus TCP, Modbus over TCP и другие;
| |
| * к разъёмам MOD1–MOD3 — при наличии модулей расширения, использующих обмен по UART.
| |
|
| |
|
| Драйвер опрашивает serial-устройства и публикует данные в топики [[MQTT|MQTT]]-брокера. Устройства и порты настраиваются через веб-интерфейс, подробнее в статье [[RS-485:Configuration via Web Interface | Начальное конфигурирование устройств через веб-интерфейс]].
| | Конфигурация драйвера задаётся в файле /etc/wb-homa-modbus.conf |
|
| |
|
| Wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств Wiren Board, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие.
| | Останов драйвера: - <code>service wb-homa-modbus stop</code> |
|
| |
|
| Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами: [[Connecting_Third_Party_Devices_to_Wiren_Board | Подключение стороннего Modbus-устройства к контроллеру Wiren Board]].
| | Запуск драйвера: <code>service wb-homa-modbus start</code> |
|
| |
|
| Файлы и папки:
| | Запуск драйвера в принудительном отладочном режиме: |
| * <code>/etc/wb-mqtt-serial.conf</code> — файл настроек драйвера, редактировать вручную не рекомендуем;
| |
| * <code>/usr/share/wb-mqtt-serial/templates</code> — папка с предустановленными шаблонами;
| |
| * <code>/etc/wb-mqtt-serial.conf.d/templates</code> — папка для пользовательских шаблонов, которые имеют приоритет над предустановленными.
| |
|
| |
|
| Если вы добавили свой шаблон или изменили существующий, подождите 20 секунд, а потом перезагрузите страницу конфигуратора в веб-интерфейсе клавишами <kbd>Ctrl</kbd>+<kbd>F5</kbd> или перезапустите сервис: <syntaxhighlight lang="bash>systemctl restart wb-mqtt-confed</syntaxhighlight>
| | <code>wb-homa-modbus -c /etc/wb-homa-modbus.conf -d</code> |
|
| |
|
| О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]].
| | ====MSU34+TLP, MSU24 и MSU21 и подобные устройства==== |
|
| |
|
| Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите '''[https://github.com/contactless/wb-mqtt-serial в репозитории на Github]'''.
| | Сайт производителя - http://www.razumdom.ru/ |
|
| |
|
| === Особенности ===
| | Документация: |
| При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом.
| |
|
| |
|
| Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле:
| | http://www.razumdom.ru/userfiles/file/Modbus/MSU21.pdf |
| <syntaxhighlight lang="js">
| |
| guard_interval_us = (3.5*11*10^6)/(скорость в бит/с)
| |
| </syntaxhighlight>
| |
| Так же этот параметр можно установить через веб-интерфейс:
| |
| * Guard interval (us) — для порта.
| |
| * Additional delay before each writing to port (us) — для устройства.
| |
|
| |
|
| Если при чтении регистра устройства возникла ошибка, то соответствующий контрол в веб-интерфейсе будет окрашен в красный цвет. Аналогично с устройством — если оно давно не отвечает, то все его контролы будут окрашены красным.
| | http://www.razumdom.ru/userfiles/file/Modbus/MSU24.pdf |
|
| |
|
| == Управление драйвером ==
| | http://www.razumdom.ru/userfiles/file/Modbus/MSU34.pdf |
|
| |
|
| Обычно драйвер запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе.
| | Устройства выдают значения с датчиков через |
| | input-регистры. Для значений температуры используются |
| | 8-битные знаковые значения без расширения знака |
| | на старшие 8 бит input-регистра, вследствие |
| | чего для значений температуры в конфигурационном |
| | файле необходимо указывать "format": "s8". |
|
| |
|
| Также можно управлять драйвером в ручном режиме — это может быть полезно для поиска ошибок в конфигурационном файле или если вам нужно освободить порт для использования [[modbus-client | modbus_client]].
| | Подключаемые к устройству датчики конфигурируются |
| | через holding-регистры (см. описание). Для конфигурации |
| | датчиков можно использовать команду <code>modbus_client</code>, |
| | или сделать setup-секцию в конфигурации драйвера. |
|
| |
|
| Для выполнения команд подключитесь к контроллеру по [[SSH]]. Доступны команды: | | Для установки адреса slave можно использовать скрипт |
| <syntaxhighlight lang="bash">
| | set-rd-address.sh. При этом необходимо убедиться, что к |
| systemctl stop wb-mqtt-serial # остановить
| | порту RS-485 было подлкючено только то устройство, |
| systemctl start wb-mqtt-serial # запустить
| | у которого необходимо сменить адрес, затем выполнить |
| systemctl restart wb-mqtt-serial # перезапустить
| | команду: |
| wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d # запустить в отладочном режиме с указанием пути к конфигурационному файлу
| | <pre> |
| </syntaxhighlight> | | set-rd.address.sh /dev/ttyNSC0 0x16 |
| | </pre> |
| | Вместо 0x16 можно задать любой другой адрес |
| | в диапазоне от 0 до 247 (0xf7). |
|
| |
|
| == Диагностика неполадок ==
| | Пример конфигурации: |
| Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду <code>systemctl status wb-mqtt-serial</code> и в последних двух строчках ответа будет подсказка.
| | <pre> |
| | { |
| | "debug": false, |
| | "ports": [ |
| | { |
| | "path" : "/dev/ttyNSC0", |
| | "baud_rate": 9600, |
| | "parity": "N", |
| | "data_bits": 8, |
| | "stop_bits": 2, |
| | "poll_interval": 10, |
| | "enabled": true, |
| | "devices" : [ |
| | { |
| | "name": "MSU34+TLP", |
| | "id": "msu34tlp", |
| | "slave_id": 2, |
| | "enabled": false, |
| | "channels": [ |
| | { |
| | "name" : "Temp 1", |
| | "reg_type" : "input", |
| | "address" : 0, |
| | "type": "temperature", |
| | "format": "s8" |
| | }, |
| | { |
| | "name" : "Illuminance", |
| | "reg_type" : "input", |
| | "address" : 1, |
| | "type": "text" |
| | }, |
| | { |
| | "name" : "Pressure", |
| | "reg_type" : "input", |
| | "address" : 2, |
| | "type": "text", |
| | "scale": 0.075 |
| | }, |
| | { |
| | "name" : "Temp 2", |
| | "reg_type" : "input", |
| | "address" : 3, |
| | "type": "temperature", |
| | "format": "s8" |
| | } |
| | ] |
| | } |
| | ] |
| | } |
| | ] |
| | } |
| | </pre> |
|
| |
|
| В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции:
| | Пример конфигурации MSU21 с секцией инициализации ("setup"): |
| <syntaxhighlight lang="console"> | | <pre> |
| # systemctl status wb-mqtt-serial
| | { |
| ● wb-mqtt-serial.service - MQTT Driver for serial devices
| | "name": "MSU21", |
| Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled)
| | "id": "msu21", |
| Active: inactive (dead) since Thu 2021-01-28 15:10:51 +04; 4s ago
| | "slave_id": 24, |
| Process: 23682 ExecStart=/usr/bin/wb-mqtt-serial (code=exited, status=0/SUCCESS)
| | "enabled": true, |
| Main PID: 23682 (code=exited, status=0/SUCCESS)
| | "setup": [ |
| | | { |
| Jan 28 15:10:47 wirenboard-A6XXXT2R systemd[1]: Started MQTT Driver for serial devices.
| | "title": "Input 0 type", |
| Jan 28 15:10:51 wirenboard-A6XXXT2R wb-mqtt-serial[23682]: ERROR: [serial] Failed to parse JSON /etc/wb-mqtt-serial.conf:* Line 2, Column 14
| | "address": 1, |
| Jan 28 15:10:51 wirenboard-A6XXXT2R wb-mqtt-serial[23682]: Syntax error: value, object or array expected.
| | "value": 2 |
| </syntaxhighlight>
| | }, |
| | | { |
| Проверить только шаблоны, в том числе и не подключённые в файле конфигурации, можно командой:
| | "title": "Input 0 module", |
| <syntaxhighlight lang="console">
| | "address": 3, |
| # wb-mqtt-serial -g
| | "value": 6 |
| <3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-bac-6000-series.json
| | } |
| Failed to parse JSON /usr/share/wb-mqtt-serial/templates/config-bac-6000-series.json:* Line 12, Column 5
| | ], |
| Missing ',' or '}' in object declaration
| | "channels": [ |
| </syntaxhighlight>
| | { |
| | | "name" : "Temperature", |
| Проверить файл конфигурации и шаблоны на ошибки:
| | "reg_type" : "input", |
| <syntaxhighlight lang="console">
| | "address" : 0, |
| # wb-mqtt-serial -j
| | "type": "temperature", |
| <3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json
| | "format": "s8" |
| Failed to parse JSON /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json:* Line 8, Column 9
| | } |
| Missing ',' or '}' in object declaration
| | ] |
| | | } |
| <3>ERROR: [serial] Can't find template for 'WB-MDM3'
| | </pre> |
| </syntaxhighlight>
| |
| | |
| При необходимости, можно добавить путь к файлу, который нужно проверить:
| |
| <syntaxhighlight lang="bash">
| |
| wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -j
| |
| </syntaxhighlight>
| |
| | |
| == Включение отладки==
| |
| [[Файл:Serial Web config.png|400px|thumb|right|Веб-интерфейс. Флажок ''Enable debug logging'' установлен, отладка включена]]
| |
| Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс.
| |
| | |
| {{note|info| При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.}}
| |
| | |
| Включение отладки через [[Wiren Board Web Interface|веб-интерфейс]]:
| |
| # Зайдите в веб-интерфейс контроллера
| |
| # Если вы работаете под обычным пользователем, то смените [[RS-485:Configuration via Web Interface#Смена уровня доступа к веб-интерфейсу| уровень доступа]]
| |
| # Перейдите '''Settings''' → '''Configs''' → '''Serial Device Driver Configuration'''
| |
| # Установите флажок '''Enable debug logging'''
| |
| # Нажмите на кнопку '''Save''', чтобы сохранить настройки.
| |
| | |
| Теперь в системный журнал будут записываться отправленные и принятые драйвером пакеты.
| |
| | |
| Чтобы посмотреть debug-вывод драйвера, выполните в консоли контроллера команду <code>journalctl -e -p 7</code>, где <code>-e</code> — отобразить последние записи, а <code>-p 7</code> задает уровень сообщений, где 7 — это debug. Подробнее о параметрах утилиты, читайте в статье [[journalctl]].
| |
| | |
| Пример вывода команды:
| |
| <syntaxhighlight lang="bash">
| |
| ~# journalctl -e -p 7
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [serial port driver] channel 'Urms L1' of device 'wb-modbus-0-0' <-- 224.647
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [modbus] read 2 input(s) @ 5136 of device modbus:142
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Sleep 0 us
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Write: 8e 04 14 10 00 02 6a c1
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] Sleep 10000 us
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [port] ReadFrame: 16 04 02 0f 3d 09 12
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [register handler] new val for input @ 3 of device modbus:22: f3d
| |
| Jan 29 14:27:24 wirenboard-A6ZZXT2R wb-mqtt-serial[1667]: DEBUG: [serial port driver] register value change: input @ 3 of device modbus:22 <- 39.01
| |
| </syntaxhighlight> | |
| | |
| == Полезные ссылки ==
| |
| * [[Connecting_Third_Party_Devices_to_Wiren_Board | Как подключить стороннее Modbus-устройство]]
| |
| * [https://github.com/contactless/wb-mqtt-serial Описание wb-mqtt-serial на Github]
| |
| * [[Modbus|Описание протокола Modbus]]
| |
| * [[Fast_Modbus| Описание расширения Быстрый Modbus]]
| |
| * [[RS-485|Описание шины RS-485]]
| |
В настоящее время поддерживается работа с устройствами
Modbus RTU, подключаемыми через RS-485.
Конфигурация драйвера задаётся в файле /etc/wb-homa-modbus.conf
Останов драйвера: - service wb-homa-modbus stop
Запуск драйвера: service wb-homa-modbus start
Запуск драйвера в принудительном отладочном режиме:
wb-homa-modbus -c /etc/wb-homa-modbus.conf -d
MSU34+TLP, MSU24 и MSU21 и подобные устройства
Сайт производителя - http://www.razumdom.ru/
Документация:
http://www.razumdom.ru/userfiles/file/Modbus/MSU21.pdf
http://www.razumdom.ru/userfiles/file/Modbus/MSU24.pdf
http://www.razumdom.ru/userfiles/file/Modbus/MSU34.pdf
Устройства выдают значения с датчиков через
input-регистры. Для значений температуры используются
8-битные знаковые значения без расширения знака
на старшие 8 бит input-регистра, вследствие
чего для значений температуры в конфигурационном
файле необходимо указывать "format": "s8".
Подключаемые к устройству датчики конфигурируются
через holding-регистры (см. описание). Для конфигурации
датчиков можно использовать команду modbus_client
,
или сделать setup-секцию в конфигурации драйвера.
Для установки адреса slave можно использовать скрипт
set-rd-address.sh. При этом необходимо убедиться, что к
порту RS-485 было подлкючено только то устройство,
у которого необходимо сменить адрес, затем выполнить
команду:
set-rd.address.sh /dev/ttyNSC0 0x16
Вместо 0x16 можно задать любой другой адрес
в диапазоне от 0 до 247 (0xf7).
Пример конфигурации:
{
"debug": false,
"ports": [
{
"path" : "/dev/ttyNSC0",
"baud_rate": 9600,
"parity": "N",
"data_bits": 8,
"stop_bits": 2,
"poll_interval": 10,
"enabled": true,
"devices" : [
{
"name": "MSU34+TLP",
"id": "msu34tlp",
"slave_id": 2,
"enabled": false,
"channels": [
{
"name" : "Temp 1",
"reg_type" : "input",
"address" : 0,
"type": "temperature",
"format": "s8"
},
{
"name" : "Illuminance",
"reg_type" : "input",
"address" : 1,
"type": "text"
},
{
"name" : "Pressure",
"reg_type" : "input",
"address" : 2,
"type": "text",
"scale": 0.075
},
{
"name" : "Temp 2",
"reg_type" : "input",
"address" : 3,
"type": "temperature",
"format": "s8"
}
]
}
]
}
]
}
Пример конфигурации MSU21 с секцией инициализации ("setup"):
{
"name": "MSU21",
"id": "msu21",
"slave_id": 24,
"enabled": true,
"setup": [
{
"title": "Input 0 type",
"address": 1,
"value": 2
},
{
"title": "Input 0 module",
"address": 3,
"value": 6
}
],
"channels": [
{
"name" : "Temperature",
"reg_type" : "input",
"address" : 0,
"type": "temperature",
"format": "s8"
}
]
}