[modbus.sungrow] oh 5.0.3 not running on Raspberry PI (trixie)

Hi there

I would like to run Openhab5 with a Sungrow Inverter via Modbus (with JDK 21).

  • This works fine on a Mac with up-to-date MacOS
  • But so far I did not succeed to run it on a Raspberry Pi 3B running Trixie (aarch64)

The error I get on the Raspberry PI with the Inverter-Thing says: COMMUNICATION_ERROR
Failed to retrieve data: Modbus IO Error with cause=ModbusIOException, EOF=false, message=‘I/O exception: EOFException null’, cause2=null

I have learnt that this error probably happens because the inverter is dropping the connection with the Raspberry for some unknown reasons.

I tried to fix that with all that came to my mind: changed parameters (fewer request, longer timeouts, fewer connections ..), changed network ports, wlan, reboots .. but I did not succeed. Because the communication failure happens at the very beginning I fear the problem has something to do with the way the Raspberry PI is starting the TCP connection with the inverter?

Very thankful for your experience and hints! BR

The event.log says:

2025-12-05 20:14:12.019 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘modbus:sungrow-inverter:sungrowinverter’ changed from OFFLINE (COMMUNICATION_ERROR): Failed to retrieve data: Modbus IO Error with cause=ModbusIOException, EOF=false, message=‘I/O exception: EOFException null’, cause2=null to UNINITIALIZED

2025-12-05 20:14:12.101 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘modbus:sungrow-inverter:sungrowinverter’ changed from UNINITIALIZED to UNINITIALIZED (DISABLED)

2025-12-05 20:14:15.726 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘modbus:sungrow-inverter:sungrowinverter’ changed from UNINITIALIZED (DISABLED) to INITIALIZING

2025-12-05 20:14:15.744 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘modbus:sungrow-inverter:sungrowinverter’ changed from INITIALIZING to UNKNOWN

2025-12-05 20:14:17.763 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing ‘modbus:sungrow-inverter:sungrowinverter’ changed from UNKNOWN to OFFLINE (COMMUNICATION_ERROR): Failed to retrieve data: Modbus IO Error with cause=ModbusIOException, EOF=false, message=‘I/O exception: EOFException null’, cause2=null

The openhab.log says:

2025-12-05 20:14:12.087 [INFO ] [ing.ModbusSlaveConnectionFactoryImpl] - Connect try 0/1 failed: sleep interrupted. Aborting since interrupted. Connection TCPMasterConnection [m_Socket=null, m_Timeout=3000, m_Connected=false, m_Address=/192.168.66.31, m_Port=502, m_ModbusTransport=null, m_ConnectTimeoutMillis=12349, rtuEncoded=false]. Endpoint ModbusIPSlaveEndpoint [address=192.168.66.31, port=502].

2025-12-05 20:14:12.093 [WARN ] [rt.modbus.internal.ModbusManagerImpl] - Could not connect to endpoint ModbusIPSlaveEndpoint [address=192.168.66.31, port=502] – aborting request ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_INPUT_REGISTERS, start=5007, length=29, maxTries=1] [operation ID 0d35d0fe-fe96-4d52-8abc-8fc9a62c3aa7]

2025-12-05 20:14:12.095 [DEBUG] [grow.internal.SungrowInverterHandler] - Failed to get modbus data org.openhab.core.io.transport.modbus.exception.ModbusConnectionException: Error connecting to endpoint ModbusIPSlaveEndpoint [address=192.168.66.31, port=502]

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl.lambda$5(ModbusManagerImpl.java:488) \~\[?:?\]

at org.openhab.core.io.transport.modbus.internal.SimpleStopWatch.timeRunnable(SimpleStopWatch.java:152) \~\[?:?\]

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl.getConnection(ModbusManagerImpl.java:487) \~\[?:?\]

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl.executeOperation(ModbusManagerImpl.java:567) \~\[?:?\]

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl$ModbusCommunicationInterfaceImpl.lambda$1(ModbusManagerImpl.java:820) \~\[?:?\]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) \~\[?:?\]

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) \~\[?:?\]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) \~\[?:?\]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) \~\[?:?\]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) \~\[?:?\]

at java.lang.Thread.run(Thread.java:1583) \[?:?\]

2025-12-05 20:14:12.108 [WARN ] [.core.thing.binding.BaseThingHandler] - Handler SungrowInverterHandler tried updating the thing status although the handler was already disposed.

2025-12-05 20:14:15.742 [DEBUG] [grow.internal.SungrowInverterHandler] - Created 2 modbus request templates.

2025-12-05 20:14:17.752 [ERROR] [rt.modbus.internal.ModbusManagerImpl] - Last try 1 failed when executing request (ModbusReadRequestBlueprint [slaveId=1, functionCode=READ_INPUT_REGISTERS, start=5007, length=29, maxTries=1]). Aborting. Error was I/O error, so resetting the connection. Error details: net.wimpi.modbus.ModbusIOException I/O exception: EOFException null [operation ID c444d701-fc74-4406-8c7a-367baac4b94e]

2025-12-05 20:14:17.755 [DEBUG] [grow.internal.SungrowInverterHandler] - Failed to get modbus data org.openhab.core.io.transport.modbus.internal.ModbusSlaveIOExceptionImpl: Modbus IO Error with cause=ModbusIOException, EOF=false, message=‘I/O exception: EOFException null’, cause2=null

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl.executeOperation(ModbusManagerImpl.java:646) \~\[?:?\]

at org.openhab.core.io.transport.modbus.internal.ModbusManagerImpl$ModbusCommunicationInterfaceImpl.lambda$1(ModbusManagerImpl.java:820) \~\[?:?\]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) \~\[?:?\]

at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) \~\[?:?\]

at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) \~\[?:?\]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) \~\[?:?\]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) \~\[?:?\]

at java.lang.Thread.run(Thread.java:1583) \[?:?\]