Подключение вентустановки по modbus

[quote=“eag, post:18, topic:10186”]
ERROR Illegal data address
ERROR occured!
[/quoteroot@wirenboard-AVV36KSB:~# modbus_client --debug -mrtu -b115200 -podd -s1 /dev/ttyRS485-1 -a1 -t0x03 -r41099
Opening /dev/ttyRS485-1 at 115200 bauds (O, 8, 1)
[01][03][A0][8B][00][01][D6][20]
Waiting for a confirmation…
<01><03><02><38><4D><6B>
SUCCESS: read 1 of elements:
Data: 0x384d
Вот такой должен быть ответ?

Да, это результат успешного считывания регистра

Дальше что?

Вот тут описан алгоритм подключения сторонних устройств. Первые два пункта сделаны, теперь переходите к созданию шаблона: Как подключить Modbus RTU-устройство стороннего производителя к контроллеру Wirenboard? — Wiren Board

Потом этот шаблон нужно будет загрузить на контроллер и сконфигурировать устройство, используя данный шаблон.

Пытаюсь написать шаблон, но никак не пойму где взять эти данные в моем случае?
“device_type”: ,
“name”: ,
“id”: ,
“slave_id”: ,

Первые три - просто придумываются.
А “slave_id” - где он в шаблоне?

Для пример, в шаблоне мы указываем адрес и тип регистра - и формат в котором будет получаться значение. Например - целое, знаковое, с коэффициентом.
Можно посмотреть как сделаны простые шаблоны, например тут: Использование преобразователя частоты T13-400W-12-H с контроллером Wiren Board — Wiren Board
и создать по образцу.
То есть шаблон - просто таблица соответсвия что читать с устройства и как это показать в контроллере.
Вот статья: Драйвер wb-mqtt-serial — Wiren Board

Пример из указанного выше шаблона:

           {
                "name": "Voltage bus",
                "reg_type": "holding",
                "address": 8,
                "scale": 0.1,
                "type": "voltage",
                "readonly": true,
                "enabled": false,
                "group": "debug"
            },

Тут “name”: “Voltage bus”, - это имя параметра в контроллере
“reg_type”: “holding”, - тип регистра
“address”: 8, - адрес регистра
“scale”: 0.1, - значение на которое будет умножено прочитанное из регистра
“readonly”: true, - значение только для чтения
В общем довольно просто.

Написал шаблон
config-intech.json (5.2 КБ) вложил в папку /etc/wb-mqtt-serial.conf.d/templates. Я в правильном направлении? Запустил проверку, получил ответ
root@wirenboard-AVV36KSB:~# systemctl stop wb-mqtt-serial
root@wirenboard-AVV36KSB:~# 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 Sun 2022-02-06 16:07:46 +05; 14s ago
Process: 28097 ExecStart=/usr/bin/wb-mqtt-serial (code=exited, status=0/SUCCESS)
Main PID: 28097 (code=exited, status=0/SUCCESS)

фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 1)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 2)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 13)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 14)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 15)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [mqtt] subscription succeeded (message id 19)
фев 06 16:07:25 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [serial client] device modbus:1 is connected
фев 06 16:07:46 wirenboard-AVV36KSB systemd[1]: Stopping MQTT Driver for serial devices…
фев 06 16:07:46 wirenboard-AVV36KSB wb-mqtt-serial[28097]: INFO: [signal handling] Received signal 15
фев 06 16:07:46 wirenboard-AVV36KSB systemd[1]: Stopped MQTT Driver for serial devices.
Что это значит? Скажите когда и как устройство должно появиться в веб интерфейсе? Какие настройки нужно еще сделать?

В канале у Спрута сказано, что все шаблоны из ВБ будут прокидываться в СХ, это будет относиться и к пользовательским шаблонам?

Остановлени драйвер.

Вот как раз принята команда остановки.

драйвер для того чтобы изменения применились надо перезапустить командой

systemctl restart wb-mqtt-serial

Если шаблон уже создан - то надо создать само устройство, сконфигурировать его экземпляр так: Начальное конфигурирование устройств через веб-интерфейс — Wiren Board

Скажите что не так в шаблоне?
{
“path”: “/dev/ttyRS485-2”,
“baud_rate”: 115200,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 1,
“guard_interval_us”: 1000,
“devices”:
{
“device_type”: “INTECH”,
“name”: “INTECH”,
“id”: “INTECH”,
“enabled”: true,
“setup”: [],
“poll_interval”: 500,
“channels”: [
{
“name”: “Power”,
“type”: “switch”,
“reg_type”: “holding”,
“address”: 41651,
“format”: “s16”,
“scale”: 1,
“offset”: 0
},
{
“name”: “Temperature setpoint”,
“reg_type”: “holding”,
“address”: 41200,
“type”: “range”,
“min”: 15,
“max”: 30
},
{
“name”: “Setpoint of the inflow fan performance”,
“reg_type”: “holding”,
“address”: 41201,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Exhaust fan performance setpoint”,
“reg_type”: “holding”,
“address”: 41202,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Exhaust fan performance setpoint”,
“reg_type”: “holding”,
“address”: 41202,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Error code”,
“reg_type”: “input”,
“address”: 41109,
“type”: “value”,
“format”: “s16”
}
]
}

}

Выдает ошибку
<3>ERROR: [serial config] File: /etc/wb-mqtt-serial.conf.d/templates/config-INTECH.json error: Validation failed.
Error 1
context:
desc: Missing required property ‘device’.
Error 2
context:
desc: Missing required property ‘device_type’.

