Для шаблона не применяется тип протокола "modbus_io"

Добрый день. Пытаюсь создать собственный шаблон для модуля, подключаемого через блок WB-MIO, но есть проблема с выбором протокола. В списке протоколов для нового устройства, предлагается всего 6 первых из указанных в документации 12, и “modbus_io” среди них нет. Если его вписать в шаблон вручную, то после применения строчка “protocol” пропадет, и применится по умолчанию “modbus”.

В принципе, если учесть смещение регистров для бокового модуля, то один модуль работает и по стандартному modbus. Но больше одного бокового модуля так уже не заработает, потому что у них получится одинаковый адрес, как у блока WB_MIO, и шина сразу повесится.

Хотелось бы, чтобы всё работало через “mosbus_io”, как заявлено в документации.
Как всё-таки сделать шаблон под “modbus_io” устройство? Что сделать, чтобы этот протокол применился?

версия wb-mqtt-serial 1.63.0
версия wb-hwconf-manager 1.37.0
версия в веб-интерфейсе 202011091141

Спасибо

Добрый день! А что за модуль, подключаемый через WB-MIO?

WBIO-DI-WD-14 или WBIO-DO-R10R-4

Для “боковых” модулей предусмотрено расширение “адреса” через “:” так:
https://wirenboard.com/wiki/WB-MIO#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.B2_.D0.BA.D0.BE.D0.BD.D1.82.D1.80.D0.BE.D0.BB.D0.BB.D0.B5.D1.80.D0.B5_Wiren_Board

Такой способ ввода адреса работает только со стандартными шаблонами устройств, выбранными из списка. Если написать под подключаемый модуль свой шаблон, то, поскольку применить протокол “modbus_io” не получается, и используется по умолчанию “modbus”, расширения адреса после “:” игнорируются. Параметры “stide” и “shift” тоже игнорируются, и при обращении к регистрам устройства адрес не смещается, как это должно происходить и происходит при стандартном шаблоне, что я прекрасно вижу на осциллограмме команд по RS485. При добавлении в систему одновременно устройств с адресами “124:1” и “124:2” с самодельными шаблонами (где не применился “modbus_io”) обмен по данному порту полностью прекращается, в том числе и со всеми остальными устройствами. Что опять же говорит о том, что расширение адреса не работает.
Хотелось бы получить ответ на мои вопросы - а именно почему не применяется протокол “modbus_io” и как сконфигурировать такое устройство корректно - а не комментарий на мою попытку обойти эту проблему.

Очевидно, что ошибка где-то в вашем кастомном шаблоне.
Пожалуйста приложите его сюда.

Ещё нужна версия wb-mqtt-serial:

dpkg -s wb-mqtt-serial

и вывод из лога после перезапуска wb-mqtt-serial

Ну и ещё: протокол указывается в шаблоне. Его не нужно выбирать в интерфейсе при добавлении устройства.

Шаблон, который я ввожу через веб-интерфейс, выглядит вот так:

Код

{
“slave_id”: “124:1”,
“name”: “MOTOR_2”,
“enabled”: true,
“protocol”: “modbus_io”,
“stride”: 1000,
“shift”: 500,
“channels”: [
{
“name”: “EXT2_DIR1”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “0”
},
{
“name”: “EXT2_ON1”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “1”
},
{
“name”: “EXT2_DIR2”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “2”
},
{
“name”: “EXT2_ON2”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “3”
},
{
“name”: “EXT2_DIR3”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “4”
},
{
“name”: “EXT2_ON3”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “5”
},
{
“name”: “EXT2_DIR4”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “6”
},
{
“name”: “EXT2_ON4”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “7”
}
],
“poll_interval”: 1000,
“delay_ms”: 10,
“id”: “wb-motor_2”,
“setup”: [
{
“address”: “10000”,
“title”: “IODIR”,
“value”: “0x0000”
},
{
“address”: “10001”,
“title”: “IPOL”,
“value”: “0x0000”
},
{
“address”: “10002”,
“title”: “GPINTEN”,
“value”: “0x0000”
},
{
“address”: “10003”,
“title”: “DEFVAL”,
“value”: “0x0000”
},
{
“address”: “10004”,
“title”: “INTCON”,
“value”: “0x0000”
},
{
“address”: “10005”,
“title”: “IOCON”,
“value”: “0x4444”
},
{
“address”: “9999”,
“title”: “FLAG”,
“value”: “1”
}
]
}

