I was using this integration via WiFi logger (LSW3 / LSW3_32U_5406_1.0B) - mostly good, but with connectivity issues.
So I decided to migrate to wired connection. I bought Waveshare RS485 converter and connected to Modbus port.
Here is converter configuration:
Integration protocol set to Modbus TCP.
After multiple tries of connecting to inverter I've successfuly added my inverter, but only with battery packs set to -1. During intialization detecting batteries fails and set it to 0.
If I specify real value = 5 in advanced options - initialization fails always.
If I do the same procedure with WiFi logger, but with Transparency mode and protocol set to Modbus TCP - batteries are detected properly.
Also notice strange error about battery capacity in logs.
As mentioned in description: connecting via RS485 converter. With specified battery packs (fails entire initialization) or without (just doesn't identify batteries)
2025-10-26 21:38:04.306 async_setup_entry: Coordinator.init -> async_config_entry_first_refresh
2025-10-26 21:38:04.308 DiscoveryProtocol: Send to 192.168.1.83
2025-10-26 21:38:04.814 Scheduling 1 query request: [{'code': 3, 'start': 0, 'end': 22, 'count': 23}] #0
2025-10-26 21:38:04.814 Request 03 ❘ 0x03 ~ 0000 ❘ 0x0000: {'count': 23}
2025-10-26 21:38:04.814 SENT: 73 bc 00 00 00 06 01 03 00 00 00 17
2025-10-26 21:38:04.818 Successful connection!
2025-10-26 21:38:04.911 RECV: 73 bc 00 00 00 31 01 03 2e 00 05 00 01 01 04 32 35 30 32 32 31 36 33 37 38 00 00 00 00 00 00 18 09 d2 07 00 00 21 07 11 51 00 00 10 01 c0 4d 00 00 0d 40 00 03 02 03
2025-10-26 21:38:04.911 DATA: [5, 1, 260, 12853, 12338, 12849, 13875, 14136, 0, 0, 0, 6153, 53767, 0, 8455, 4433, 0, 4097, 49229, 0, 3392, 3, 515]
2025-10-26 21:38:04.912 Returning 1 new value
2025-10-26 21:38:04.912 Scheduling 1 query request: [{'code': 3, 'start': 10002, 'end': 10002, 'count': 1}] #0
2025-10-26 21:38:04.912 Request 03 ❘ 0x03 ~ 10002 ❘ 0x2712: {'count': 1}
2025-10-26 21:38:04.916 SENT: 6a 1d 00 00 00 06 01 03 27 12 00 01
2025-10-26 21:38:18.918 Connection closed. Will try to restart the connection
2025-10-26 21:38:18.921 Successful reconnection! Data expected. Will retry the last request
2025-10-26 21:38:32.920 Connection closed. Will try to restart the connection
2025-10-26 21:38:32.924 Successful reconnection! Data expected. Will retry the last request
2025-10-26 21:38:34.914 DiscoveryProtocol: Send to 192.168.1.83
2025-10-26 21:38:35.417 Closing connection
2025-10-26 21:38:35.418 Unable to read Number of Battery packs. Continuing with the configured value
Traceback (most recent call last):
File "/config/custom_components/solarman/pysolarman/__init__.py", line 320, in execute
Traceback (most recent call last):
File "/config/custom_components/solarman/pysolarman/__init__.py", line 320, in execute
return await self.get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 311, in get_response
return await self._get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 304, in _parse_adu_from_tcp_response
res = await self._send_receive_frame(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 44, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 46, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 259, in _send_receive_frame
return await asyncio.wait_for(self._data_queue.get(), self.timeout * 3 - 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
return await fut
^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/queues.py", line 186, in get
await getter
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/config/custom_components/solarman/device.py", line 90, in get
result = await self.execute_bulk(requests, scheduled)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
Traceback (most recent call last):
File "/config/custom_components/solarman/pysolarman/__init__.py", line 320, in execute
return await self.get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 311, in get_response
return await self._get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 304, in _parse_adu_from_tcp_response
res = await self._send_receive_frame(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 44, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 46, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 259, in _send_receive_frame
return await asyncio.wait_for(self._data_queue.get(), self.timeout * 3 - 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
return await fut
^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/queues.py", line 186, in get
await getter
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/config/custom_components/solarman/device.py", line 90, in get
result = await self.execute_bulk(requests, scheduled)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
return await self.get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 311, in get_response
return await self._get_response(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 304, in _parse_adu_from_tcp_response
res = await self._send_receive_frame(req)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 44, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 46, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 259, in _send_receive_frame
return await asyncio.wait_for(self._data_queue.get(), self.timeout * 3 - 1)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/tasks.py", line 507, in wait_for
return await fut
^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/queues.py", line 186, in get
await getter
asyncio.exceptions.CancelledError
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/config/custom_components/solarman/device.py", line 90, in get
result = await self.execute_bulk(requests, scheduled)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/common.py", line 28, in wrapper
return await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 77, in execute_bulk
responses[(code, address)] = await self.execute(code, address, count = count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 67, in execute
return await self.modbus.execute(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 77, in execute_bulk
responses[(code, address)] = await self.execute(code, address, count = count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 67, in execute
return await self.modbus.execute(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 318, in execute
async with asyncio.timeout(self.timeout * 6):
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
raise TimeoutError from exc_val
TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/solarman/common.py", line 139, in lookup_profile
if device_type in (*AUTODETECTION_DEYE_4P3[0], *AUTODETECTION_DEYE_1P3[0]) and (response := await request(requests = create_request(*AUTODETECTION_BATTERY_REQUEST_DEYE))) and (p := get_addr_value(response, *AUTODETECTION_BATTERY_NUMBER_DEYE)) is not None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 96, in get
if self.profile.parser:
^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'parser'
2025-10-26 21:38:36.487 deye_p3.yaml w/ defaults for update_interval: 60, code: 3, min_span: 25, max_size: 125, digits: 6, parameters: {'mod': 0, 'mppt': 2, 'l': 3, 'pack': -1}
2025-10-26 21:38:36.511 Scheduling 5 query requests: [{'code': 3, 'start': 0, 'end': 124, 'count': 125}, {'code': 3, 'start': 125, 'end': 237, 'count': 113}, {'code': 3, 'start': 340, 'end': 341, 'count': 2}, {'code': 3, 'start': 500, 'end': 558, 'count': 59}, {'code': 3, 'start': 586, 'end': 708, 'count': 123}] #0
2025-10-26 21:38:36.511 Request 03 ❘ 0x03 ~ 0000 ❘ 0x0000: {'count': 125}
2025-10-26 21:38:36.512 SENT: 04 6f 00 00 00 06 01 03 00 00 00 7d
2025-10-26 21:38:36.517 Successful connection!
File "/config/custom_components/solarman/pysolarman/__init__.py", line 318, in execute
async with asyncio.timeout(self.timeout * 6):
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
raise TimeoutError from exc_val
TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/solarman/common.py", line 139, in lookup_profile
if device_type in (*AUTODETECTION_DEYE_4P3[0], *AUTODETECTION_DEYE_1P3[0]) and (response := await request(requests = create_request(*AUTODETECTION_BATTERY_REQUEST_DEYE))) and (p := get_addr_value(response, *AUTODETECTION_BATTERY_NUMBER_DEYE)) is not None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 96, in get
if self.profile.parser:
^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'parser'
File "/config/custom_components/solarman/device.py", line 77, in execute_bulk
responses[(code, address)] = await self.execute(code, address, count = count)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 67, in execute
return await self.modbus.execute(code, address, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 54, in wrapper
r = await f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/pysolarman/__init__.py", line 318, in execute
async with asyncio.timeout(self.timeout * 6):
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.13/asyncio/timeouts.py", line 116, in __aexit__
raise TimeoutError from exc_val
TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/config/custom_components/solarman/common.py", line 139, in lookup_profile
if device_type in (*AUTODETECTION_DEYE_4P3[0], *AUTODETECTION_DEYE_1P3[0]) and (response := await request(requests = create_request(*AUTODETECTION_BATTERY_REQUEST_DEYE))) and (p := get_addr_value(response, *AUTODETECTION_BATTERY_NUMBER_DEYE)) is not None:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/solarman/device.py", line 96, in get
if self.profile.parser:
^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'parser'
2025-10-26 21:38:41.230 RECV: 04 6f 00 00 00 fd 01 03 fa 00 05 00 01 01 04 32 35 30 32 32 31 36 33 37 38 00 00 00 00 00 00 18 09 d2 07 00 00 21 07 11 51 00 00 10 01 c0 4d 00 00 0d 40 00 03 02 03 00 09 00 07 00 00 00 00 00 00 00 05 00 83 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff 19 0a 1a 15 26 18 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 60 00 01 00 64 02 58 ff ff 00 00 04 4c 00 01 00 00 ff ff ff ff ff ff 00 00 00 01 ff ff ff ff ff ff ff ff 00 00 ff ff 00 00 ff ff ff ff ff ff 00 00 00 01 16 80 16 80 15 90 4e 20 11 94 00 14 00 5a 00 00 00 05 01 2c 01 5e ff ff 00 01 00 01 00 0c 03 de 00 0a 00 28 00 14 11 f8 14 50 12 8e 00 f0 00 00 13 24 00 1e
2025-10-26 21:38:41.231 DATA: [5, 1, 260, 12853, 12338, 12849, 13875, 14136, 0, 0, 0, 6153, 53767, 0, 8455, 4433, 0, 4097, 49229, 0, 3392, 3, 515, 9, 7, 0, 0, 0, 5, 131, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 65535, 6410, 6677, 9752, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 96, 1, 100, 600, 65535, 0, 1100, 1, 0, 65535, 65535, 65535, 0, 1, 65535, 65535, 65535, 65535, 0, 65535, 0, 65535, 65535, 65535, 0, 1, 5760, 5760, 5520, 20000, 4500, 20, 90, 0, 5, 300, 350, 65535, 1, 1, 12, 990, 10, 40, 20, 4600, 5200, 4750, 240, 0, 4900, 30]
2025-10-26 21:38:41.231 Request 03 ❘ 0x03 ~ 0125 ❘ 0x007D: {'count': 113}
2025-10-26 21:38:41.231 SENT: 26 8f 00 00 00 06 01 03 00 7d 00 71
2025-10-26 21:38:41.633 RECV: 26 8f 00 00 00 e5 01 03 e2 00 28 13 24 00 1e 00 c8 00 00 00 01 15 7c 00 00 00 00 13 ec 00 5f 15 18 00 64 00 01 01 f4 00 01 00 01 00 01 4e 20 00 00 00 00 00 ff 00 01 00 00 02 58 05 78 05 dc 06 a4 08 98 23 28 23 28 23 28 23 28 23 28 23 28 13 24 13 24 13 24 13 24 13 24 13 24 00 32 00 19 00 55 00 19 00 19 00 32 00 01 00 00 00 00 00 00 00 00 00 01 2a 38 ff ff 00 3c 00 01 00 19 00 00 00 01 0a 55 07 a3 14 50 12 8e 00 00 1f 40 23 28 00 64 03 e8 00 00 00 00 9c 40 00 00 4e 20 00 00 03 20 00 00 00 23 00 03 01 b8 00 00 00 37 00 03 a2 0e 00 00 15 90 11 30 03 e8 03 e8 00 39 14 6e ff d0 04 7e 03 fc 03 fc 00 00 00 00 00 00 00 0c 00 00 00 00 00 00 00 00 0a ef 00 00 ff ff 07 d0 ff ff 0c 1c ff ff 00 00 00 00 00 00
2025-10-26 21:38:41.634 DATA: [40, 4900, 30, 200, 0, 1, 5500, 0, 0, 5100, 95, 5400, 100, 1, 500, 1, 1, 1, 20000, 0, 0, 255, 1, 0, 600, 1400, 1500, 1700, 2200, 9000, 9000, 9000, 9000, 9000, 9000, 4900, 4900, 4900, 4900, 4900, 4900, 50, 25, 85, 25, 25, 50, 1, 0, 0, 0, 0, 1, 10808, 65535, 60, 1, 25, 0, 1, 2645, 1955, 5200, 4750, 0, 8000, 9000, 100, 1000, 0, 0, 40000, 0, 20000, 0, 800, 0, 35, 3, 440, 0, 55, 3, 41486, 0, 5520, 4400, 1000, 1000, 57, 5230, 65488, 1150, 1020, 1020, 0, 0, 0, 12, 0, 0, 0, 0, 2799, 0, 65535, 2000, 65535, 3100, 65535, 0, 0, 0]
2025-10-26 21:38:41.634 Request 03 ❘ 0x03 ~ 0340 ❘ 0x0154: {'count': 2}
2025-10-26 21:38:41.634 SENT: 5d 5f 00 00 00 06 01 03 01 54 00 02
2025-10-26 21:38:41.800 RECV: 5d 5f 00 00 00 07 01 03 04 4e 20 00 00
2025-10-26 21:38:41.801 DATA: [20000, 0]
2025-10-26 21:38:41.801 Request 03 ❘ 0x03 ~ 0500 ❘ 0x01F4: {'count': 59}
2025-10-26 21:38:41.801 SENT: 93 da 00 00 00 06 01 03 01 f4 00 3b
2025-10-26 21:38:42.089 RECV: 93 da 00 00 00 79 01 03 76 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 03 00 00 01 20 00 ee 19 b6 00 00 19 c7 00 00 00 ce 00 00 29 76 00 00 00 0d 00 00 02 45 3e 71 00 00 01 ba 00 00 00 00 00 00 00 00 17 3e 00 00 00 00 00 00 00 00 00 00 04 e2 05 dd 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 08 00 00 01 00 05 00 00 00 00 00 00 00 00 00 00 00 00
2025-10-26 21:38:42.089 DATA: [2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 288, 238, 6582, 0, 6599, 0, 206, 0, 10614, 0, 13, 0, 581, 15985, 0, 442, 0, 0, 0, 0, 5950, 0, 0, 0, 0, 0, 1250, 1501, 0, 0, 1, 0, 0, 0, 0, 1, 2048, 1, 5, 0, 0, 0, 0, 0, 0]
2025-10-26 21:38:42.090 Request 03 ❘ 0x03 ~ 0586 ❘ 0x024A: {'count': 123}
2025-10-26 21:38:42.090 SENT: 2a 54 00 00 00 06 01 03 02 4a 00 7b
2025-10-26 21:38:42.512 RECV: 2a 54 00 00 00 f9 01 03 f6 04 7e 14 7e 00 39 00 00 0a 18 09 a3 47 bd 00 00 09 a6 00 00 00 00 00 00 09 8c 09 90 09 90 00 00 00 00 00 00 00 03 00 16 00 00 00 19 00 00 13 88 01 85 02 03 00 6a 00 14 00 0e 00 0c 00 00 00 02 00 00 00 02 00 00 00 00 00 03 00 16 00 00 00 19 00 00 09 90 09 91 09 80 01 54 01 cc 00 b4 03 2f 04 86 01 d5 09 8a 09 8a 13 88 00 00 03 32 04 9c 01 d5 09 a3 09 9d 09 8f 09 8f 00 00 00 00 00 00 03 32 04 9c 01 d5 09 a3 09 a3 13 88 00 00 00 00 00 00 00 00 00 00 00 0a 00 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e1 00 00 00 9b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2025-10-26 21:38:42.513 DATA: [1150, 5246, 57, 0, 2584, 2467, 18365, 0, 2470, 0, 0, 0, 2444, 2448, 2448, 0, 0, 0, 3, 22, 0, 25, 0, 5000, 389, 515, 106, 20, 14, 12, 0, 2, 0, 2, 0, 0, 3, 22, 0, 25, 0, 2448, 2449, 2432, 340, 460, 180, 815, 1158, 469, 2442, 2442, 5000, 0, 818, 1180, 469, 2467, 2461, 2447, 2447, 0, 0, 0, 818, 1180, 469, 2467, 2467, 5000, 0, 0, 0, 0, 0, 10, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2025-10-26 21:38:42.514 self_check_time_number: 65535 is outside of range: {'min': 0, 'max': 1000, 'default': 0}
2025-10-26 21:38:42.514 battery_capacity_number: 20000 is outside of range: {'min': 0, 'max': 2000}
2025-10-26 21:38:42.516 off_grid_switch: 65535 is outside of range: {'min': 0, 'max': 1}
2025-10-26 21:38:42.519 generator_energy_sensor validation failed, triggered by state: 0.0 with conditions: {'min': 0.1}
2025-10-26 21:38:42.519 battery_corrected_capacity_sensor: 18365 is outside of range: {'min': 0, 'max': 3000}
2025-10-26 21:38:42.522 Returning 216 new values
2025-10-26 21:38:42.522 Finished fetching Inverter data in 6.013 seconds (success: True)
2025-10-26 21:38:42.522 {'identifiers': {('solarman', '01K8H3TZFBTJAKWT6F55HDNMAG'), ('solarman', '0')}, 'connections': set(), 'configuration_url': 'http://192.168.1.83/config_hide.html', 'serial_number': '0', 'manufacturer': 'Deye', 'model': 'SG0*LP3', 'name': 'Inverter'}
2025-10-26 21:38:42.522 async_setup_entry: async_migrate_entries
2025-10-26 21:38:42.523 async_setup_entry: hass.config_entries.async_forward_entry_setups: [<EntityPlatforms.SENSOR: 'sensor'>, <EntityPlatforms.BINARY_SENSOR: 'binary_sensor'>, <EntityPlatforms.NUMBER: 'number'>, <EntityPlatforms.SWITCH: 'switch'>, <EntityPlatforms.BUTTON: 'button'>, <EntityPlatforms.SELECT: 'select'>, <EntityPlatforms.DATETIME: 'datetime'>, <EntityPlatforms.TIME: 'time'>]
(...discovery entities etc. - due github limit I had to remove it...)
2025-10-26 21:38:47.171 Scheduling 1 query request: [{'code': 3, 'start': 586, 'end': 708, 'count': 123}] #5
2025-10-26 21:38:47.172 Request 03 ❘ 0x03 ~ 0586 ❘ 0x024A: {'count': 123}
2025-10-26 21:38:47.172 SENT: 31 ac 00 00 00 06 01 03 02 4a 00 7b
2025-10-26 21:38:47.468 RECV: 31 ac 00 00 00 f9 01 03 f6 04 7e 14 7e 00 39 00 00 09 ff 09 84 47 bd 00 00 09 87 00 00 00 00 00 00 09 8d 09 93 09 91 00 00 00 00 00 00 00 02 00 07 00 01 00 0a 00 00 13 8c 01 7f 02 02 00 69 00 14 00 0e 00 0c 00 00 00 02 00 00 00 02 00 00 00 00 00 02 00 07 00 01 00 0a 00 00 09 93 09 98 09 87 01 40 01 ea 00 aa 03 18 04 8a 01 d3 09 75 09 75 13 8c 00 00 03 1a 04 91 01 d4 09 7f 09 9b 09 92 09 8f 00 00 00 00 00 00 03 1a 04 91 01 d4 09 7f 09 7f 13 8c 00 00 00 00 00 00 00 00 00 00 00 0a 00 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e1 00 00 00 9b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2025-10-26 21:38:47.468 DATA: [1150, 5246, 57, 0, 2559, 2436, 18365, 0, 2439, 0, 0, 0, 2445, 2451, 2449, 0, 0, 0, 2, 7, 1, 10, 0, 5004, 383, 514, 105, 20, 14, 12, 0, 2, 0, 2, 0, 0, 2, 7, 1, 10, 0, 2451, 2456, 2439, 320, 490, 170, 792, 1162, 467, 2421, 2421, 5004, 0, 794, 1169, 468, 2431, 2459, 2450, 2447, 0, 0, 0, 794, 1169, 468, 2431, 2431, 5004, 0, 0, 0, 0, 0, 10, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2025-10-26 21:38:47.469 battery_corrected_capacity_sensor: 18365 is outside of range: {'min': 0, 'max': 3000}
2025-10-26 21:38:47.469 Returning 67 new values
2025-10-26 21:38:47.470 Finished fetching Inverter data in 0.301 seconds (success: True)
2025-10-26 21:38:52.172 Scheduling 1 query request: [{'code': 3, 'start': 586, 'end': 708, 'count': 123}] #10
2025-10-26 21:38:52.172 Request 03 ❘ 0x03 ~ 0586 ❘ 0x024A: {'count': 123}
2025-10-26 21:38:52.173 SENT: 34 22 00 00 00 06 01 03 02 4a 00 7b
2025-10-26 21:38:52.476 RECV: 34 22 00 00 00 f9 01 03 f6 04 7e 14 7e 00 39 00 00 0a 0d 09 bf 47 bd 00 00 09 c3 00 00 00 00 00 00 09 8d 09 97 09 8f 00 00 00 00 00 00 00 1b 00 24 00 1a 00 59 00 00 13 88 01 83 02 23 00 6d 00 14 00 0e 00 0c 00 00 00 03 00 00 00 03 00 00 00 00 00 1b 00 24 00 1a 00 59 00 00 09 92 09 96 09 86 01 54 01 cc 00 d2 03 15 04 ce 01 ed 09 d0 09 d0 13 88 00 00 03 30 04 f2 02 07 0a 29 09 96 09 88 09 89 00 00 00 00 00 00 03 30 04 f2 02 07 0a 29 0a 29 13 88 00 00 00 00 00 00 00 00 00 00 00 0a 00 02 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e0 00 00 00 9b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2025-10-26 21:38:52.477 DATA: [1150, 5246, 57, 0, 2573, 2495, 18365, 0, 2499, 0, 0, 0, 2445, 2455, 2447, 0, 0, 0, 27, 36, 26, 89, 0, 5000, 387, 547, 109, 20, 14, 12, 0, 3, 0, 3, 0, 0, 27, 36, 26, 89, 0, 2450, 2454, 2438, 340, 460, 210, 789, 1230, 493, 2512, 2512, 5000, 0, 816, 1266, 519, 2601, 2454, 2440, 2441, 0, 0, 0, 816, 1266, 519, 2601, 2601, 5000, 0, 0, 0, 0, 0, 10, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 0, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2025-10-26 21:38:52.478 battery_corrected_capacity_sensor: 18365 is outside of range: {'min': 0, 'max': 3000}
Description
My inverter: DEYE SUN-20K-SG05LP3-EU-SM2
I was using this integration via WiFi logger (LSW3 / LSW3_32U_5406_1.0B) - mostly good, but with connectivity issues.
So I decided to migrate to wired connection. I bought Waveshare RS485 converter and connected to Modbus port.
Here is converter configuration:
Integration protocol set to Modbus TCP.
After multiple tries of connecting to inverter I've successfuly added my inverter, but only with battery packs set to -1. During intialization detecting batteries fails and set it to 0.
If I specify real value = 5 in advanced options - initialization fails always.
If I do the same procedure with WiFi logger, but with Transparency mode and protocol set to Modbus TCP - batteries are detected properly.
Also notice strange error about battery capacity in logs.
Reproduction Steps
Inverter configuration:
Slave, Modbus SN: 01, Baud rate 9600
Maybe it is channel conflict? (BMS maybe?)
As mentioned in description: connecting via RS485 converter. With specified battery packs (fails entire initialization) or without (just doesn't identify batteries)
Log
Connection via RS485 converter:
Version
25.08.16
Home Assistant Core Version
2025.10.4
Home Assistant Operating System Version
16.2