Вот это - параметры порта

в шаблоне им не место.

отсутствую необходимые.
Я бы советовал взять готовый шаблон, скопировать, переимновав отредактировать.

Предполагаю что шаблон начинаться будет с

{
    "title": "t13-frequency converter",
    "device_type": “INTECH”,
    "device": {
        "name": “INTECH”,
        "id": “INTECH”,
        "poll_interval": 500,
        "response_timeout_ms": 30,
         “channels”: [

Сделал по вашему{
“title”: “INTECH”,
“device_type”: “INTECH”,
“device”: [
{
“name”: “INTECH”,
“id”: “INTECH”,
“poll_interval”: 500,
“response_timeout_ms”: 30,
“channels”: [
{
“name”: “Power”,
“type”: “switch”,
“reg_type”: “holding”,
“address”: 41651,
“format”: “s16”,
“scale”: 1,
“offset”: 0
},
{
“name”: “Temperature setpoint”,
“reg_type”: “holding”,
“address”: 41200,
“type”: “range”,
“min”: 15,
“max”: 30
},
{
“name”: “Setpoint of the inflow fan performance”,
“reg_type”: “holding”,
“address”: 41201,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Exhaust fan performance setpoint”,
“reg_type”: “holding”,
“address”: 41202,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Exhaust fan performance setpoint”,
“reg_type”: “holding”,
“address”: 41202,
“type”: “range”,
“min”: 10,
“max”: 100
},
{
“name”: “Error code”,
“reg_type”: “input”,
“address”: 41109,
“type”: “value”,
“format”: “s16”
}
]
}
]
}
Выдает ошибку
<3>ERROR: [serial config] Failed to parse /etc/wb-mqtt-serial.conf.d/templates/config-INTECH.json
Failed to parse JSON /etc/wb-mqtt-serial.conf.d/templates/config-INTECH.json:* Line 3, Column 20
Syntax error: value, object or array expected.
Что нужно поменять?

А на этот вопрос можете ответить?

Или нужно писать шаблон для СпрутХаба?

Исправил явные ошибки:

{
  "title": "INTECH",
  "device_type": "INTECH",
  "device": {
    "name": "INTECH",
    "id": "INTECH",
    "poll_interval": 500,
    "response_timeout_ms": 30,
    "channels": [
      {
        "name": "Power",
        "type": "switch",
        "reg_type": "holding",
        "address": 41651,
        "format": "s16",
        "scale": 1,
        "offset": 0
        },
        {
        "name": "Temperature setpoint",
        "reg_type": "holding",
        "address": 41200,
        "type": "range",
        "min": 15,
        "max": 30
        },
        {
        "name": "Setpoint of the inflow fan performance",
        "reg_type": "holding",
        "address": 41201,
        "type": "range",
        "min": 10,
        "max": 100
        },
        {
        "name": "Exhaust fan performance setpoint",
        "reg_type": "holding",
        "address": 41202,
        "type": "range",
        "min": 10,
        "max": 100
        },
        {
        "name": "Exhaust fan performance setpoint",
        "reg_type": "holding",
        "address": 41202,
        "type": "range",
        "min": 10,
        "max": 100
        },
        {
        "name": "Error code",
        "reg_type": "input",
        "address": 41109,
        "type": "value",
        "format": "s16"
        }
    ]
  }
}

К пользовательским - не будет. Но тут лучше уточнить у разработчиков СХ/

Спасибо, я так понимаю ВБ начал считывать данные. Попробовал включить/выключить не управляется. Попробовал сменить ставку температуры, тоже не изменяется в вентустановке. Что может быть не так?

А почему “Error code” - красный? Что за ошибка при чтении?

При записи значений вручную - меняется? какой регистр имеется в виду?

Попробуйте снова использовать утилиту modbus_client для записи данных и контроля ответа от установки. Возможно, что установка поддерживает только функцию 0x10 для записи, тогда как драйвер может использовать и функцию 0x06.

Вот ранее писали
В документации установки на странице 24 нашел следующее:

Панель оператора поддерживает следующие команды Modbus: чтение - 03h, запись - 10h
Что тогда нужно поменять в шаблоне?

Не знаю, проверял на ошибки. Ошибок нет. Возможно тип регистра нужно сменить “input” на “discrete”
А в регистре включения/выключения 41651 поменять тип регистра “holding” на “coil”
регистр уставки температуры 41200 “range” на “holding”

Вот попробовал, вроде все нормально, но на вентустановке ничего не происходило
root@wirenboard-AVV36KSB:~# modbus_client --debug -mrtu -b115200 -pnone -s1 /dev/ttyRS485-2 -a1 -t0x10 -r41651 1
Data to write: 0x0001
Opening /dev/ttyRS485-2 at 115200 bauds (N, 8, 1)
[01][10][A2][B3][00][01][02][00][01][FE][59]
Waiting for a confirmation…
<01><10><00><01><96>
SUCCESS: written 1 elements!
root@wirenboard-AVV36KSB:~# modbus_client --debug -mrtu -b115200 -pnone -s1 /dev/ttyRS485-2 -a1 -t0x10 -r41651 0
Data to write: 0x0000
Opening /dev/ttyRS485-2 at 115200 bauds (N, 8, 1)
[01][10][A2][B3][00][01][02][00][00][3F][99]
Waiting for a confirmation…
<01><10><00><01><96>
SUCCESS: written 1 elements!

Но тут вы используете команду записи не 0x6, как в шаблоне а 0x10.
советую holding_multi как в документации