Но после сохранения он меняется на такой:

Код

{
“slave_id”: “124:1”,
“name”: “MOTOR_2”,
“enabled”: true,
“channels”: [
{
“name”: “EXT2_DIR1”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “0”
},
{
“name”: “EXT2_ON1”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “1”
},
{
“name”: “EXT2_DIR2”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “2”
},
{
“name”: “EXT2_ON2”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “3”
},
{
“name”: “EXT2_DIR3”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “4”
},
{
“name”: “EXT2_ON3”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “5”
},
{
“name”: “EXT2_DIR4”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “6”
},
{
“name”: “EXT2_ON4”,
“type”: “switch”,
“reg_type”: “coil”,
“address”: “7”
}
],
“poll_interval”: 1000,
“delay_ms”: 10,
“id”: “wb-motor_2”,
“setup”: [
{
“address”: “10000”,
“title”: “IODIR”,
“value”: “0x0000”
},
{
“address”: “10001”,
“title”: “IPOL”,
“value”: “0x0000”
},
{
“address”: “10002”,
“title”: “GPINTEN”,
“value”: “0x0000”
},
{
“address”: “10003”,
“title”: “DEFVAL”,
“value”: “0x0000”
},
{
“address”: “10004”,
“title”: “INTCON”,
“value”: “0x0000”
},
{
“address”: “10005”,
“title”: “IOCON”,
“value”: “0x4444”
},
{
“address”: “9999”,
“title”: “FLAG”,
“value”: “1”
}
],
“stride”: 1000,
“shift”: 500
}

Информация о протоколе куда-то пропадает, что я и пытаюсь донести с самого начала
Вывод из консоли вот такой:

Код

root@wirenboard-ANWOD5X3:~# dpkg -s wb-mqtt-serial
Package: wb-mqtt-serial
Status: install ok installed
Priority: optional
Section: misc
Installed-Size: 1487
Maintainer: Evgeny Boger boger@contactless.ru
Architecture: armhf
Version: 1.63.0
Replaces: wb-homa-modbus (<< 1.14.1)
Depends: libc6 (>= 2.4), libgcc1 (>= 1:3.5), libjsoncpp1 (>= 1.7.4), libmosquitto1 (>= 1.0), libmosquittopp1 (>= 1.0), libstdc++6 (>= 6), libwbmqtt0 (>= 1.7), bsdutils, wb-utils (>= 2.0)
Breaks: wb-homa-modbus (<< 1.14.1), wb-mqtt-confed (<< 1.0.2), wb-mqtt-homeui (<< 1.7)
Conffiles:
/etc/init.d/wb-mqtt-serial 1f6938ea476ac51c4b845327d5e40f03
/etc/wb-configs.d/11wb-mqtt-serial 5325e375bc486e31384ed908b8ceae0e
/etc/wb-mqtt-serial.conf.sample c8c1adbf630e6fd7ec871b1b5c4a5e0f
Description: Wiren Board Smart Home MQTT serial protocol driver.

Так… Вы вводите шаблон через веб-интерфейс?
Это немного не так работает. Создайте файл с уникальным именем в

/usr/share/wb-mqtt-serial/templates/

Можно как образец использовать /usr/share/wb-mqtt-serial/templates/config-wbio-di-wd-14.json
Инструкция по написанию шаблонов:
https://wirenboard.com/wiki/Wb-mqtt-serial_templates#.D0.9E.D0.BF.D0.B8.D1.81.D0.B0.D0.BD.D0.B8.D0.B5

Или подключаете как “устройство без шаблона”?
В таком случае - буду воспроизводить и проверять.

Да, я пытался через веб-интерфейс создать устройство без шаблона, все описанные проблемы относятся именно к этому способу. Но у меня интерфейс конфигурации устройства выглядит не совсем так, как в статье, и шаблона “Custom device” там в списке нет. Я выбираю пустую строчку, и параметр “device” в описании устройства пропадает.


Если написать целиком файл шаблона типа девайса и сохранить в файловой системе, то всё работает за исключением того, что параметр “poll_interval” для всего девайса не применяется, вместо этого используется значение по умолчанию. Приходится для каждого параметра задавать его отдельно, даже если он везде одинаковый.

Обновите контроллер пожалуйста.

apt update && apt upgrade -y

Сейчас актуальный

dpkg -s wb-mqtt-serial |grep Version

2.7.1