|
|
(не показаны 62 промежуточные версии 6 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE: Драйвер wb-mqtt-serial}} | | {{DISPLAYTITLE: Драйвер wb-mqtt-serial}} |
| '''ВНИМАНИЕ:''' драйвер ''wb-mqtt-serial'' ранее назывался ''wb-homa-modbus'', а конфигурационный файл <code>/etc/wb-mqtt-serial.conf</code> как <code>/etc/wb-homa-modbus.conf</code>. Учитывайте это, если используете устаревшие прошивки.
| |
|
| |
| == Описание == | | == Описание == |
| Драйвер <code>wb-mqtt-serial</code> служит для работы с подключенными по шине [[RS-485|RS-485]] устройствами через систему [[MQTT|MQTT]]-сообщений. | | [[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. |
|
| |
|
| Полное описание драйвера смотрите [https://github.com/contactless/wb-mqtt-serial в репозитории на Github].
| | Драйвер опрашивает serial-устройства и публикует данные в топики [[MQTT|MQTT]]-брокера. Устройства и порты настраиваются через веб-интерфейс, подробнее в статье [[RS-485:Configuration via Web Interface | Начальное конфигурирование устройств через веб-интерфейс]]. |
|
| |
|
| ==Поддерживаемые устройства==
| | Wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств Wiren Board, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие. |
|
| |
|
| Поддерживается работа с:
| | Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами: [[Connecting_Third_Party_Devices_to_Wiren_Board | Подключение стороннего Modbus-устройства к контроллеру Wiren Board]]. |
| *Периферийными устройствами Wiren Board с интерфейсом Modbus: модули реле, диммеры, счётчики импульсов, датчики и т.п.
| |
| *Устройствами сторонних производителей, работающих по протоколу [[Протокол Modbus|Modbus]].
| |
| *Некоторыми устройствами, использующими протоколы ADICON, A-BUS, [http://smart.uniel.ru/ Uniel], [http://www.milur.ru/ Милур], [http://www.eksis.ru/catalog/measures-of-relative-humidity-and-temperature/ ИВТМ], [[Сounters Pulsar | Пульсар]], [http://www.incotexcom.ru/m230art.htm Меркурий 230], [http://www.energomera.ru/ Энергомера ГОСТ МЭК 61107], [https://www.meters.taipit.ru/ НЕВА МТ 32х ГОСТ МЭК 61107]. Полный список поддерживаемых устройств можно посмотреть в таблице [[Поддерживаемые устройства#Протестированные устройства сторонних производителей |Протестированные устройства сторонних производителей]].
| |
|
| |
|
| === Поддержка устройств различных протоколов на одной шине ===
| | Файлы и папки: |
| | * <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> |
|
| |
|
| Например, фреймы устройств Unitel начинаются с байта <code>0xff</code>, а устройств ИВТМ — с байта <code>0x24</code>. В случае с протоколами Modbus, Меркурий 230 и Милур первым байтом фрейма является идентификатор ''slave'', поэтому при совмещении таких устройств нужно внимательно подходить к выбору ''slave id''.
| | О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]]. |
|
| |
|
| У устройств Милур ''slave id'' по умолчанию равен <code>0xff</code>, что приведет к конфликту с устройствами Unitel. Также устройства Милур требуют дополнительных задержек при опросе и при использовании на одной шине с другими устройствами могут снизить общую скорость опроса устройств.
| | Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите '''[https://github.com/contactless/wb-mqtt-serial в репозитории на Github]'''. |
|
| |
|
| Иногда устройства, работающие на разных протоколах могут конфликтовать между собой.
| | === Особенности === |
| | При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом. |
|
| |
|
| Учитывайте, что сторонние производители устройств могут вносить недокументированные изменения в протокол, поэтому перед покупкой устройства желательно убедиться в работоспособности выбранного решения.
| | Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле: |
| | | <syntaxhighlight lang="js"> |
| === Доработка драйвера для поддержки новых устройств === | | guard_interval_us = (3.5*11*10^6)/(скорость в бит/с) |
| | | </syntaxhighlight> |
| Вы можете самостоятельно добавить поддержку новых устройств, которые работают по Modbus или по другим известным драйверу протоколам, при помощи [[Драйвер wb-mqtt-serial:Примеры написания шаблонов|шаблонов]].
| | Так же этот параметр можно установить через веб-интерфейс: |
| | * Guard interval (us) — для порта. |
| | * Additional delay before each writing to port (us) — для устройства. |
|
| |
|
| Если у вас возникли проблемы с составлением шаблона или выбранное вами устройство имеет свой протокол обмена данными — [https://wirenboard.com/ru/pages/contacts свяжитесь с нами] и мы постараемся помочь. | | Если при чтении регистра устройства возникла ошибка, то соответствующий контрол в веб-интерфейсе будет окрашен в красный цвет. Аналогично с устройством — если оно давно не отвечает, то все его контролы будут окрашены красным. |
|
| |
|
| ==Управление драйвером== | | == Управление драйвером == |
|
| |
|
| Обычно драйвер запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе. | | Обычно драйвер запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе. |
Строка 40: |
Строка 46: |
| Для выполнения команд подключитесь к контроллеру по [[SSH]]. Доступны команды: | | Для выполнения команд подключитесь к контроллеру по [[SSH]]. Доступны команды: |
| <syntaxhighlight lang="bash"> | | <syntaxhighlight lang="bash"> |
| service wb-mqtt-serial stop #остановить драйвер
| | systemctl stop wb-mqtt-serial # остановить |
| service wb-mqtt-serial start #запустить драйвер
| | systemctl start wb-mqtt-serial # запустить |
| service wb-mqtt-serial restart #перезапустить драйвер
| | systemctl restart wb-mqtt-serial # перезапустить |
| wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d #запустить драйвер в отладочном режиме с указанием пути к конфигурационному файлу | | wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d # запустить в отладочном режиме с указанием пути к конфигурационному файлу |
| wb-mqtt-serial -j #посмотреть ошибки в конфигурационном файле
| |
| </syntaxhighlight>
| |
| | |
| == Файл конфигурации драйвера ==
| |
| | |
| Перед использованием драйвер нужно настроить. Конфигурация драйвера хранится в файле <code>/etc/wb-mqtt-serial.conf</code>.
| |
| | |
| === Структура файла ===
| |
| | |
| Файл <code>/etc/wb-mqtt-serial.conf</code> имеет структуру <code>порты (ports)</code> → <code>устройства (devices)</code> → <code>каналы (channels)</code>: в файле есть описание физических портов контроллера, внутри них — список подключенных к этому порту устройств, а внутри устройств описаны их каналы.
| |
| | |
| Для каждого порта указываются настройки: скорость, четность и т.п., а также протокол: Modbus, Uniel и т.п. Для каждого устройства обязательно указывается его уникальный адрес на шине — <code>slave_id</code>, остальные параметры указываются по необходимости. Если параметр не указан — будет подставлено значение по умолчанию.
| |
| | |
| Структура файла:
| |
| <syntaxhighlight lang="javascript">
| |
| {
| |
| // основные настройки драйвера
| |
| "параметр": "значение",
| |
| ...
| |
| | |
| // порты
| |
| "ports": [
| |
| {
| |
| // настройки порта
| |
| "параметр": "значение",
| |
| ...
| |
| | |
| // список устройств на этом порту
| |
| "devices" : [
| |
| {
| |
| // описание первого устройства на канале
| |
| "параметр": "значение",
| |
| ...
| |
| | |
| // список каналов устройства
| |
| "channels": [
| |
| {
| |
| //описание канала 1
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| {
| |
| //описание канала 2
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| ...
| |
| ]
| |
| },
| |
| {
| |
| // описание второго устройства на канале
| |
| "параметр": "значение",
| |
| ...
| |
| | |
| // секция инициализации второго устройства
| |
| "setup": [
| |
| {
| |
| // описание регистра настройки
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| ...
| |
| ],
| |
| // секция параметров второго устройства, значение указанных здесь параметров можно менять в веб-интерфейсе
| |
| "parameters": {
| |
| "param1": {
| |
| // описание регистра настройки
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| "param2": {
| |
| // описание регистра настройки
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| ...
| |
| },
| |
| // каналы второго устройства
| |
| "channels": [
| |
| {
| |
| //первый канал
| |
| "параметр": "значение",
| |
| ...
| |
| },
| |
| ...
| |
| ]
| |
| }
| |
| ]
| |
| },
| |
| {
| |
| // ещё один порт со своим набором устройств
| |
| "devices" : [
| |
| {
| |
| "параметр": "значение",
| |
| ...
| |
| | |
| "channels": [
| |
| {
| |
| "параметр": "значение",
| |
| ...
| |
| }
| |
| ]
| |
| }
| |
| ...
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| Пример конфигурационного файла можете посмотреть [https://github.com/wirenboard/wb-mqtt-serial/blob/master/README.md в репозитории].
| |
| | |
| ==== Основные настройки драйвера ====
| |
| * debug — опция включает отладочный режим драйвера. Доступные значения: ''true'', ''false''.
| |
| * max_unchanged_interval — Задаёт интервал в секундах, в течение которого неизменяющиеся значения не будут публиковаться в MQTT. По истечении интервала значения будут опубликованы, даже если они не изменились. Помимо интервала в секундах можно указать специальные значения:
| |
| ** <code>0</code> — публиковать все значения;
| |
| ** <code>-1</code> — публиковать только при изменении. Значение по умолчанию.
| |
| | |
| ==== Порты (ports) ====
| |
| * port_type — можно указать один из трех типов порта:
| |
| ** serial — последовательные порты RS-485 или RS-232. Значение по умолчанию.
| |
| ** tcp — serial over TCP/IP. Пакеты, формируемые для работы с последовательными портами, передаются без изменений через TCP/IP.
| |
| ** modbus tcp — передача по Modbus TCP. В секции устройств с таким типом порта могут использоваться только те, что поддерживают Modbus.
| |
| * path — если выбран тип ''serial'': устройство в системе, которое соответствует порту RS-485.
| |
| * address — если выбран тип ''tcp'' или ''modbus tcp'': IP-адрес или имя хоста.
| |
| * port — если выбран тип ''tcp'' или ''modbus tcp'': TCP-порт.
| |
| * baud_rate — скорость порта.
| |
| * parity — четность:
| |
| ** N — none, без бита четности. Значение по умолчанию;
| |
| ** O — odd, нечетный;
| |
| ** E — even, четный.
| |
| * data_bits — количество бит данных, по умолчанию — 8.
| |
| * stop_bits — количество стоп-бит, по умолчанию — 2.
| |
| * poll_interval — минимальный интервал опроса каждого регистра в миллисекундах.
| |
| * response_timeout_ms — максимальное время ожидания ответа устройств в миллисекундах. По умолчанию — 500 мс.
| |
| * guard_interval_us — дополнительная задержка перед отправкой данных в порт, микросекунды.
| |
| * connection_timeout_ms — если выбран тип ''tcp'' или ''modbus tcp'': таймаут соединения. Если в течение указанного времени ни по одному из устройств на порту не поступило данных и истек ''connection_max_fail_cycles'' — разорвать соединение и переподключиться.
| |
| * connection_max_fail_cycles — если выбран тип ''tcp'' или ''modbus tcp'': количество неудачных циклов опроса.
| |
| * enabled — включает или отключает порт. Доступные значения: ''true'', ''false''. По умолчанию — ''true''.
| |
| | |
| ==== Устройства, их каналы и параметры (devices, channels, setup и parameters) ====
| |
| Раздел '''devices''' содержит описание устройств, подключенных к порту и имеет структуру:
| |
| <syntaxhighlight lang="javascript">
| |
| "devices" :
| |
| [
| |
| {
| |
| // описание устройства
| |
| ...
| |
| "channels" :
| |
| [
| |
| // описание каналов
| |
| ...
| |
| ]
| |
| },
| |
| {
| |
| // описание второго устройства
| |
| ...
| |
| },
| |
| ...
| |
| ]
| |
| </syntaxhighlight>
| |
| | |
| Описание устройства '''device''' может быть задано двумя способами: вручную прописать все параметры или задать только несколько параметров, а остальные вынести в шаблон:
| |
| <syntaxhighlight lang="javascript">
| |
| {
| |
| // По DeviceType драйвер будет искать в папках с шаблонами описаний устройств
| |
| "device_type" : "DeviceType",
| |
| | |
| // отображаемое имя устройства. Публикуется как
| |
| // .../meta/name в MQTT
| |
| // По умолчанию name берется из шаблона и добавляется slave_id, т.е.
| |
| // "name" + " " + "slave_id"
| |
| "name" : "somename",
| |
| | |
| // уникальный идентификатор устройства в MQTT.
| |
| // каждый элемент в devices должен иметь уникальный id
| |
| // topic'и, относящиеся в MQTT к данному устройству,
| |
| // имеют общий префикс /devices/<идентификатор топика>/...
| |
| // также по умолчанию берется из шаблона с добавлением slave_id:
| |
| // "deviceID" + "_" + slave_id
| |
| "id" : "deviceID",
| |
| | |
| // идентификатор slave
| |
| "slave_id" : slaveID,
| |
| | |
| // включить/выключить устройство. В случае задания
| |
| // "enabled": false опрос устройства и запись значений
| |
| // его каналов не происходит. По умолчанию - true.
| |
| "enabled" : true,
| |
| | |
| // если используется шаблон устройства, определения
| |
| // каналов совмещаются. Если имя (name) в определении
| |
| // канала устройства совпадает с именем канала в шаблоне,
| |
| // свойства каналов из шаблона и определения устройства
| |
| // совмещаются, при этом значения свойств из определения
| |
| // устройства (в файле конфигурации) имеют преимущество.
| |
| // Это можно использовать, например, для задания индивидуальных
| |
| // интервалов опроса каналов. Если канал с таким же
| |
| // именем, как канал в определении устройства, отсутствует
| |
| // в шаблоне, создаётся новый канал.
| |
| "channels": [
| |
| {
| |
| // имя канала. topic'и, соответствующие каналу,
| |
| "name" : "Temp 1",
| |
| "poll_interval": 10000
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| Подробное описание разделов '''device''', '''channels''', '''setup''' и '''parameters''' вы найдете [[Wb-mqtt-serial templates | в статье о шаблонах]].
| |
| | |
| === Редактирование через веб-интерфейс ===
| |
| Мы рекомендуем изменять конфигурацию драйвера через веб-интерфейс. Процедура настройки подробно описана в статье [[RS-485:Настройка через веб-интерфейс|RS-485:Настройка через веб-интерфейс]].
| |
| | |
| === Внесение изменений вручную ===
| |
| Будьте внимательны при редактировании файла конфигурации вручную — в отличие от редактирования через веб-интерфейс, вы можете допустить синтаксическую ошибку и драйвер не запустится.
| |
| | |
| # Ознакомьтесь с инструкцией [[Просмотр файлов контроллера с компьютера|Просмотр файлов контроллера с компьютера]] и выберите удобный для вас способ.
| |
| #Впишите конфигурацию для портов и подключенных устройств в файл. Смотрите [[#Примеры файла конфигурации | примеры]].
| |
| #Чтобы описанные в файле устройства появились в веб-интерфейсе, перезагрузите контроллер или выполните команду:
| |
| #: <syntaxhighlight lang="bash">
| |
| service wb-mqtt-serial restart
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| === Поиск ошибок === | | == Диагностика неполадок == |
| Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду <code>systemctl status wb-mqtt-serial</code> и в последних двух строчках ответа будет подсказка. | | {{SupportedSinceRelease |
| | | | release = wb-2407 |
| В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции: | | |content= |
| <syntaxhighlight lang="bash"> | | Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину в журнале wb-mqtt-serial двумя способами: |
| ~# systemctl status wb-mqtt-serial
| | * [[SSH | Подключитесь к контроллеру]], выполните команду <code>systemctl status wb-mqtt-serial</code>, вывод будет содержать сообщения о ошибке. В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции: |
| | <syntaxhighlight lang="console"> |
| | # systemctl status wb-mqtt-serial |
| ● wb-mqtt-serial.service - MQTT Driver for serial devices | | ● wb-mqtt-serial.service - MQTT Driver for serial devices |
| Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled) | | Loaded: loaded (/lib/systemd/system/wb-mqtt-serial.service; enabled; vendor preset: enabled) |
Строка 286: |
Строка 71: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| == Примеры файла конфигурации ==
| |
|
| |
| В примерах мы описывали устройства в самом файле конфигурации, но при их большом количестве описание устройств можно вынести в [[Драйвер wb-mqtt-serial:Примеры написания шаблонов | шаблоны]].
| |
|
| |
| === Подключено одно устройство ===
| |
|
| |
|
| Выведем среднеквадратичное значение напряжения на фазе L1 со счетчика [[WB-MAP3E Power Meter | WB-MAP3E fw2]]. В примере счетчик подключен к serial-порту <code>/dev/ttyRS485-1</code>, работает по протоколу [[Протокол Modbus | Modbus]] и имеет адрес <code>142</code>.
| | * Откройте в [[Wiren_Board_Web_Interface|веб-интерфейс контроллера]], перейдите '''Настройки → Системный журнал''' в пункте '''Выберите сервис — wb-mqtt-serial.service''' и нажмите кнопку '''загрузить'''. В примере файл конфигурации содержит два дублирующих друг друга параметра: |
| | | [[Файл:Wb-mqtt-serial error.png|600px|thumb|centre| Журнал ошибок в веб-интерфейсе]] |
| <syntaxhighlight lang="javascript">{
| | }} |
| // отладка выключена
| |
| "debug" : false,
| |
| // список портов
| |
| "ports" :
| |
| [
| |
| {
| |
| // тип порта
| |
| "port_type" : "serial",
| |
| // устройство, соответствующее порту RS-485 (если выбран тип порта serial)
| |
| "path" : "/dev/ttyRS485-1",
| |
| // скорость порта
| |
| "baud_rate" : 9600,
| |
| // количество бит данных
| |
| "data_bits" : 8,
| |
| // количество стоп-бит
| |
| "stop_bits" : 2,
| |
| // паритет - N, O или E
| |
| "parity" : "N",
| |
| // включить опрос устройства
| |
| "enabled" : true,
| |
| // минимальный интервал опроса каждого регистра в миллисекундах
| |
| "poll_interval" : 10,
| |
| // список устройств на порту /dev/ttyRS485-1
| |
| "devices" :
| |
| [
| |
| {
| |
| // отображаемое имя устройства
| |
| "name" : "WB-MAP3E fw2",
| |
| // протокол передачи устройства
| |
| "protocol" : "modbus",
| |
| // идентификатор устройства на шине
| |
| "slave_id" : "142",
| |
| // список каналов устройства
| |
| "channels" :
| |
| [
| |
| {
| |
| // адрес регистра
| |
| "address" : "0x1410",
| |
| // формат канала
| |
| "format" : "u32",
| |
| // имя канала
| |
| "name" : "Urms L1",
| |
| // тип регистра
| |
| "reg_type" : "input",
| |
| // порядок, до которого будет округляться значение после всех преобразований
| |
| "round_to" : 0.001,
| |
| // коэффициент, на который умножается значение регистра перед публикацией в MQTT
| |
| "scale" : 1.52588e-07,
| |
| // тип элемента управления
| |
| "type" : "voltage"
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }</syntaxhighlight>
| |
| | |
| === Несколько подключенных устройств ===
| |
| | |
| Выведем среднеквадратичное значение напряжения на фазе L1 со счетчика [[WB-MAP3E Power Meter | WB-MAP3E fw2]] и температуру с датчика [[MSW3]].
| |
| | |
| В примере устройства работают по протоколу [[Протокол Modbus | Modbus]]: счетчик WB-MAP3E подключен к serial-порту <code>/dev/ttyRS485-1</code> с адресом <code>142</code>, а датчик MSW3 подключен к serial-порту <code>/dev/ttyRS485-2</code> и имеет адрес <code>22</code>. | |
| | |
| <syntaxhighlight lang="javascript">
| |
| {
| |
| // отладка выключена
| |
| "debug" : false,
| |
| // список портов
| |
| "ports" :
| |
| [
| |
| {
| |
| // тип порта
| |
| "port_type" : "serial",
| |
| // устройство, соответствующее порту RS-485 (если выбран тип порта serial)
| |
| "path" : "/dev/ttyRS485-1",
| |
| // скорость порта
| |
| "baud_rate" : 9600,
| |
| // количество бит данных
| |
| "data_bits" : 8,
| |
| // количество стоп-бит
| |
| "stop_bits" : 2,
| |
| // четность - N, O или E
| |
| "parity" : "N",
| |
| // включить опрос устройства
| |
| "enabled" : true,
| |
| // минимальный интервал опроса каждого регистра в миллисекундах
| |
| "poll_interval" : 10,
| |
| // список устройств на порту /dev/ttyRS485-1
| |
| "devices" :
| |
| [
| |
| {
| |
| // отображаемое имя устройства
| |
| "name" : "WB-MAP3E fw2",
| |
| // протокол передачи устройства
| |
| "protocol" : "modbus",
| |
| // идентификатор устройства на шине
| |
| "slave_id" : "142",
| |
| // список каналов устройства
| |
| "channels" :
| |
| [
| |
| {
| |
| // адрес регистра
| |
| "address" : "0x1410",
| |
| // формат канала
| |
| "format" : "u32",
| |
| // имя канала
| |
| "name" : "Urms L1",
| |
| // тип регистра
| |
| "reg_type" : "input",
| |
| // порядок, до которого будет округляться значение после всех преобразований
| |
| "round_to" : 0.001,
| |
| // коэффициент, на который умножается значение регистра перед публикацией в MQTT
| |
| "scale" : 1.52588e-07,
| |
| // тип элемента управления
| |
| "type" : "voltage"
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| },
| |
| {
| |
| // тип порта
| |
| "port_type" : "serial",
| |
| // устройство, соответствующее порту RS-485 (если выбран тип порта serial)
| |
| "path" : "/dev/ttyRS485-2",
| |
| // скорость порта
| |
| "baud_rate" : 9600,
| |
| // количество бит данных
| |
| "data_bits" : 8,
| |
| // количество стоп-бит
| |
| "stop_bits" : 2,
| |
| // четность - N, O или E
| |
| "parity" : "N",
| |
| // включить опрос устройства
| |
| "enabled" : true,
| |
| // минимальный интервал опроса каждого регистра в миллисекундах
| |
| "poll_interval" : 10,
| |
| // список устройств на порту /dev/ttyRS485-2
| |
| "devices" :
| |
| [
| |
| {
| |
| // отображаемое имя устройства
| |
| "name" : "MSW3",
| |
| // протокол передачи устройства
| |
| "protocol" : "modbus",
| |
| // идентификатор устройства на шине
| |
| "slave_id" : "22",
| |
| // список каналов устройства
| |
| "channels" :
| |
| [
| |
| {
| |
| // адрес регистра
| |
| "address" : "0x0000",
| |
| // формат канала
| |
| "format" : "s16",
| |
| // имя канала
| |
| "name" : "Temp",
| |
| // тип регистра
| |
| "reg_type" : "input",
| |
| // порядок, до которого будет округляться значение после всех преобразований
| |
| "round_to" : 0.5,
| |
| // коэффициент, на который умножается значение регистра перед публикацией в MQTT
| |
| "scale" : 0.1,
| |
| // тип элемента управления
| |
| "type" : "temperature"
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| } | |
| </syntaxhighlight>
| |
|
| |
|
| == Включение отладки== | | == Включение отладки== |
Строка 474: |
Строка 80: |
| Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс. | | Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс. |
|
| |
|
| '''ВНИМАНИЕ: ''' при включенной отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.
| | {{note|info| При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.}} |
|
| |
|
| Включение отладки через веб-интерфейс: | | Включение отладки через [[Wiren Board Web Interface|веб-интерфейс]]: |
| #Зайдите в веб-интерфейс '''Settings''' → '''Configs''' → '''Serial Device Driver Configuration''' | | # Зайдите в веб-интерфейс контроллера |
| #Установите флажок '''Enable debug logging''' | | # Если вы работаете под обычным пользователем, то смените [[RS-485:Configuration via Web Interface#Смена уровня доступа к веб-интерфейсу| уровень доступа]] |
| #Нажмите на кнопку '''Save''', чтобы сохранить настройки. | | # Перейдите '''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. | | Чтобы посмотреть debug-вывод драйвера, выполните в консоли контроллера команду <code>journalctl -e -p 7</code>, где <code>-e</code> — отобразить последние записи, а <code>-p 7</code> задает уровень сообщений, где 7 — это debug. Подробнее о параметрах утилиты, читайте в статье [[journalctl]]. |
|
| |
|
| Пример вывода команды: | | Пример вывода команды: |
Строка 497: |
Строка 105: |
| 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> |
|
| |
| Подробнее о возможностях утилиты <code>journalctl</code> можете почитать в [https://habr.com/ru/company/ruvds/blog/533918/ статье на Хабре].
| |
|
| |
|
| == Полезные ссылки == | | == Полезные ссылки == |
| * [[Wb-mqtt-serial templates| Описание шаблонов и примеры]] | | * [[Connecting_Third_Party_Devices_to_Wiren_Board | Как подключить стороннее Modbus-устройство]] |
| * [[RS-485:Configuration via Web Interface | Настройка драйвера wb-mqtt-serial в веб-интерфейсе]]
| | * [https://github.com/contactless/wb-mqtt-serial Описание wb-mqtt-serial на Github] |
| * [https://github.com/wirenboard/wb-mqtt-serial/blob/master/README.md Описание драйвера в репозитории на Github] | | * [[Modbus|Описание протокола Modbus]] |
| | * [[Fast_Modbus| Описание расширения Быстрый Modbus]] |
| | * [[RS-485|Описание шины RS-485]] |
Описание
Драйвер wb-mqtt-serial может одновременно опрашивать устройства, работающие по разным протоколам:
1 — виртуальный порт для устройств с протоколом Modbus TCP,
2 — устройство работает по протоколу Modbus RTU,
3 — устройство работает по протоколу DLMS
Общая информация
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, а также некоторых сторонних устройств: счётчики электроэнергии, частотные преобразователи, холодильные контроллеры и другие.
Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами: Подключение стороннего Modbus-устройства к контроллеру Wiren Board.
Файлы и папки:
/etc/wb-mqtt-serial.conf
— файл настроек драйвера, редактировать вручную не рекомендуем;
/usr/share/wb-mqtt-serial/templates
— папка с предустановленными шаблонами;
/etc/wb-mqtt-serial.conf.d/templates
— папка для пользовательских шаблонов, которые имеют приоритет над предустановленными.
Если вы добавили свой шаблон или изменили существующий, подождите 20 секунд, а потом перезагрузите страницу конфигуратора в веб-интерфейсе клавишами Ctrl+F5 или перезапустите сервис:
systemctl restart wb-mqtt-confed
О том, как получить доступ к файлам и папкам, читайте в статье Просмотр файлов контроллера с компьютера.
Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите в репозитории на Github.
Особенности
При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом.
Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр guard_interval_us, который рассчитывается по формуле:
guard_interval_us = (3.5*11*10^6)/(скорость в бит/с)
Так же этот параметр можно установить через веб-интерфейс:
- 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 # запустить в отладочном режиме с указанием пути к конфигурационному файлу
Диагностика неполадок
Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину в журнале wb-mqtt-serial двумя способами:
- Подключитесь к контроллеру, выполните команду
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.service и нажмите кнопку загрузить. В примере файл конфигурации содержит два дублирующих друг друга параметра:
Журнал ошибок в веб-интерфейсе
Включение отладки
Веб-интерфейс. Флажок
Enable debug logging установлен, отладка включена
Иногда нужно включить отладочный режим драйвера. Это можно сделать из командной строки или через веб-интерфейс.
При включённой отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.
Включение отладки через веб-интерфейс:
- Зайдите в веб-интерфейс контроллера
- Если вы работаете под обычным пользователем, то смените уровень доступа
- Перейдите 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
Полезные ссылки