|
|
(не показано 76 промежуточных версий 7 участников) |
Строка 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]] устройствами в контроллере Wiren Board. Он обеспечивает работу с устройствами через систему [[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]] |
|
| | === Общая информация === |
| Полное описание драйвера смотрите [https://github.com/contactless/wb-mqtt-serial в репозитории на Github].
| | ''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 | Начальное конфигурирование устройств через веб-интерфейс]]. |
|
| |
|
| Поддерживается работа с:
| | Wb-mqtt-serial использует систему JSON-шаблонов, которые описывают подключённые устройства: тип протокола, номера регистров, название параметров и контролов в веб-интерфейсе контроллера. В стандартной поставке есть шаблоны для всех устройств 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]. Полный список поддерживаемых устройств можно посмотреть в таблице [[Поддерживаемые устройства#Протестированные устройства сторонних производителей |Протестированные устройства сторонних производителей]].
| |
|
| |
|
| === Поддержка устройств различных протоколов на одной шине ===
| | Если ваше устройство работает по поддерживаемому драйвером протоколу, но в стандартной поставке под него нет шаблона — можете написать шаблон сами: [[Connecting_Third_Party_Devices_to_Wiren_Board | Подключение стороннего Modbus-устройства к контроллеру Wiren Board]]. |
|
| |
|
| Использовать устройства с разными протоколами на одной шине возможно, но необходимо учитывать особенности конкретных протоколов.
| | Файлы и папки: |
| | * <code>/etc/wb-mqtt-serial.conf</code> — файл настроек драйвера, редактировать вручную не рекомендуем; |
| | * <code>/usr/share/wb-mqtt-serial/templates</code> — папка с предустановленными шаблонами; |
| | * <code>/etc/wb-mqtt-serial.conf.d/templates</code> — папка для пользовательских шаблонов, которые имеют приоритет над предустановленными. |
|
| |
|
| Например, фреймы устройств Unitel начинаются с байта <code>0xff</code>, а устройств ИВТМ — с байта <code>0x24</code>. В случае с протоколами Modbus, Меркурий 230 и Милур первым байтом фрейма является идентификатор ''slave'', поэтому при совмещении таких устройств нужно внимательно подходить к выбору ''slave id''.
| | Если вы добавили свой шаблон или изменили существующий, подождите 20 секунд, а потом перезагрузите страницу конфигуратора в веб-интерфейсе клавишами <kbd>Ctrl</kbd>+<kbd>F5</kbd> или перезапустите сервис: <syntaxhighlight lang="bash>systemctl restart wb-mqtt-confed</syntaxhighlight> |
|
| |
|
| У устройств Милур slave id по умолчанию равен <code>0xff</code>, что приведет к конфликту с устройствами Unitel. Также устройства Милур требуют дополнительных задержек при опросе и при использовании на одной шине с другими устройствами могут снизить скорость опроса.
| | О том, как получить доступ к файлам и папкам, читайте в статье [[View controller files from your computer|Просмотр файлов контроллера с компьютера]]. |
|
| |
|
| Иногда устройства, работающие на разных протоколах могут конфликтовать между собой: устройства с поддержкой протокола A-BUS не могут работать на одной шине с устройствами Unitel.
| | Полное описание драйвера, список поддерживаемых протоколов и примеры шаблонов, смотрите '''[https://github.com/contactless/wb-mqtt-serial в репозитории на Github]'''. |
|
| |
|
| Рекомендуем придерживаться проверенной формулы комбинации протоколов на одной шине: <code>Modbus + Милур (slave_id != 0xff) + Uniel</code>. Учитывайте, что сторонние производители устройств могут вносить недокументированные изменения в протокол, поэтому перед покупкой устройства желательно убедиться в работоспособности выбранного решения.
| | === Особенности === |
| | При работе с Modbus-устройствами, драйвер оптимизирует запросы к устройствам: считывает несколько регистров подряд, не выдерживает некоторые задержки, рекомендованные стандартом. |
|
| |
|
| === Доработка драйвера для поддержки новых устройств ===
| | Поэтому при написании шаблона для сторонних Modbus-устройств, нужно указать параметр ''guard_interval_us'', который рассчитывается по формуле: |
| | <syntaxhighlight lang="js"> |
| | guard_interval_us = (3.5*11*10^6)/(скорость в бит/с) |
| | </syntaxhighlight> |
| | Так же этот параметр можно установить через веб-интерфейс: |
| | * Guard interval (us) — для порта. |
| | * Additional delay before each writing to port (us) — для устройства. |
|
| |
|
| Вы можете самостоятельно добавить поддержку новых modbus-устройств при помощи [[Драйвер wb-mqtt-serial:Примеры написания шаблонов|шаблонов]].
| | Если при чтении регистра устройства возникла ошибка, то соответствующий контрол в веб-интерфейсе будет окрашен в красный цвет. Аналогично с устройством — если оно давно не отвечает, то все его контролы будут окрашены красным. |
|
| |
|
| Если у вас возникли проблемы с составлением шаблона или выбранное вами устройство имеет свой протокол обмена данными — [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 # запустить в отладочном режиме с указанием пути к конфигурационному файлу |
| </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>, остальные параметры указываются по необходимости.
| |
| | |
| Доступные параметры, значения по умолчанию и варианты значений перечислены в примере файла <code>/etc/wb-mqtt-serial.conf</code>:
| |
| <syntaxhighlight lang="javascript">
| |
| {
| |
| // опция debug включает или выключает отладочную печать.
| |
| // Опция -d командной строки wb-mqtt-serial также
| |
| // включает отладочную печать и имеет приоритет над
| |
| // данной опцией.
| |
| "debug": false,
| |
| | |
| // Задаёт интервал в секундах, в течение которого неизменяющиеся значения не будут публиковаться в MQTT.
| |
| // По истечении интервала полученное значение будет опубликовано, даже если оно не изменилось.
| |
| // Если установлен 0, каждое полученное от устройств значение будет опубликовано в MQTT.
| |
| // Если установлено отрицательное значение, то значения будут публиковаться только при изменении. Это поведение по умолчанию.
| |
| "max_unchanged_interval": -1,
| |
| | |
| // список портов
| |
| "ports": [
| |
| {
| |
| // тип порта:
| |
| // - "serial": последовательные порты RS-485 или RS-232. Это значение выбирается по умолчанию.
| |
| // - "tcp": serial over TCP/IP. Пакеты, формируемые для работы с последовательными портами, передаются без изменений через TCP/IP.
| |
| // - "modbus tcp": передача по MODBUS TCP. В секции устройств с таким типом порта могут использоваться только те, что поддерживают MODBUS.
| |
| "port_type": "serial",
| |
| | |
| // устройство, соответствующее порту RS-485 (если выбран тип порта serial)
| |
| "path" : "/dev/ttyNSC0",
| |
| | |
| // IP адрес или имя хоста (если выбран тип порта TCP или MODBUS TCP)
| |
| "address": "127.0.0.1",
| |
| | |
| // TCP порт (если выбран тип порта TCP или MODBUS TCP)
| |
| "port": 3000,
| |
| | |
| // скорость порта
| |
| "baud_rate": 9600,
| |
| | |
| // паритет - N, O или E (по умолчанию - N)
| |
| "parity": "N",
| |
| | |
| // количество бит данных (по умолчанию - 8)
| |
| "data_bits": 8,
| |
| | |
| // количество стоп-бит
| |
| "stop_bits": 2,
| |
| | |
| // Минимальный интервал опроса каждого регистра
| |
| // по-умолчанию для устройств, подключенных к порту,
| |
| // в миллисекундах
| |
| "poll_interval": 10,
| |
| | |
| // Максимальное время ответа устройств, подключенных к этому порту, в миллисекундах
| |
| // Если не установлено, то принимается равным 500 мс
| |
| // Этот параметр задан в шаблонах описания устройств, переопределять его можно только в случае некорректной работы с устройствами
| |
| "response_timeout_ms": 100,
| |
| | |
| // Дополнительная задержка перед каждой отправкой данных в порт в микросекундах
| |
| "guard_interval_us": 1000,
| |
| | |
| // Таймаут соединения (только для TCP или MODBUS TCP порта).
| |
| // Если в течение указанного времени ни по одному устройству на порту не поступило данных (а также истек "connection_max_fail_cycles"),
| |
| // TCP соединение будет разорвано и произойдет попытка переподключения
| |
| "connection_timeout_ms": 5000,
| |
| | |
| // Количество неудачных циклов опроса (только для TCP или MODBUS TCP порта)
| |
| // Если в течение указанного количества циклов опроса ни по одному устройству на порту не поступило данных (а также истек "connection_timeout_ms"),
| |
| // TCP соединение будет разорвано и произойдет попытка переподключения
| |
| "connection_max_fail_cycles": 2,
| |
| | |
| // включить/выключить порт. В случае задания
| |
| // "enabled": false опрос порта и запись значений
| |
| // каналов в устройства на данном порту не происходит.
| |
| // По умолчанию - true.
| |
| "enabled": true,
| |
| | |
| // список устройств на данном порту
| |
| "devices" : [
| |
| {
| |
| // тип устройства, в системе должен быть корректный шаблон для этого типа
| |
| "device_type": "MSU34+TLP",
| |
| | |
| // отображаемое имя устройства. Публикуется как
| |
| // .../meta/name в MQTT
| |
| "name": "MSU34+TLP",
| |
| | |
| // уникальный идентификатор устройства в MQTT.
| |
| // каждое элемент в devices должен иметь уникальный id
| |
| // topic'и, относящиеся в MQTT к данному устройству,
| |
| // имеют общий префикс /devices/<идентификатор топика>/...
| |
| "id": "msu34tlp",
| |
| | |
| // идентификатор устройства.
| |
| // Если не указан или указана пустая строка, то используются широковещательные запросы
| |
| "slave_id": 2,
| |
| | |
| // включить/выключить устройство. В случае задания
| |
| // "enabled": false опрос устройства и запись значений
| |
| // его каналов не происходит. По умолчанию - true.
| |
| "enabled": true,
| |
| | |
| // протокол передачи устройства, если не задан, то используется "modbus"
| |
| "protocol": "modbus",
| |
| | |
| // максимальное количество считываемых "пустых" регистров.
| |
| // Драйвер в целях оптимизации может считывать регистры
| |
| // "пачкой". При этом, если какие-либо регистры не
| |
| // были включены в конфигурацию, но в целях ускорения
| |
| // опроса (чтобы не разрывать "пачку") их всё-таки
| |
| // можно считывать, можно указать значение max_hole_size
| |
| // больше 0. В данный момент поддерживается только
| |
| // устройствами Modbus.
| |
| "max_reg_hole": 10,
| |
| | |
| // то же самое, что max_reg_hole, но для однобитовых
| |
| // регистров (coils и discrete inputs в Modbus). В данный
| |
| // момент поддерживается только устройствами Modbus.
| |
| "max_bit_hole": 80,
| |
| | |
| // максимальное количество регистров в одной пакетной операции
| |
| // чтения. В данный момент поддерживается только устройствами
| |
| // Modbus.
| |
| "max_read_registers": 10,
| |
| | |
| // Минимальный интервал опроса регистров данного устройства в миллисекундах
| |
| "poll_interval": 10,
| |
| | |
| // Максимальное время ответа устройства в миллисекундах.
| |
| // Если не установлено, то принимается равным 500 мс.
| |
| // Если значение этого параметра, установленное для порта, больше указанного здесь, используется значение порта.
| |
| // Этот параметр задан в шаблонах описания устройств, переопределять его можно только в случае некорректной работы с устройством.
| |
| "response_timeout_ms": 100,
| |
| | |
| // Минимально необходимая задержка между посылками в миллисекундах.
| |
| // Используется в некоторых протоколах для определения границ посылок.
| |
| // Этот параметр задан в шаблонах описания устройств, переопределять его можно только в случае некорректной работы с устройством.
| |
| // По умолчанию 20 мс
| |
| "frame_timeout_ms": 100,
| |
| | |
| // Дополнительная задержка перед каждой отправкой данных в порт в микросекундах.
| |
| // Если не установлено, то используется значение, заданное в соответствующем параметре порта.
| |
| "guard_interval_us": 0,
| |
| | |
| // (При возникновении ошибки) Интервал после последнего успешного обмена данными с устройством,
| |
| // по истечении которого (а также "device_max_fail_cycles") устройство будет помечено отключенным и будет опрашиваться в ограниченном режиме
| |
| "device_timeout_ms": 3000,
| |
| | |
| // Количество неудачных циклов опроса устройства
| |
| // Если в течение указанного количества полных циклов опроса ни по одному регистру устройства не поступило данных (а также истек "device_timeout_ms"),
| |
| // устройство будет помечено отключенным и будет опрашиваться в ограниченном режиме
| |
| "device_max_fail_cycles": 2,
| |
| | |
| // пароль для доступа к устройству, массив байт
| |
| "password": [1, 2, 3],
| |
| | |
| // уровень доступа при опросе устройства,
| |
| // используется для обмена с счётчиками электроэнергии
| |
| "access_level": 1,
| |
| | |
| // список каналов устройства
| |
| "channels": [
| |
| {
| |
| // имя канала. topic'и, соответствующие каналу,
| |
| // публикуются как
| |
| // /devices/<идентификатор канала>/controls/<имя канала>
| |
| "name" : "Temp 1",
| |
| | |
| // тип регистра
| |
| // возможные значения для Modbus:
| |
| // "coil" - 1 бит, чтение/запись
| |
| // "discrete" - 1 бит, только чтение
| |
| // "holding" - 16 бит, чтение/запись, код функции на запись выбирается автоматически, в зависимости от размера
| |
| // "input" - 16 бит, только чтение
| |
| // "holding_single" - то же что и holding однако регистры записываются всегда по одному, кодом 06
| |
| // "holding_multi" - то же что и holding однако регистры записываются всегда кодом 16
| |
| "reg_type" : "input",
| |
| | |
| // адрес регистра
| |
| "address" : 0,
| |
| | |
| // тип элемента управления, например,
| |
| // "temperature", "text", "switch"
| |
| // Тип wo-switch задаёт вариант switch,
| |
| // для которого не производится опрос регистра -
| |
| // для таких каналов возможна только запись.
| |
| "type": "temperature",
| |
| | |
| // формат канала. Задаётся для регистров типа
| |
| // "holding" и "input". Возможные значения:
| |
| // "u16" - беззнаковое 16-битное целое
| |
| // (используется по умолчанию)
| |
| // "s16" - знаковое 16-битное целое
| |
| // "u8" - беззнаковое 8-битное целое
| |
| // "s8" - знаковое 8-битное целое
| |
| // "u32" - беззнаковое 32-битное целое (big-endian).
| |
| // (занимает 2 регистра, начиная с указанного)
| |
| // "s32" - знаковое 32-битное целое (big-endian).
| |
| // (занимает 2 регистра, начиная с указанного)
| |
| // "s64" - знаковое 64-битное целое (big-endian).
| |
| // (занимает 4 регистра, начиная с указанного)
| |
| // "u64" - беззнаковое 64-битное целое (big-endian).
| |
| // (занимает 4 регистра, начиная с указанного)
| |
| //
| |
| // "float" - число с плаваяющей точкой IEEE 754. 32 bit. (big-endian).
| |
| // (занимает 2 регистра, начиная с указанного)
| |
| // "double" - число с плаваяющей точкой двойной точности IEEE 754. 64 bit. (big-endian).
| |
| // (занимает 4 регистра, начиная с указанного)
| |
| // "char8" - однобайтовый символ в кодировке ASCII
| |
| | |
| "format": "s8",
| |
| | |
| // Порядок 16-битных слов для каналов, имеющих размер больше 16 бит.
| |
| // Возможные значения:
| |
| // "big_endian" (по-умолчанию): [0xAA 0xBB] [0xCC 0xDD] => 0xAABBCCDD
| |
| // "little_endian": [0xAA 0xBB] [0xCC 0xDD] => 0xCCDDAABB
| |
| "word_order" : "big_endian",
| |
| | |
| // для регистров типа coil и discrete
| |
| // с типом отображения switch/wo-swich
| |
| // также допускается задание on_value -
| |
| // числового значения, соответствующего
| |
| // состоянию "on" (см. ниже)
| |
| | |
| // минимальный интервал опроса данного регистра в миллисекундах
| |
| "poll_interval": 10,
| |
| | |
| // значение, получаемое при последовательном чтении диапазона регистров, если устройство не поддерживает запрашиваемый регистр.
| |
| // Этот параметр используется некоторыми протоколами, чтобы определить доступность регистров устройства.
| |
| "unsupported_value": "0xFFFE",
| |
| | |
| // максимальное значение регистра, используется для построения интерфейса онлайн-конфигуратора
| |
| "max": 100,
| |
| | |
| // коэффициент, на который умножается значение регистра перед публикацией в MQTT
| |
| "scale": 0.5,
| |
| | |
| // значение, которое прибавляется к значению регистра перед публикацией в MQTT
| |
| "offset": -12.5,
| |
| | |
| // порядок, до которого будет округляться значение после всех преобразований
| |
| "round_to": 0.1,
| |
| | |
| // доступен ли канал для записи через MQTT
| |
| "readonly": true,
| |
| | |
| // значение, которое будет записано в регистр, при записи единицы в on-топик в MQTT
| |
| "on_value": "0xFF",
| |
| | |
| // значение регистра, полученное от устройства, которое обозначает ошибку
| |
| "error_value": "0xAA"
| |
| },
| |
| {
| |
| // Ещё один канал
| |
| "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"
| |
| }
| |
| ]
| |
| },
| |
| {
| |
| // ещё одно устройство на канале
| |
| "name": "DRB88",
| |
| "id": "drb88",
| |
| "enabled": true,
| |
| "slave_id": 22,
| |
| | |
| // секция инициализации
| |
| "setup": [
| |
| {
| |
| // название регистра (для отладки)
| |
| // Выводится в случае включённой отладочной печати.
| |
| "title": "Input 0 type",
| |
| // адрес holding-регистра
| |
| "address": 1,
| |
| // значение для записи
| |
| "value": 1
| |
| },
| |
| {
| |
| "title": "Input 0 module",
| |
| "address": 3,
| |
| "value": 3 // was: 11
| |
| }
| |
| ],
| |
| "channels": [
| |
| {
| |
| "name" : "Relay 1",
| |
| "reg_type" : "coil",
| |
| "address" : 0,
| |
| "type": "switch"
| |
| },
| |
| {
| |
| "name" : "Relay 2",
| |
| "reg_type" : "coil",
| |
| "address" : 1,
| |
| "type": "switch"
| |
| },
| |
| // ...
| |
| {
| |
| "name" : "Input 2",
| |
| "reg_type" : "input",
| |
| "address" : 1,
| |
| "type": "switch",
| |
| // значение, соответствующее состоянию "on"
| |
| "on_value": 101
| |
| },
| |
| {
| |
| "name" : "Input 3",
| |
| "reg_type" : "input",
| |
| "address" : 2,
| |
| "type": "switch",
| |
| "on_value": 101
| |
| },
| |
| // ...
| |
| ]
| |
| }
| |
| ]
| |
| },
| |
| {
| |
| // ещё один порт со своим набором устройств
| |
| "path" : "/dev/ttyNSC1",
| |
| "baud_rate": 9600,
| |
| "parity": "N",
| |
| "data_bits": 8,
| |
| "stop_bits": 1,
| |
| "poll_interval": 100,
| |
| "enabled": true,
| |
| "devices" : [
| |
| {
| |
| "name": "tM-P3R3",
| |
| "id": "tmp3r3",
| |
| "enabled": true,
| |
| "slave_id": 1,
| |
| "channels": [
| |
| {
| |
| "name" : "Relay 0",
| |
| "reg_type" : "coil",
| |
| "address" : 0,
| |
| "type": "switch"
| |
| },
| |
| // ...
| |
| ]
| |
| },
| |
| // ...
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| === Редактирование через веб-интерфейс === | | == Диагностика неполадок == |
| Мы рекомендуем изменять конфигурацию драйвера через веб-интерфейс. Процедура настройки подробно описана в статье [[RS-485:Настройка через веб-интерфейс|RS-485:Настройка через веб-интерфейс]].
| | {{SupportedSinceRelease |
| | | | release = wb-2407 |
| === Внесение изменений вручную ===
| | |content= |
| Будьте внимательны при редактировании файла конфигурации вручную — в отличие от редактирования через веб-интерфейс, вы можете допустить синтаксическую ошибку и драйвер не запустится.
| | Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину в журнале wb-mqtt-serial двумя способами: |
| | | * [[SSH | Подключитесь к контроллеру]], выполните команду <code>systemctl status wb-mqtt-serial</code>, вывод будет содержать сообщения о ошибке. В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции: |
| # Ознакомьтесь с инструкцией [[Просмотр файлов контроллера с компьютера|Просмотр файлов контроллера с компьютера]] и выберите удобный для вас способ.
| | <syntaxhighlight lang="console"> |
| #Впишите конфигурацию для портов и подключенных устройств в файл. Смотрите [[#Примеры файла конфигурации | примеры]].
| | # systemctl status wb-mqtt-serial |
| #Чтобы описанные в файле устройства появились в веб-интерфейсе, перезагрузите контроллер или выполните команду:
| |
| #: <syntaxhighlight lang="bash">
| |
| service wb-mqtt-serial restart
| |
| </syntaxhighlight>
| |
| | |
| === Поиск ошибок ===
| |
| Если возникли проблемы с запуском драйвера, например, новое устройство не появилось, то можно узнать причину: выполните команду <code>systemctl status wb-mqtt-serial</code> и в последних двух строчках ответа будет подсказка. | |
| | |
| В примере файл конфигурации содержит синтаксическую ошибку во второй строке на 14 позиции: | |
| <syntaxhighlight lang="bash"> | |
| ~# 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) |
Строка 448: |
Строка 71: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| == Примеры файла конфигурации ==
| |
|
| |
|
| В примерах мы описывали устройства в самом файле конфигурации, но при их большом количестве описание устройств можно вынести в [[Драйвер wb-mqtt-serial:Примеры написания шаблонов | шаблоны]].
| | * Откройте в [[Wiren_Board_Web_Interface|веб-интерфейс контроллера]], перейдите '''Настройки → Системный журнал''' в пункте '''Выберите сервис — wb-mqtt-serial.service''' и нажмите кнопку '''загрузить'''. В примере файл конфигурации содержит два дублирующих друг друга параметра: |
| | | [[Файл:Wb-mqtt-serial error.png|600px|thumb|centre| Журнал ошибок в веб-интерфейсе]] |
| === Подключено одно устройство ===
| | }} |
| | |
| Выведем среднеквадратичное значение напряжения на фазе L1 со счетчика [[WB-MAP3E Power Meter | WB-MAP3E fw2]]. В примере счетчик подключен к serial-порту <code>/dev/ttyRS485-1</code>, работает по протоколу [[Протокол Modbus | Modbus]] и имеет адрес <code>142</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"
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }
| |
| ]
| |
| }</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>
| |
|
| |
|
| == Включение отладки== | | == Включение отладки== |
Строка 636: |
Строка 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]]. |
|
| |
|
| Пример вывода команды: | | Пример вывода команды: |
Строка 660: |
Строка 106: |
| </syntaxhighlight> | | </syntaxhighlight> |
|
| |
|
| Подробнее о возможностях утилиты <code>journalctl</code> можете почитать в [https://habr.com/ru/company/ruvds/blog/533918/ статье на Хабре].
| | == Полезные ссылки == |
| | * [[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]] |