Wb-mqtt-serial driver: различия между версиями
(Убрал старый текст, и поменял ссылку на ssh) |
|||
(не показано 16 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Драйвер wb-mqtt-serial}} | {{DISPLAYTITLE: Драйвер wb-mqtt-serial}} | ||
[[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 протоколов для устройств, подключённых: | ''wb-mqtt-serial'' — драйвер master-slave протоколов для устройств, подключённых: | ||
Строка 8: | Строка 8: | ||
* к разъёмам MOD1–MOD3 — при наличии модулей расширения, использующих обмен по UART. | * к разъёмам MOD1–MOD3 — при наличии модулей расширения, использующих обмен по UART. | ||
Драйвер опрашивает serial-устройства и публикует данные в топики [[MQTT|MQTT]]-брокера. Устройства | Драйвер опрашивает serial-устройства и публикует данные в топики [[MQTT|MQTT]]-брокера. Устройства настраиваются через [[RS-485:Configuration via Web Interface | веб-интерфейс]]. | ||
wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств Wiren Board, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие. | |||
Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами | Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами. | ||
Файлы и папки: | Файлы и папки: | ||
* <code>/etc/wb-mqtt-serial.conf</code> — файл настроек драйвера, редактировать вручную не рекомендуем; | * <code>/etc/wb-mqtt-serial.conf</code> — файл настроек драйвера, редактировать вручную не рекомендуем; | ||
* <code>/usr/share/wb-mqtt-serial/templates</code> — папка с предустановленными шаблонами; | * <code>/usr/share/wb-mqtt-serial/templates</code> — папка с предустановленными шаблонами; | ||
* <code>/etc/wb-mqtt-serial.conf.d/templates</code> — папка для пользовательских шаблонов, которые имеют приоритет | * <code>/etc/wb-mqtt-serial.conf.d/templates</code> — папка для пользовательских шаблонов, которые имеют приоритет на предустановленными. | ||
О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]]. | О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]]. | ||
Строка 30: | Строка 28: | ||
Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле: | Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле: | ||
<syntaxhighlight lang="js"> | <syntaxhighlight lang="js"> | ||
guard_interval_us = (3.5*11* | guard_interval_us = (3.5*11*106)/(скорость в бит/с) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Так же этот параметр можно установить через веб-интерфейс: | Так же этот параметр можно установить через веб-интерфейс: | ||
Строка 53: | Строка 51: | ||
== Диагностика неполадок == | == Диагностика неполадок == | ||
Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду <code>systemctl status wb-mqtt-serial</code> и в последних двух строчках ответа будет подсказка. | |||
В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции: | |||
Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину | |||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
# systemctl status wb-mqtt-serial | # systemctl status wb-mqtt-serial | ||
Строка 71: | Строка 67: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Также можно запустить драйвер с параметром проверки файла конфигурации на ошибки: | |||
<syntaxhighlight lang="console"> | |||
# wb-mqtt-serial -j | |||
<3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json | |||
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' | |||
</syntaxhighlight> | |||
При необходимости, можно добавить путь к файлу, который нужно проверить: | |||
<syntaxhighlight lang="bash"> | |||
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -j | |||
</syntaxhighlight> | |||
== Включение отладки== | == Включение отладки== | ||
Строка 105: | Строка 111: | ||
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 | 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> | </syntaxhighlight> | ||
Версия 19:06, 1 декабря 2021
Описание
Общая информация
wb-mqtt-serial — драйвер master-slave протоколов для устройств, подключённых:
- к шине RS-485 — протокол Modbus RTU и других;
- через Ethernet — протоколы Modbus TCP, Modbus over TCP и другие;
- к разъёмам MOD1–MOD3 — при наличии модулей расширения, использующих обмен по UART.
Драйвер опрашивает serial-устройства и публикует данные в топики MQTT-брокера. Устройства настраиваются через веб-интерфейс.
wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств Wiren Board, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие.
Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами.
Файлы и папки:
/etc/wb-mqtt-serial.conf
— файл настроек драйвера, редактировать вручную не рекомендуем;/usr/share/wb-mqtt-serial/templates
— папка с предустановленными шаблонами;/etc/wb-mqtt-serial.conf.d/templates
— папка для пользовательских шаблонов, которые имеют приоритет на предустановленными.
О том, как получить доступ к файлам и папкам, читайте в статье Просмотр файлов контроллера с компьютера.
Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите в репозитории на Github.
Особенности
При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом.
Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр guard_interval_us, который рассчитывается по формуле:
guard_interval_us = (3.5*11*106)/(скорость в бит/с)
Так же этот параметр можно установить через веб-интерфейс:
- Guard interval (us) — для порта.
- Additional delay before each writing to port (us) — для устройства.
Если при чтении регистра устройства возникла ошибка, то соответствующий контрол в веб-интерфейсе будет окрашен в красный цвет. Аналогично с устройством — если оно давно не отвечает, то все его контролы будут окрашены красным.
Управление драйвером
Обычно драйвер запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе.
Также можно управлять драйвером в ручном режиме — это может быть полезно для поиска ошибок в конфигурационном файле или если вам нужно освободить порт для использования modbus_client.
Для выполнения команд подключитесь к контроллеру по SSH. Доступны команды:
systemctl stop wb-mqtt-serial # остановить
systemctl start wb-mqtt-serial # запустить
systemctl restart wb-mqtt-serial # перезапустить
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d # запустить в отладочном режиме с указанием пути к конфигурационному файлу
Диагностика неполадок
Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду systemctl status wb-mqtt-serial
и в последних двух строчках ответа будет подсказка.
В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции:
# systemctl status wb-mqtt-serial
● wb-mqtt-serial.service - MQTT Driver for serial devices
Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Thu 2021-01-28 15:10:51 +04; 4s ago
Process: 23682 ExecStart=/usr/bin/wb-mqtt-serial (code=exited, status=0/SUCCESS)
Main PID: 23682 (code=exited, status=0/SUCCESS)
Jan 28 15:10:47 wirenboard-A6XXXT2R systemd[1]: Started MQTT Driver for serial devices.
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
Jan 28 15:10:51 wirenboard-A6XXXT2R wb-mqtt-serial[23682]: Syntax error: value, object or array expected.
Также можно запустить драйвер с параметром проверки файла конфигурации на ошибки:
# wb-mqtt-serial -j
<3>ERROR: [serial config] Failed to parse /usr/share/wb-mqtt-serial/templates/config-wb-mdm3.json
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'
При необходимости, можно добавить путь к файлу, который нужно проверить:
wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -j
Включение отладки
Иногда нужно включить отладочный режим драйвера. Это можно сделать из командной строки или через веб-интерфейс.
При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.
Включение отладки через веб-интерфейс:
- Зайдите в веб-интерфейс контроллера
- Если вы работаете под обычным пользователем, то смените уровень доступа
- Перейдите Settings → Configs → Serial Device Driver Configuration
- Установите флажок Enable debug logging
- Нажмите на кнопку Save, чтобы сохранить настройки.
Теперь в системный журнал будут записываться отправленные и принятые драйвером пакеты.
Чтобы посмотреть debug-вывод драйвера, выполните в консоли контроллера команду journalctl -e -p 7
, где -e
— отобразить последние записи, а -p 7
задает уровень сообщений, где 7 — это debug. Подробнее о параметрах утилиты, читайте в статье journalctl.
Пример вывода команды:
~# 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