Sudden HA exodus trough ModBus

Heyhey team ModBus :wink: ,

ran into an issue, that kills my Home Assistant with ModBus.
I got a PV installation with a ModBus Smartmeter SDM630v2.
Those i integrated via this config:

modbus:
  - name: modbus_1
    type: serial
    port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
    baudrate: 19200
#    baudrate: 9600
    bytesize: 8
    method: rtu
    parity: N
    stopbits: 1
    delay: 0
    message_wait_milliseconds: 45
    timeout: 5
    sensors:
## SM1
      - name: sdm630_01_phase_1_line_to_neutral_volts
        unique_id: sdm630_01_phase_1_line_to_neutral_volts
        slave: 1
        address: 0
        input_type: input
        precision: 2
        data_type: float32
        unit_of_measurement: V
        device_class: voltage
        state_class: measurement
      - name: sdm630_01_phase_2_line_to_neutral_volts
        unique_id: sdm630_01_phase_2_line_to_neutral_volts
        slave: 1
        address: 2
        input_type: input
        precision: 2
        data_type: float32
        unit_of_measurement: V
        device_class: voltage
        state_class: measurement
....

Now for the second time in a few days my HA doesnÂŽt come up anymore. Logs (set ModBus to debug) is full of this:

2025-03-20 19:07:33.355 DEBUG (MainThread) [pymodbus.logging] Connecting to /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0.
2025-03-20 19:07:33.355 DEBUG (MainThread) [pymodbus.logging] Connecting comm
2025-03-20 19:07:35.730 DEBUG (MainThread) [pymodbus.logging] Connected to comm
2025-03-20 19:07:35.754 INFO (MainThread) [homeassistant.components.modbus.modbus] modbus modbus_1 communication open
2025-03-20 19:07:35.773 DEBUG (MainThread) [pymodbus.logging] recv: 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x15 0xac 0xa0 0x83 0x40 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x75 0x18 0xd0 0xf5
2025-03-20 19:07:35.774 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x15 0xac 0xa0 0x83 0x40 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x75 0x18 0xd
2025-03-20 19:07:35.774 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.774 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.774 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.775 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.775 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.775 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.775 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.775 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.776 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.777 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.777 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.777 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.777 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.777 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.778 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.778 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.778 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.780 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.780 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.780 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.781 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.781 DEBUG (MainThread) [pymodbus.logging] decoded PDU function_code(4 sub -1) -> ReadInputRegistersResponse(dev_id=0, transaction_id=0, address=0, count=0, bits=[], registers=[], status=1)
2025-03-20 19:07:35.781 DEBUG (MainThread) [pymodbus.logging] Frame advanced, resetting header!!
2025-03-20 19:07:35.781 DEBUG (MainThread) [pymodbus.logging] recv, unused data waiting for next packet: 0x1 0x4 0x4 0x42 0x15 0xac 0xa0 0x83 0x40 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x75 0x18 0xd0 0
2025-03-20 19:07:35.955 DEBUG (MainThread) [pymodbus.logging] recv: 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x18 0x8a 0xe0 0x9 0x13 old_data: 0x1 0x4 0x4 0x42 0x15 0xac 0xa0 0x83 0x40 0x1 0x4 0x0 0x34 0x
2025-03-20 19:07:35.956 DEBUG (MainThread) [pymodbus.logging] Processing: 0x1 0x4 0x4 0x42 0x15 0xac 0xa0 0x83 0x40 0x1 0x4 0x0 0x34 0x0 0x2 0x30 0x5 0x1 0x4 0x4 0x42 0x75 0x18 0xd0 0xf5 0xba 0x1 0x4 0x0 0x34 0x0 0
2025-03-20 19:07:35.956 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.956 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..
2025-03-20 19:07:35.956 DEBUG (MainThread) [pymodbus.logging] Frame check failed, possible garbage after frame, testing..

As HA no longer works i tried deactivating the SDM Meters and removed all the configured sensors. Unfortunately this does not solve the thing. Its definitely modbus as removing the modbus config
you know

Expected behavior when unplugging the ModBus USB Adaptor:

2025-03-20 20:13:46.897 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 0 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]
2025-03-20 20:13:46.945 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 2 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]
2025-03-20 20:13:47.007 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 4 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]
2025-03-20 20:13:47.057 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 6 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]
2025-03-20 20:13:47.104 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 8 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]
2025-03-20 20:13:47.152 DEBUG (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: modbus_1: Error: device: 1 address: 10 -> Modbus Error: [Connection] Not connected[AsyncModbusSerialClient /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0:0]

This is the “less debug” messages:

2025-03-20 20:19:14.118 ERROR (MainThread) [homeassistant] Error doing job: Exception in callback SerialTransport.intern_read_ready() (None)
Traceback (most recent call last):
  File "/usr/local/lib/python3.13/asyncio/events.py", line 89, in _run
    self._context.run(self._callback, *self._args)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/pymodbus/transport/serialtransport.py", line 134, in intern_read_ready
    self.intern_protocol.data_received(data)  # type: ignore[attr-defined]
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/usr/local/lib/python3.13/site-packages/pymodbus/transport/transport.py", line 304, in data_received
    self.datagram_received(data, None)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/pymodbus/transport/transport.py", line 338, in datagram_received
    cut = self.callback_data(self.recv_buffer, addr=addr)
  File "/usr/local/lib/python3.13/site-packages/pymodbus/transaction/transaction.py", line 183, in callback_data
    self.response_future.set_result(pdu)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
asyncio.exceptions.InvalidStateError: invalid state

Exactly same situation here !
SDM630 modbus, HA freezes after 1-2 days.
Did you solve it ?

Edit: i have rtuovertcp. And we are not alone:

No real “fix”. Suspecting concurring devices with same ModBus Device ID. Disconnected the unwanted one and didn®t come back.

Nevertheless I was shocked how bad the ModBus error handling is, that no one replied ever and that this could break whole HA. A shame