Подключение нового устройства rs485 по новому шаблону

Добрый день.
Являюсь новичком в теме с wb. У меня устройство wirenboard 7.
Хочу подключить сторонний датчик(не поддержанный штатно), работающий по протоколу modbus через rs485.
Есть мануал датчика с описанием команд(зачитать x03, записать x06). Настройки rs485 для работы с датчиком: 9600 no parity 8bits 1 stop bit.
Выключаю сервис wb-mqtt-serial
Через modbus_client опрашиваю датчик для теста:
modbus_client -mrtu /dev/ttyRS485-2 --debug -a241 -t3 -s1 -pnone -r4
Приходит результат измерений, который ±совпадает с реальным значением.
Включаю сервис wb-mqtt-serial
Создаю шаблон нового типа устройств, который сохраняю в /etc/wb-mqtt-serial.conf.d/templates:

{
	"device_type": "QDX50APT"
	"group": "g-custom",
	"title": "Pressure transmitter",
	"device": {
		"name": "QDX50APT",
		"id": "QDX50APT",
		"channels": [
			{
				"name": "pressureValue",
				"reg_type": "input",
				"address": "0x004",
				"type": "text"
			}
		]
	}
}

В интерфейсе wirenboard захожу в настройки драйвера serial устройств и задаю rs485-2 с параметрами, которые описал выше, помечаю его как активный. Добавляю новое устройство по шаблону, который выше, задаю id устройства, сохраняю.
В панели устройств появилось устройство QDX50APT 241, у которого есть поле pressureValue, подсвеченное красным. Значений никаких нет.
Через mosquitto_sub подписался на топик /devices/QDX50APT_241/#, опрос датчика не происходит, так как значения новые не появляются. Значения появляются только в момент сохранения при изменении настроек драйвера serial устройств. В топике /devices/QDX50APT_241/…/error задано r.
Подскажите, что я делаю неправильно?
Спасибо!

Раз подсвечено красным - драйвер от устройства данные не получает, т.е. устройство не отвечает. Проверьте настройки порта

и устройства в веб-интерфейсе, в частности, проверьте, верен ли адрес устройства (241).
image

Еще в команде modbus_client вы адрес регистра указываете в десятичном виде (-r4), а в шаблоне - в шестнадцатеричном (0x004). Конкретно это значение совпадает, но такой подход приведет к ошибкам в дальнейшем.

Благодарю за ответ. Все проверил, устройство имеет id 241. В интерфейсе устройство отображается с этим id. /dev/ttyRS485-2 имеет настройки:
Скорость обмена:9600
Контроль четности: N
Число бит данных: 8
Стоп биты: 1
Включить порт: галочка стоит.
Спасибо за уточнение, десятичный вид использовал для быстрого ознакомления.
Все настройки выставлены как должны быть.
Датчик точно рабочий, так как он откликается на команды через modbus_client и выдает показания и свои настройки - baud 9600, slaveId 241, показания. В регистре 0x000 slaveId,0x001 baud rate, 0x002 - размерность показаний, 0x003 плавающая точка, 0x004 значение замера.
Может я чего-то упускаю? достаточно ли только добавить шаблон нового устройства и в интерфейсе wirenboard добавить это устройство в список тех, что работает на /dev/ttyRS485-2?
Спасибо

В настройках wb-mqtt-serial включите отладку:

image

после чего в логах wb-mqtt-serial посмотрите, какие реально пакеты он отправляет, и что получает в ответ

image

потом отключить отладку не забудьте, он там много инфы сыплет.

Код Функции 03 это чтение holding регистра. 06 это запись в holding регистр.

Вы запускаете Modbus Client и пытаетесь прочитать значение 4 holding регистра.
А в шаблоне вы почему то указываете input регистр.

Нужный вам шаблон будет примерно такой:

{
	"device_type": "QDX50APT"
	"group": "g-custom",
	"title": "Pressure transmitter",
	"device": {
		"name": "QDX50APT",
		"id": "QDX50APT",
		"channels": [
			{
				"name": "pressureValue",
				"reg_type": "holding",
				"address": 4,
				"type": "value"
			}
		]
	}
}

не должно влиять - и тот, и другой тип регистра одной функцией читаются

Если я ничего не путаю, чтение input регистра с помощь кода функции 0x04 выполняется

2 лайка

Да, вы правы, я не прав:
image

2 лайка

Добрый день. Спасибо большое за активное участие в решении моей проблемы.
Действительно, проблема была в том, что нужно было reg_type выставить в holding.

1 лайк

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.