From a49c684fcdb5631794c107bae78100d475be605b Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:01:39 -0700 Subject: [PATCH 1/5] Update ExceptionResponse import for pymodbus 3.11 --- .../solaredge_modbus_multi/hub.py | 18 +++++++++++++++++- .../solaredge_modbus_multi/manifest.json | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/custom_components/solaredge_modbus_multi/hub.py b/custom_components/solaredge_modbus_multi/hub.py index db6bb37d..3e4fc2dc 100644 --- a/custom_components/solaredge_modbus_multi/hub.py +++ b/custom_components/solaredge_modbus_multi/hub.py @@ -14,7 +14,10 @@ from pymodbus.client import AsyncModbusTcpClient from pymodbus.client.mixin import ModbusClientMixin from pymodbus.exceptions import ConnectionException, ModbusIOException -from pymodbus.pdu import ExceptionResponse +try: + from pymodbus.pdu.pdu import ExceptionResponse +except ImportError: + from pymodbus.pdu import ExceptionResponse from .const import ( BATTERY_REG_BASE, @@ -528,6 +531,11 @@ async def modbus_read_holding_registers(self, unit, address, rcount): sig = inspect.signature(self._client.read_holding_registers) + _LOGGER.debug( + f"I{self._rr_unit}: modbus_read_holding_registers " + f"address={self._rr_address} count={self._rr_count}" + ) + if "device_id" in sig.parameters: result = await self._client.read_holding_registers( address=self._rr_address, count=self._rr_count, device_id=self._rr_unit @@ -537,7 +545,15 @@ async def modbus_read_holding_registers(self, unit, address, rcount): address=self._rr_address, count=self._rr_count, slave=self._rr_unit ) + _LOGGER.debug( + f"I{self._rr_unit}: result is error: {result.isError()} " + ) + if result.isError(): + _LOGGER.debug( + f"I{self._rr_unit}: error result: {type(result)} " + ) + if type(result) is ModbusIOException: raise ModbusIOError(result) diff --git a/custom_components/solaredge_modbus_multi/manifest.json b/custom_components/solaredge_modbus_multi/manifest.json index e08633de..5d89260d 100644 --- a/custom_components/solaredge_modbus_multi/manifest.json +++ b/custom_components/solaredge_modbus_multi/manifest.json @@ -10,5 +10,5 @@ "issue_tracker": "https://github.com/WillCodeForCats/solaredge-modbus-multi/issues", "loggers": ["custom_components.solaredge_modbus_multi"], "requirements": ["pymodbus>=3.8.3"], - "version": "3.1.6" + "version": "3.2.0-pre.1" } From c1273b7ab250bb9fd1da78f65b63397f0088ca2d Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:42:37 -0700 Subject: [PATCH 2/5] Format with black and ruff --- custom_components/solaredge_modbus_multi/hub.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/custom_components/solaredge_modbus_multi/hub.py b/custom_components/solaredge_modbus_multi/hub.py index 3e4fc2dc..64b713a8 100644 --- a/custom_components/solaredge_modbus_multi/hub.py +++ b/custom_components/solaredge_modbus_multi/hub.py @@ -14,6 +14,7 @@ from pymodbus.client import AsyncModbusTcpClient from pymodbus.client.mixin import ModbusClientMixin from pymodbus.exceptions import ConnectionException, ModbusIOException + try: from pymodbus.pdu.pdu import ExceptionResponse except ImportError: @@ -107,7 +108,6 @@ class DeviceInvalid(SolarEdgeException): class SolarEdgeModbusMultiHub: - def __init__( self, hass: HomeAssistant, @@ -545,14 +545,10 @@ async def modbus_read_holding_registers(self, unit, address, rcount): address=self._rr_address, count=self._rr_count, slave=self._rr_unit ) - _LOGGER.debug( - f"I{self._rr_unit}: result is error: {result.isError()} " - ) + _LOGGER.debug(f"I{self._rr_unit}: result is error: {result.isError()} ") if result.isError(): - _LOGGER.debug( - f"I{self._rr_unit}: error result: {type(result)} " - ) + _LOGGER.debug(f"I{self._rr_unit}: error result: {type(result)} ") if type(result) is ModbusIOException: raise ModbusIOError(result) From d8aa667c8a5e5b0dda17710338a77b4fa9a95386 Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:44:19 -0700 Subject: [PATCH 3/5] Change version --- custom_components/solaredge_modbus_multi/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/solaredge_modbus_multi/manifest.json b/custom_components/solaredge_modbus_multi/manifest.json index 5d89260d..c21903b2 100644 --- a/custom_components/solaredge_modbus_multi/manifest.json +++ b/custom_components/solaredge_modbus_multi/manifest.json @@ -10,5 +10,5 @@ "issue_tracker": "https://github.com/WillCodeForCats/solaredge-modbus-multi/issues", "loggers": ["custom_components.solaredge_modbus_multi"], "requirements": ["pymodbus>=3.8.3"], - "version": "3.2.0-pre.1" + "version": "3.1.7-pre.1" } From 9a015f8ebe515b2713be3538bb556ba0187c053c Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:50:32 -0700 Subject: [PATCH 4/5] Add some comments, remove compat in future --- custom_components/solaredge_modbus_multi/hub.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/custom_components/solaredge_modbus_multi/hub.py b/custom_components/solaredge_modbus_multi/hub.py index 64b713a8..34cac0e0 100644 --- a/custom_components/solaredge_modbus_multi/hub.py +++ b/custom_components/solaredge_modbus_multi/hub.py @@ -16,8 +16,10 @@ from pymodbus.exceptions import ConnectionException, ModbusIOException try: + # for pymodbus 3.11.1 and newer from pymodbus.pdu.pdu import ExceptionResponse except ImportError: + # or backwards compatibility from pymodbus.pdu import ExceptionResponse from .const import ( From eed9c746e2df8e08e43acc261b3dd7473c1b6c9a Mon Sep 17 00:00:00 2001 From: WillCodeForCats <48533968+WillCodeForCats@users.noreply.github.com> Date: Wed, 3 Sep 2025 17:55:13 -0700 Subject: [PATCH 5/5] Update hub.py --- custom_components/solaredge_modbus_multi/hub.py | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_components/solaredge_modbus_multi/hub.py b/custom_components/solaredge_modbus_multi/hub.py index 34cac0e0..54a42ed2 100644 --- a/custom_components/solaredge_modbus_multi/hub.py +++ b/custom_components/solaredge_modbus_multi/hub.py @@ -110,6 +110,7 @@ class DeviceInvalid(SolarEdgeException): class SolarEdgeModbusMultiHub: + def __init__( self, hass: HomeAssistant,