Перейти к содержанию

Навигация

Wb-mqtt-serial driver: различия между версиями

Добавил диаграмму таймаутов опроса, взял на гитхабе
(Добавил диаграмму таймаутов опроса, взял на гитхабе)
(не показаны 33 промежуточные версии 3 участников)
Строка 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>. Учитывайте это, если используете устаревшие прошивки.
[[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]]
 
== Описание ==
== Описание ==
Драйвер <code>wb-mqtt-serial</code> служит для работы с подключенными по шине [[RS-485|RS-485]] устройствами через систему [[MQTT|MQTT]]-сообщений.
{{note|note| Драйвер ''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]]-сообщений.


Полное описание драйвера смотрите [https://github.com/contactless/wb-mqtt-serial в репозитории на Github].
Полное описание драйвера смотрите [https://github.com/contactless/wb-mqtt-serial в репозитории на Github].


==Поддерживаемые устройства==  
== Поддерживаемые устройства ==  
=== Перечень ===
Драйвер поддерживает некоторые устройства, который работают по протоколам:
* [[Modbus | Modbus RTU и Modbus TCP]],
* [http://smart.uniel.ru Uniel],
* [http://www.eksis.ru/catalog/measures-of-relative-humidity-and-temperature/ ИВТМ],
* [https://www.incotexcom.ru/catalogue Меркурий],
* [https://miluris.ru/ Милур],
* [[GOST MEK 61107 | Энергомера ГОСТ МЭК 61107]],
* [[GOST MEK 61107 |НЕВА МТ 32х ГОСТ МЭК 61107]],
* [[DLMS/COSEM | DLMS/COSEM, СПОДЭС (ГОСТ Р 58940-2020)]],
* [[Somfy SDN | Somfy SDN]],
* [[WinDeco | WinDeco]],
* [[Dooya DT82 | Dooya DT82]].


Поддерживается работа с:
Полный список поддерживаемых устройств и особенности подключения, смотрите в таблице [[Supported devices#Таблица | Поддерживаемые контроллером 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]. Полный список поддерживаемых устройств можно посмотреть в таблице [[Поддерживаемые устройства#Протестированные устройства сторонних производителей |Протестированные устройства сторонних производителей]].


=== Поддержка устройств различных протоколов на одной шине ===  
=== Поддержка устройств различных протоколов на одной шине ===  
Строка 18: Строка 30:
Использовать устройства с разными протоколами на одной шине возможно, но необходимо учитывать особенности конкретных протоколов.
Использовать устройства с разными протоколами на одной шине возможно, но необходимо учитывать особенности конкретных протоколов.


Например, фреймы устройств Unitel начинаются с байта <code>0xff</code>, а устройств ИВТМ — с байта <code>0x24</code>. В случае с протоколами Modbus, Меркурий 230 и Милур первым байтом фрейма является идентификатор ''slave'', поэтому при совмещении таких устройств нужно внимательно подходить к выбору ''slave id''.  
Например, фреймы устройств Uniel начинаются с байта <code>0xff</code>, а устройств ИВТМ — с байта <code>0x24</code>. В случае с протоколами Modbus, Меркурий 230 и Милур первым байтом фрейма является идентификатор ''slave'', поэтому при совмещении таких устройств нужно внимательно подходить к выбору ''slave id''.
 
У устройств Милур ''slave id'' по умолчанию равен <code>0xff</code>, что приведет к конфликту с устройствами Uniel. Также устройства Милур требуют дополнительных задержек при опросе и при использовании на одной шине с другими устройствами могут снизить общую скорость опроса устройств.


У устройств Милур ''slave id'' по умолчанию равен <code>0xff</code>, что приведет к конфликту с устройствами Unitel. Также устройства Милур требуют дополнительных задержек при опросе и при использовании на одной шине с другими устройствами могут снизить общую скорость опроса устройств.
Иногда устройства, работающие на разных протоколах могут конфликтовать между собой.


Иногда устройства, работающие на разных протоколах могут конфликтовать между собой: устройства с поддержкой протокола A-BUS не могут работать на одной шине с устройствами Unitel.  
=== Широковещательные сообщения ===
[[Image:Broadcast Energometa CE102M.png |400px|thumb|right| Включение широковещательных сообщений в настройках счётчика Энергомера CE102M]]
Протоколы Меркурий 230, Энергомера ГОСТ МЭК 61107, НЕВА МТ 32х ГОСТ МЭК 61107 поддерживают отправку широковещательных сообщений, если не указывать идентификатор устройства, или указать вместо него пустую строку. Это можно использовать, если на шине только одно устройство такого типа, и его адрес неизвестен.  


Рекомендуем придерживаться проверенной формулы комбинации протоколов на одной шине: <code>Modbus + Милур (slave_id != 0xff) + Uniel</code>. Учитывайте, что сторонние производители устройств могут вносить недокументированные изменения в протокол, поэтому перед покупкой устройства желательно убедиться в работоспособности выбранного решения.
При этом нельзя на одном порту одновременно использовать широковещательные сообщения Энергомера ГОСТ МЭК 61107 и НЕВА МТ 32х ГОСТ МЭК 61107.


=== Доработка драйвера для поддержки новых устройств ===  
=== Доработка драйвера для поддержки новых устройств ===  


Вы можете самостоятельно добавить поддержку новых modbus-устройств при помощи [[Драйвер wb-mqtt-serial:Примеры написания шаблонов|шаблонов]].
Вы можете самостоятельно добавить поддержку новых устройств, которые работают по Modbus или по другим известным драйверу протоколам, при помощи [[Wb-mqtt-serial templates|шаблонов]].


Если у вас возникли проблемы с составлением шаблона или выбранное вами устройство имеет свой протокол обмена данными — [https://wirenboard.com/ru/pages/contacts свяжитесь с нами] и мы постараемся помочь.
Если у вас возникли проблемы с составлением шаблона или выбранное вами устройство имеет свой протокол обмена данными — [https://wirenboard.com/ru/pages/contacts свяжитесь с нами] и мы постараемся помочь.
Строка 44: Строка 60:
service wb-mqtt-serial restart #перезапустить драйвер
service wb-mqtt-serial restart #перезапустить драйвер
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>
</syntaxhighlight>


== Файл конфигурации драйвера ==  
== Файл конфигурации драйвера ==  
 
[[Image: wb-mqtt-serial working diagram.png|500px|thumb|right| Диаграмма таймаутов цикла опроса]]
Перед использованием драйвер нужно настроить. Конфигурация драйвера хранится в файле <code>/etc/wb-mqtt-serial.conf</code>.  
Перед использованием драйвер нужно настроить. Конфигурация драйвера хранится в файле <code>/etc/wb-mqtt-serial.conf</code>.  


=== Структура файла ===  
=== Структура файла ===  


Файл <code>/etc/wb-mqtt-serial.conf</code> имеет структуру <code>порты (ports)</code> → <code>устройства (devices)</code> → <code>каналы (channels)</code>: в файле есть описание физических портов контроллера, внутри них — список устройств подключенных к этому порту, а внутри устройств описаны каналы.
Файл <code>/etc/wb-mqtt-serial.conf</code> имеет структуру <code>порты (ports)</code> → <code>устройства (devices)</code> → <code>каналы (channels)</code>: в файле есть описание физических портов контроллера, внутри них — список подключенных к этому порту устройств, а внутри устройств описаны их каналы.


Для каждого порта указываются настройки: скорость, четность и т.п., а также протокол: Modbus, Uniel и т.п. Для каждого устройства обязательно указывается его уникальный адрес на шине — <code>slave_id</code>, остальные параметры указываются по необходимости.  
Для каждого порта указываются настройки: скорость, четность и т.п., а также протокол: Modbus, Uniel и т.п. Для каждого устройства обязательно указывается его уникальный адрес на шине — <code>slave_id</code>, остальные параметры указываются по необходимости. Если параметр не указан — будет подставлено значение по умолчанию.


Структура файла:
Структура файла:
Строка 70: Строка 87:
...
...


             // список устройств на данном порту
             // список устройств на этом порту
             "devices" : [
             "devices" : [
                 {
                 {
Строка 106: Строка 123:
                             ...
                             ...
                     ],
                     ],
                    // секция параметров второго устройства, значение указанных здесь параметров можно менять в веб-интерфейсе
                    "parameters": {
                        "param1":  {
                                    // описание регистра настройки
                                    "параметр": "значение",
                                    ...
                        },
                        "param2":  {
                                    // описание регистра настройки
                                    "параметр": "значение",
                                    ...
                        },                                   
                            ...
                    },
                     // каналы второго устройства
                     // каналы второго устройства
                     "channels": [
                     "channels": [
Строка 142: Строка 173:


==== Основные настройки драйвера ====
==== Основные настройки драйвера ====
* debug — опция включает отладочный режим драйвера. Доступные значения: true, false.
* debug — опция включает отладочный режим драйвера. Доступные значения: ''true'', ''false''.
* max_unchanged_interval — Задаёт интервал в секундах, в течение которого не изменяющиеся значения не будут публиковаться в MQTT. По истечении интервала значение будет опубликовано, даже если оно не изменилось. Доступны специальные значения:
* max_unchanged_interval — Задаёт интервал в секундах, в течение которого неизменяющиеся значения не будут публиковаться в MQTT. По истечении интервала значения будут опубликованы, даже если они не изменились. Помимо интервала в секундах можно указать специальные значения:
** <code>0</code> — публиковать все значения;  
** <code>0</code> — публиковать все значения;  
** <code>-1</code> — публиковать только при изменении. Значение по умолчанию.
** <code>-1</code> — публиковать только при изменении. Значение по умолчанию.


==== Порты (ports) ====
==== Порты (ports) ====
* port_type — тип порта:  
* port_type — можно указать один из трех типов порта:  
** serial — последовательные порты RS-485 или RS-232, значение по умолчанию.
** serial — последовательные порты RS-485 или RS-232. Значение по умолчанию.
** tcp — serial over TCP/IP. Пакеты, формируемые для работы с последовательными портами, передаются без изменений через TCP/IP.
** tcp — serial over TCP/IP. Пакеты, формируемые для работы с последовательными портами, передаются без изменений через TCP/IP.
** modbus tcp — передача по Modbus TCP. В секции устройств с таким типом порта могут использоваться только те, что поддерживают Modbus.
** modbus tcp — передача по Modbus TCP. В секции устройств с таким типом порта могут использоваться только те, что поддерживают Modbus.
* path — если выбран тип serial: устройство в системе, которое соответствует порту RS-485.
* path — если выбран тип ''serial'': устройство в системе, которое соответствует порту RS-485.
* address — если выбран тип tcp или modbus tcp: IP-адрес или имя хоста.
* address — если выбран тип ''tcp'' или ''modbus tcp'': IP-адрес или имя хоста.
* port — если выбран тип tcp или modbus tcp: TCP-порт.  
* port — если выбран тип ''tcp'' или ''modbus tcp'': TCP-порт.  
* baud_rate — скорость порта.
* baud_rate — скорость порта.
* parity — четность:  
* parity — четность:  
Строка 163: Строка 194:
* stop_bits — количество стоп-бит, по умолчанию — 2.
* stop_bits — количество стоп-бит, по умолчанию — 2.
* poll_interval — минимальный интервал опроса каждого регистра в миллисекундах.
* poll_interval — минимальный интервал опроса каждого регистра в миллисекундах.
* response_timeout_ms — максимальное время ответа устройств в миллисекундах. По умолчанию — 500 мс.
* response_timeout_ms — максимальное время ожидания ответа устройств в миллисекундах. По умолчанию — 500 мс.
* guard_interval_us — дополнительная задержка перед отправкой данных в порт, микросекунды.
* guard_interval_us — дополнительная задержка перед отправкой данных в порт, микросекунды.
* connection_timeout_ms — если выбран тип tcp или modbus tcp: таймаут соединения. Если в течение указанного времени ни по одному из устройств на порту не поступило данных и истек connection_max_fail_cycles — разорвать соединение и переподключиться.
* connection_timeout_ms — если выбран тип ''tcp'' или ''modbus tcp'': таймаут соединения. Если в течение указанного времени ни по одному из устройств на порту не поступило данных и истек ''connection_max_fail_cycles'' — разорвать соединение и переподключиться.
* connection_max_fail_cycles — если выбран тип tcp или modbus tcp: количество неудачных циклов опроса.
* connection_max_fail_cycles — если выбран тип ''tcp'' или ''modbus tcp'': количество неудачных циклов опроса.
* enabled — включает или отключает порт. Доступные значения: ''true'', ''false''. По умолчанию — ''true''.
* enabled — включает или отключает порт. Доступные значения: ''true'', ''false''. По умолчанию — ''true''.


==== Устройства, их каналы и параметры (devices, channels и setup) ====
==== Устройства, их каналы и параметры (devices, channels, setup и parameters) ====
Раздел '''devices''' содержит описание устройств, подключенных к порту и имеет структуру:
Раздел '''devices''' содержит описание устройств, подключенных к порту и имеет структуру:
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Строка 239: Строка 270:
</syntaxhighlight>
</syntaxhighlight>


Подробное описание разделов '''device''', '''channels''' и '''setup''' вы найдете [[Wb-mqtt-serial templates | в статье о шаблонах]].
Подробное описание разделов '''device''', '''channels''', '''setup''' и '''parameters''' вы найдете [[Wb-mqtt-serial templates | в статье о шаблонах]].


=== Редактирование через веб-интерфейс ===
=== Редактирование через веб-интерфейс ===
Строка 459: Строка 490:
Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс.
Иногда нужно включить отладочный режим драйвера. Это можно сделать из [[#Управление драйвером | командной строки]] или через веб-интерфейс.


'''ВНИМАНИЕ: ''' при включенной отладке системный журнал будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.
'''ВНИМАНИЕ: ''' при включенной отладке размер системного журнала будет быстро расти, поэтому не забудьте отключить отладку, когда необходимость в ней отпадет.


Включение отладки через веб-интерфейс:
Включение отладки через веб-интерфейс: