Saifuli MTDX62-MB (датчик присутствия)

Здравствуйте, помогите с Saifuli MTDX62-MB (датчик присутствия), у него скорость максимальная 57600, а у нас на порте 115200 и поменять не можем. Мы на всех предложенных датчиком скоростях пробовали, нет с ним связи. Подскажите как поменять скорость опроса датчика, желательно написать строчки команд в SSH, на портале уже были темы на этот счет, но я не понял, может уже кто-то разобрался и разжует

Здравствуйте.

Подробная настройка и добавление шаблона на MTDX62-MB описана в документации
Если вы купили датчик новый и его никто не настраивал посмотрите документацию, скорость должна быть по умолчанию 9600.

Вот карта регистров

Настроить новую скорость можно в holding регистре 0x08, например с помощью утилиты modbus_client
Но, согласно документации если у вашего датчика максимальная 57600 то увеличить её до 115200 нельзя, только ниже либо равно.
Не забывайте что для связи с устройствами и работе с регистрами с помощью контроллера необходимо останавливать драйвер с помощью команды
systemctl stop wb-mqtt-serial
после завершения всех настроек запустить драйвер заново
systemctl start wb-mqtt-serial

Либо без остановки драйвера через modbus_client_rpc
Если например у датчика 9600 и вам надо поднять до 57600 команда должна выглядеть примерно так:
modbus_client_rpc --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r0x08 57600

ничего не вышло, при поиске устройств находит
WB-MSW v.4 (универсальный настенный Modbus-датчик)
4294967295 13 /dev/ttyRS485-1 1200 8N2
я так полагаю это он и скорость у него по умолчанию 1200

Не совсем понимаю, вы искали устройство автоматически в веб интерфейсе?
Добавляли ли шаблон датчика MTDX62-MB?
Как добавить шаблон у нас описано в документации, авто поиском вы его не найдёте.
Пришлите скрин как общаетесь с датчиком по SSH
Какие команды отправляете, что приходит в ответ?

да, шаблон добавляли вручную, он появился но связи нет, изменили скорость на порту на 1200 и датчик худо-бедно заработал, по крайней мере стал активен. То есть скорость там 100% 1200 по умолчанию, адрес датчика у нас 13, какой код при этом написать, и обязательно ли при этом чтобы код прошел скорость на порту оставить 1200?

root@wirenboard-AKORSZRO:~# modbus_client_rpc --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r0x08 57600
2025-11-24 13:56:21,209 [DEBUG] Data to write: 0xe100
2025-11-24 13:56:21,211 [DEBUG] [0d][06][00][08][e1][00][40][94]
2025-11-24 13:56:21,213 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-11-24 13:56:21,217 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 9600, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 8, ‘format’: ‘HEX’, ‘msg’: ‘0d060008e1004094’, ‘total_timeout’: 1000} (1000 timeout ms)
2025-11-24 13:56:23,229 [ERROR] Mqtt-rpc client timeout error, timeout 1000 ms

Всё верно нужно что бы в коде была скорость как у датчика.
Вот пробуйте поднять до 9600:
modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r0x08 9600

Если через rpc не сработает то:

  1. systemctl stop wb-mqtt-serial
  2. modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r0x08 9600
  3. systemctl start wb-mqtt-serial

Если запишется без ошибок то в веб интерфейсе в настройках так же поднять до 9600

не вышло
modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r0x08 9600
2025-11-24 14:16:57,288 [DEBUG] Data to write: 0x2580
2025-11-24 14:16:57,289 [DEBUG] [0d][06][00][08][25][80][13][f4]
2025-11-24 14:16:57,290 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-11-24 14:16:57,292 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 1200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 8, ‘format’: ‘HEX’, ‘msg’: ‘0d060008258013f4’, ‘total_timeout’: 1000} (1000 timeout ms)
2025-11-24 14:16:58,296 [ERROR] Mqtt-rpc client timeout error, timeout 1000 ms
root@wirenboard-AKORSZRO:~# systemctl stop wb-mqtt-serial
root@wirenboard-AKORSZRO:~# modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r0x08 9600
Data to write: 0x2580
Opening /dev/ttyRS485-1 at 1200 bauds (N, 8, 2)
[0D][06][00][08][25][80][13][F4]
Waiting for a confirmation…
<0D><86><02><03>
ERROR Illegal data address
ERROR occured!

Попробуйте этот, поменял адрес регистра на DEC:
modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600

modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600
2025-11-24 14:27:08,650 [DEBUG] Data to write: 0x2580
2025-11-24 14:27:08,652 [DEBUG] [0d][06][00][08][25][80][13][f4]
2025-11-24 14:27:08,654 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-11-24 14:27:08,657 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 1200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 8, ‘format’: ‘HEX’, ‘msg’: ‘0d060008258013f4’, ‘total_timeout’: 1000} (1000 timeout ms)
2025-11-24 14:27:08,901 [DEBUG] RPC Client ← {‘response’: ‘0d860203a2’}
2025-11-24 14:27:09,904 [DEBUG] Response: 0d860203a2
2025-11-24 14:27:09,905 [DEBUG] <0d><86><02><03>
2025-11-24 14:27:09,905 [ERROR] Error occurred while parsing modbus response:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 184, in parse_modbus_response
data = lib.parse_response_adu(response_byte, bytearray.fromhex(request))
File “/usr/lib/python3/dist-packages/umodbus/client/serial/rtu.py”, line 190, in parse_response_adu
function = create_function_from_response_pdu(resp_pdu, req_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 132, in create_function_from_response_pdu
function_code = pdu_to_function_code_or_raise_error(resp_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 118, in pdu_to_function_code_or_raise_error
raise error_code_to_exception_map[error_code]
umodbus.exceptions.IllegalDataAddressError: The data address received in the request is not an allowable address for
the server.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 262, in process_request
parse_modbus_response(lib, args.func_type, modbus_msg_str, modbus_resp_str)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 202, in parse_modbus_response
raise exceptions.ModbusParseError(response_byte) from error
modbus_client_rpc.exceptions.ModbusParseError: bytearray(b’\r\x86\x02\x03\xa2’)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/bin/modbus_client_rpc”, line 7, in
sys.exit(main(sys.argv))
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 463, in main
return process_request(options, lib, get_port_params)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 273, in process_request
result_code = handle_rpcumodbusparseerror(error)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 228, in handle_rpcumodbusparseerror
logger.error(“%s”, “”.join(f"[{x:02x}]" for x in bytearray.fromhex(error.modbus_message)))
TypeError: fromhex() argument must be str, not bytearray

Пробовали вариант с остановкой драйвера?
Нужна карта регистров именно на вашу модель Saifuli MTDX62-MB, скорее всего мы либо неправильно пытаемся достучаться до несуществующего регистра 8, либо же версия вашего датчика имеет скорость без изменений о которой производитель умолчал.

Введите и пришлите что выдает?

  1. systemctl stop wb-mqtt-serial
  2. modbus_client --debug -mrtu -1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
  3. systemctl start wb-mqtt-serial

Добрый день.
Подскажите, удалось ли решить вопрос?

Здраствуйте, нет не удалось(
systemctl stop wb-mqtt-serial
root@wirenboard-AKORSZRO:~# modbus_client --debug -mrtu -1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
modbus_client: invalid option – ‘1’
modbus_client: invalid option – ‘2’
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[0D][03][00][07][00][01][35][07]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!

Здравствуйте.
Попробуйте снова и пришлите ответ, пропустил одно значение.

  1. systemctl stop wb-mqtt-serial
  2. modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
  3. systemctl start wb-mqtt-serial

Исходя из данных на датчик

должна сработать команда либо
modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600

либо
modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 0x2580

добрый день, не вышло(

systemctl stop wb-mqtt-serial
root@wirenboard-AKORSZRO:~# modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
Opening /dev/ttyRS485-1 at 1200 bauds (N, 8, 2)
[0D][03][00][08][00][01][05][04]
Waiting for a confirmation…
<0D><03><02>
SUCCESS: read 1 of elements:
Data: 0xffff
root@wirenboard-AKORSZRO:~# systemctl start wb-mqtt-serial
root@wirenboard-AKORSZRO:~# modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600
2025-11-28 10:29:44,456 [DEBUG] Data to write: 0x2580
2025-11-28 10:29:44,457 [DEBUG] [0d][06][00][08][25][80][13][f4]
2025-11-28 10:29:44,459 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-11-28 10:29:44,462 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 1200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 8, ‘format’: ‘HEX’, ‘msg’: ‘0d060008258013f4’, ‘total_timeout’: 1000} (1000 timeout ms)
2025-11-28 10:29:44,714 [DEBUG] RPC Client ← {‘response’: ‘0d860203a2’}
2025-11-28 10:29:45,716 [DEBUG] Response: 0d860203a2
2025-11-28 10:29:45,716 [DEBUG] <0d><86><02><03>
2025-11-28 10:29:45,717 [ERROR] Error occurred while parsing modbus response:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 184, in parse_modbus_response
data = lib.parse_response_adu(response_byte, bytearray.fromhex(request))
File “/usr/lib/python3/dist-packages/umodbus/client/serial/rtu.py”, line 190, in parse_response_adu
function = create_function_from_response_pdu(resp_pdu, req_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 132, in create_function_from_response_pdu
function_code = pdu_to_function_code_or_raise_error(resp_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 118, in pdu_to_function_code_or_raise_error
raise error_code_to_exception_map[error_code]
umodbus.exceptions.IllegalDataAddressError: The data address received in the request is not an allowable address for
the server.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 262, in process_request
parse_modbus_response(lib, args.func_type, modbus_msg_str, modbus_resp_str)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 202, in parse_modbus_response
raise exceptions.ModbusParseError(response_byte) from error
modbus_client_rpc.exceptions.ModbusParseError: bytearray(b’\r\x86\x02\x03\xa2’)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/bin/modbus_client_rpc”, line 7, in
sys.exit(main(sys.argv))
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 463, in main
return process_request(options, lib, get_port_params)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 273, in process_request
result_code = handle_rpcumodbusparseerror(error)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 228, in handle_rpcumodbusparseerror
logger.error(“%s”, “”.join(f"[{x:02x}]" for x in bytearray.fromhex(error.modbus_message)))
TypeError: fromhex() argument must be str, not bytearray
root@wirenboard-AKORSZRO:~# modbus_client_rpc --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 0x2580
2025-11-28 10:30:42,891 [DEBUG] Data to write: 0x2580
2025-11-28 10:30:42,892 [DEBUG] [0d][06][00][08][25][80][13][f4]
2025-11-28 10:30:42,894 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-11-28 10:30:42,896 [DEBUG] RPC Client → {‘path’: ‘/dev/ttyRS485-1’, ‘baud_rate’: 1200, ‘parity’: ‘N’, ‘data_bits’: 8, ‘stop_bits’: 2, ‘response_size’: 8, ‘format’: ‘HEX’, ‘msg’: ‘0d060008258013f4’, ‘total_timeout’: 1000} (1000 timeout ms)
2025-11-28 10:30:43,580 [DEBUG] RPC Client ← {‘response’: ‘0d860203a2’}
2025-11-28 10:30:44,581 [DEBUG] Response: 0d860203a2
2025-11-28 10:30:44,582 [DEBUG] <0d><86><02><03>
2025-11-28 10:30:44,583 [ERROR] Error occurred while parsing modbus response:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 184, in parse_modbus_response
data = lib.parse_response_adu(response_byte, bytearray.fromhex(request))
File “/usr/lib/python3/dist-packages/umodbus/client/serial/rtu.py”, line 190, in parse_response_adu
function = create_function_from_response_pdu(resp_pdu, req_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 132, in create_function_from_response_pdu
function_code = pdu_to_function_code_or_raise_error(resp_pdu)
File “/usr/lib/python3/dist-packages/umodbus/functions.py”, line 118, in pdu_to_function_code_or_raise_error
raise error_code_to_exception_map[error_code]
umodbus.exceptions.IllegalDataAddressError: The data address received in the request is not an allowable address for
the server.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 262, in process_request
parse_modbus_response(lib, args.func_type, modbus_msg_str, modbus_resp_str)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 202, in parse_modbus_response
raise exceptions.ModbusParseError(response_byte) from error
modbus_client_rpc.exceptions.ModbusParseError: bytearray(b’\r\x86\x02\x03\xa2’)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/bin/modbus_client_rpc”, line 7, in
sys.exit(main(sys.argv))
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 463, in main
return process_request(options, lib, get_port_params)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 273, in process_request
result_code = handle_rpcumodbusparseerror(error)
File “/usr/lib/python3/dist-packages/modbus_client_rpc/main.py”, line 228, in handle_rpcumodbusparseerror
logger.error(“%s”, “”.join(f"[{x:02x}]" for x in bytearray.fromhex(error.modbus_message)))
TypeError: fromhex() argument must be str, not bytearray
root@wirenboard-AKORSZRO:~#

Связь с устройством есть, регистр тоже получается есть, значения не соответствуют 1200


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

  1. systemctl stop wb-mqtt-serial
  2. modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600
  3. modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
  4. systemctl start wb-mqtt-serial

systemctl stop wb-mqtt-serial
root@wirenboard-AKORSZRO:~# modbus_client --debug -mrtu -b1200 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x06 -r8 9600
Data to write: 0x2580
Opening /dev/ttyRS485-1 at 1200 bauds (N, 8, 2)
[0D][06][00][08][25][80][13][F4]
Waiting for a confirmation…
<0D><86><02><03>
ERROR Illegal data address
ERROR occured!
root@wirenboard-AKORSZRO:~# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a13 -t0x03 -r8
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[0D][03][00][08][00][01][05][04]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!

ссылка
Screenshot_20251128_181946
Я бы уточнил у производителя все же.