|
|
Строка 56: |
Строка 56: |
| Для каждого порта указываются настройки: скорость, четность и т.п., а также протокол: Modbus, Uniel и т.п. Для каждого устройства обязательно указывается его уникальный адрес на шине — <code>slave_id</code>, остальные параметры указываются по необходимости. | | Для каждого порта указываются настройки: скорость, четность и т.п., а также протокол: Modbus, Uniel и т.п. Для каждого устройства обязательно указывается его уникальный адрес на шине — <code>slave_id</code>, остальные параметры указываются по необходимости. |
|
| |
|
| Доступные параметры, значения по умолчанию и варианты значений перечислены в примере файла <code>/etc/wb-mqtt-serial.conf</code>:
| | Структура файла: |
| <syntaxhighlight lang="javascript"> | | <syntaxhighlight lang="javascript"> |
| { | | { |
| // опция debug включает или выключает отладочную печать.
| | // основные настройки драйвера |
| // Опция -d командной строки wb-mqtt-serial также
| | ... |
| // включает отладочную печать и имеет приоритет над
| |
| // данной опцией.
| |
| "debug": false,
| |
|
| |
|
| // Задаёт интервал в секундах, в течение которого неизменяющиеся значения не будут публиковаться в MQTT.
| | // порты |
| // По истечении интервала полученное значение будет опубликовано, даже если оно не изменилось.
| |
| // Если установлен 0, каждое полученное от устройств значение будет опубликовано в MQTT.
| |
| // Если установлено отрицательное значение, то значения будут публиковаться только при изменении. Это поведение по умолчанию.
| |
| "max_unchanged_interval": -1,
| |
| | |
| // список портов
| |
| "ports": [ | | "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" : [ | | "devices" : [ |
| { | | { |
| // тип устройства, в системе должен быть корректный шаблон для этого типа
| | // описание первого устройства на канале |
| "device_type": "MSU34+TLP",
| | "name": "Device 1", |
| | | ... |
| // отображаемое имя устройства. Публикуется как
| |
| // .../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": [ | | "channels": [ |
| { | | { |
| // имя канала. topic'и, соответствующие каналу,
| | //описание канала 1 |
| // публикуются как
| |
| // /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",
| | //описание канала 2 |
| "reg_type" : "input",
| |
| "address" : 2,
| |
| "type": "text",
| |
| "scale": 0.075
| |
| }, | | }, |
| {
| | ... |
| "name" : "Temp 2",
| |
| "reg_type" : "input",
| |
| "address" : 3,
| |
| "type": "temperature",
| |
| "format": "s8"
| |
| }
| |
| ] | | ] |
| }, | | }, |
| { | | { |
| // ещё одно устройство на канале | | // описание второго устройства на канале |
| "name": "DRB88", | | "name": "Device 2", |
| "id": "drb88", | | ... |
| "enabled": true,
| |
| "slave_id": 22,
| |
|
| |
|
| // секция инициализации | | // секция инициализации второго устройства |
| "setup": [ | | "setup": [ |
| { | | { |
| // название регистра (для отладки) | | // описание регистра настройки |
| // Выводится в случае включённой отладочной печати.
| |
| "title": "Input 0 type",
| |
| // адрес holding-регистра
| |
| "address": 1,
| |
| // значение для записи
| |
| "value": 1
| |
| }, | | }, |
| {
| | ... |
| "title": "Input 0 module", | |
| "address": 3,
| |
| "value": 3 // was: 11
| |
| }
| |
| ], | | ], |
| | // каналы второго устройства |
| "channels": [ | | "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
| |
| }, | | }, |
| // ...
| | ... |
| ] | | ] |
| } | | } |
Строка 387: |
Строка 109: |
| }, | | }, |
| { | | { |
| // ещё один порт со своим набором устройств | | // ещё один порт со своим набором устройств |
| "path" : "/dev/ttyNSC1",
| |
| "baud_rate": 9600,
| |
| "parity": "N",
| |
| "data_bits": 8,
| |
| "stop_bits": 1,
| |
| "poll_interval": 100,
| |
| "enabled": true,
| |
| "devices" : [ | | "devices" : [ |
| { | | { |
| "name": "tM-P3R3", | | ... |
| "id": "tmp3r3",
| | |
| "enabled": true,
| |
| "slave_id": 1,
| |
| "channels": [ | | "channels": [ |
| { | | ... |
| "name" : "Relay 0",
| |
| "reg_type" : "coil",
| |
| "address" : 0,
| |
| "type": "switch"
| |
| },
| |
| // ...
| |
| ] | | ] |
| }, | | }, |
| // ... | | ... |
| ] | | ] |
| } | | } |
Строка 417: |
Строка 124: |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| | |
| | ==== Основные настройки драйвера ==== |
| | * 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) ==== |
| | Раздел devices содержит описание устройств, подключенных к порту и имеет структуру: |
| | |
| | <syntaxhighlight lang="javascript"> |
| | "devices" : |
| | [ |
| | { |
| | // описание устройства |
| | ... |
| | "channels" : |
| | [ |
| | // описание каналов |
| | ... |
| | ] |
| | }, |
| | { |
| | // описание второго устройства |
| | ... |
| | }, |
| | ... |
| | ] |
| | </syntaxhighlight> |
| | |
| | Так как для описания устройств мы рекомендуем использовать шаблоны, то подробное описание разделов '''devices''', '''channels''' и '''setup''' вы найдете [[Wb-mqtt-serial templates | в статье о шаблонах]]. |
|
| |
|
| === Редактирование через веб-интерфейс === | | === Редактирование через веб-интерфейс === |
Строка 661: |
Строка 421: |
|
| |
|
| Подробнее о возможностях утилиты <code>journalctl</code> можете почитать в [https://habr.com/ru/company/ruvds/blog/533918/ статье на Хабре]. | | Подробнее о возможностях утилиты <code>journalctl</code> можете почитать в [https://habr.com/ru/company/ruvds/blog/533918/ статье на Хабре]. |
| | |
| | == Полезные ссылки == |
| | * [[Wb-mqtt-serial templates| Описание шаблонов и примеры]] |
| | * [https://github.com/wirenboard/wb-mqtt-serial/blob/master/README.md Описание драйвера в репозитории на Github] |