Communication with modbus slave PTDNC04 PT100 Temperature Module not possible

I am trying to connect a modbus PT1000 temperature sensor module to my esphome controlled esp32 (wt32-eth01).

Module product link: https://eletechsups.com/new-product-area-c-67/ptdnc04-pt100-a-versionwith-din-box-pt1000-4ch-modbus-wide-range-temperature-sensor-collector-pt100-rtd-platinum-thermal-resistance-rs485-remote-analog-quantity-p-1609.html

I was successful, using the Modbus Poll windows software like described here: YouTube video “PTDNC04 4CH PT100/PT1000 RS485 temperature sensor”

According to the manual of the module, it should communicate like this:
send data…: 01 03 00 00 00 01 84 0A (read temperature on channel 0)
received data: 01 03 02 00 DB F8 1F

My current config looks like this:

uart:
  - id: uart_modbus
    tx_pin: GPIO15
    rx_pin: GPIO36
    baud_rate: 9600
    stop_bits: 1
    data_bits: 8
    parity: NONE
    debug:
      direction: BOTH

modbus:
  - uart_id: uart_modbus
    id: modbus_bus
    role: server

modbus_controller:
  - id: modbus_temp
    modbus_id: modbus_bus
    address: 0x01
    setup_priority: -10
    update_interval: 2s

sensor:
# Modbus Sensoren
  - platform: modbus_controller
    modbus_controller_id: modbus_temp
    id: pt1000temp
    name: "PT1000 Temperature Ch1"
    register_type: holding
    address: 0x0000
    unit_of_measurement: "°C"
    value_type: U_WORD

The logs show these messages:

[19:51:24][D][modbus:147]: Modbus error function code: 0x83 exception: 3
[19:51:24][E][modbus_controller:094]: Modbus error function code: 0x3 exception: 3 
[19:51:24][E][modbus_controller:098]: Modbus error - last command: function code=0x3  register address = 0x0  registers count=1 payload size=0
[19:51:24][D][uart_debug:114]: <<< 01:83:03:01:31
[19:51:26][D][uart_debug:114]: >>> 01:03:40:21
[19:51:26][D][modbus:147]: Modbus error function code: 0x83 exception: 3
[19:51:26][E][modbus_controller:094]: Modbus error function code: 0x3 exception: 3 
[19:51:26][E][modbus_controller:098]: Modbus error - last command: function code=0x3  register address = 0x0  registers count=1 payload size=0
[19:51:26][D][uart_debug:114]: <<< 01:83:03:01:31
[19:51:28][D][uart_debug:114]: >>> 01:03:40:21
[19:51:28][D][modbus:147]: Modbus error function code: 0x83 exception: 3
[19:51:28][E][modbus_controller:094]: Modbus error function code: 0x3 exception: 3 

If I decode the TTL UART signal with my oscilloscope, it sends 01 03 60 21 on the Tx line. This is completely not what it should look like.

So how should the esphome config look like to send the command like this:
RS485 address (1 Byte) Function Code (1 Byte) Register address (2 Byte) Read number (2 Byte) CRC16 (2 Byte)

Module Modbus Manual: https://downloads.primat.ch/manuals/PTDNC04%20PT1000%204CH%20Modbus%20Wide%20Range%20Temperature%20Sensor%20Collector%20RS485/PTDNC04%20Manual/PTDNC04%20Modbus%20Rtu%20Command.pdf

Thank you very much for any help to get this working.

Presumably, the query must be made via esphome modbus custom_command, otherwise the address (first register) and the length (registers requested) are somehow not transmitted.

According to the Modbus RTU definition, however, this should be done.

Here is an excerpt from Simply Modbus (https://www.simplymodbus.ca/FC03.htm):
Request
This command is requesting the contents of analog output holding registers # 40108 to
40110 from the slave device with address 17.

11 03 006B 0003 7687

11: The Slave Address (11 hex = address17 )
03: The Function Code 3 (read Analog Output Holding Registers)
006B: The Data Address of the first register requested.
( 006B hex = 107 , + 40001 offset = input #40108 )
0003: The total number of registers requested. (read 3 registers 40108 to 40110)
7687: The CRC (cyclic redundancy check) for error checking.

→ I don’t know why this doesn’t work with the esphome Modbus implementation using a standard query. Is this a bug?
Is there anyone who can verify that the expected request is sent with Modbus using a corresponding standard configuration? If so, I would be grateful for the corresponding esphome config and the sent request.

What kind of RS485 module are you using with your WT32-ETH01 for Modbus?

I’m asking because I’m planning to set up a Modbus network with a WT32-ETH01 myself and wondering which RS485 module would be a good fit.