Can't write into holding register for setpoint (Mitsubishi Procon A1M)

Hi,
I have a Procon A1M gateway attached to my Mitsubishi Ecodan EHST20C System. It works over Modbus. Both status LEDs show correct communication (blinking).
I can read everything I want from the registers and even write on/off commands into some coils and holding registers like Force DHW and System On/Off. It takes some time for it to actually show effect on the unit but it works.

However, when I try to set a value into “Water Tank Setpoint”, it refuses to work. It just jumps back to the value before the command.
When I change the desired setpoint value manually via the Mitsubishi Display, I can see the channel reacting to that in OH. So I think I am trying to write into the correct register at least.

Settings are:
Read: 16bit unsigned integer/ signed integer (both work)
Write: 16bit (there is only option for 16 bit)

I searched the manual but didn’t find any hint for this problem. Maybe this function (like external commands for Setpoints) is blocked within the actual unit?

Any hint would be lovely :heart_eyes:

Can you share your configuration in OpenHAB?
What version are you using?

Can you temporary disable the reading of the value and only write the value and try again?
Do you see any errors in the log?

Hey @Tuny ,
here my config. I am on Openhabian 4.0.2 on a Raspi 4.
I Put the log for Modbus on ERROR. But i dont see any errors after sending the command.

Tried to disable reading by removing the read adress. But the thing goes offline then.

Modbus Gateway:

UID: modbus:serial:b096beff76
label: Modbus Gateway Procon A1M
thingTypeUID: modbus:serial
configuration:
  baud: 9600
  connectMaxTries: 1
  timeBetweenTransactionsMillis: 500
  stopBits: "1.0"
  parity: none
  receiveTimeoutMillis: 1500
  dataBits: 8
  echo: false
  encoding: rtu
  flowControlIn: none
  flowControlOut: none
  port: /dev/ttyUSBModbus
  connectTimeoutMillis: 10000
  afterConnectionDelayMillis: 0
  id: 1
  enableDiscovery: false

Modbus Poller:

UID: modbus:poller:b096beff76:1f2df150fd
label: Modbus Poller Procon Holdings 25-37
thingTypeUID: modbus:poller
configuration:
  length: 40
  start: 0
  refresh: 500
  maxTries: 3
  cacheMillis: 50
  type: holding
bridgeUID: modbus:serial:b096beff76

And the Modbus Thing for Water Tank Setpoint:

UID: modbus:data:1f2df150fd:7cc55eebbc
label: Modbus Heizung SOLL Brauchwasser
thingTypeUID: modbus:data
configuration:
  readValueType: int16
  readTransform: JS(teilendurch100.js)
  writeTransform: JS(multiplizieremit100.js)
  writeType: holding
  readStart: "30"
  updateUnchangedValuesEveryMillis: 1000
  writeValueType: int16
  writeMultipleEvenWithSingleRegisterOrCoil: false
  writeMaxTries: 3
  writeStart: "30"
bridgeUID: modbus:poller:b096beff76:1f2df150fd

And here a link to the manual of the Procon A1M:

Here you can see what happens after i sent a value. Copied this from the karaf console.

openhab> openhab:status Modbus_Heizung_Water_Tank_TEST_Value_as_Number
50.0
openhab> openhab:send Modbus_Heizung_Water_Tank_TEST_Value_as_Number 48
Command has been sent successfully.
openhab> openhab:status Modbus_Heizung_Water_Tank_TEST_Value_as_Number
48
openhab> openhab:status Modbus_Heizung_Water_Tank_TEST_Value_as_Number
50.0

Can you please try the autoupdate="false" parameter:

Also: The thing should not go offline when you remove the reading parameter.
Please try again. Is there a specific error?
With openhabian the frontail service should be installed and you can access your logs by using the browser with port number :9001.

Hey @Tuny

Thanks for your help. Sadly it´s not working, even with autoupdate=false.
When i set the log on DEBUG, i even get a successful write…


2024-01-06 21:08:22.517 [DEBUG] [ernal.handler.ModbusDataThingHandler] - Successful write, matching request ModbusWriteRegisterRequestBlueprint [slaveId=1, reference=31, registers=ModbusRegisterArray(0BB8), maxTries=3, getFunctionCode()=WRITE_SINGLE_REGISTER]

But it doesn´t change really…

hmm this is strange.
Do you have a USB to RS485 converter?
So you could try to write the value with a windows tool like “Modbus Poll” to see if it works in general?