Skip to content

Commit 9a8fd3f

Browse files
Merge pull request #805 from WillCodeForCats/767-check-for-old-versions-of-pymodbus
Add required pymodbus version startup check
2 parents ba5d806 + 88a40b1 commit 9a8fd3f

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

custom_components/solaredge_modbus_multi/const.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
DOMAIN = "solaredge_modbus_multi"
1010
DEFAULT_NAME = "SolarEdge"
1111

12+
# raise a startup exception if pymodbus version is less than this
13+
PYMODBUS_REQUIRED_VERSION = "3.8.3"
14+
1215
# units missing in homeassistant core
1316
ENERGY_VOLT_AMPERE_HOUR: Final = "VAh"
1417
ENERGY_VOLT_AMPERE_REACTIVE_HOUR: Final = "varh"

custom_components/solaredge_modbus_multi/hub.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
BATTERY_REG_BASE,
2020
DOMAIN,
2121
METER_REG_BASE,
22+
PYMODBUS_REQUIRED_VERSION,
2223
ConfDefaultFlag,
2324
ConfDefaultInt,
2425
ConfDefaultStr,
@@ -202,6 +203,18 @@ def __init__(
202203
async def _async_init_solaredge(self) -> None:
203204
"""Detect devices and load initial modbus data from inverters."""
204205

206+
pymodbus_version_tuple = self._safe_version_tuple(self.pymodbus_version)
207+
required_version_tuple = self._safe_version_tuple(
208+
self.pymodbus_required_version
209+
)
210+
211+
if pymodbus_version_tuple < required_version_tuple:
212+
raise HubInitFailed(
213+
f"pymodbus version must be at least {self.pymodbus_required_version}, "
214+
f"but {self.pymodbus_version} is installed. Please remove other custom "
215+
"integrations that depend on an older version of pymodbus and restart."
216+
)
217+
205218
if not self.is_connected:
206219
ir.async_create_issue(
207220
self._hass,
@@ -628,6 +641,15 @@ async def write_registers(self, unit: int, address: int, payload) -> None:
628641
self.disconnect()
629642
raise ModbusWriteError(result)
630643

644+
@staticmethod
645+
def _safe_version_tuple(version_str: str) -> tuple[int, ...]:
646+
try:
647+
version_parts = version_str.split(".")
648+
version_tuple = tuple(int(part) for part in version_parts)
649+
return version_tuple
650+
except ValueError:
651+
raise ValueError(f"Invalid version string: {version_str}")
652+
631653
@property
632654
def online(self):
633655
return self._online
@@ -723,6 +745,10 @@ def number_of_inverters(self) -> int:
723745
def sleep_after_write(self) -> int:
724746
return self._sleep_after_write
725747

748+
@property
749+
def pymodbus_required_version(self) -> str:
750+
return PYMODBUS_REQUIRED_VERSION
751+
726752
@property
727753
def pymodbus_version(self) -> str:
728754
return self._pymodbus_version

custom_components/solaredge_modbus_multi/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@
1010
"issue_tracker": "https://github.com/WillCodeForCats/solaredge-modbus-multi/issues",
1111
"loggers": ["custom_components.solaredge_modbus_multi"],
1212
"requirements": ["pymodbus>=3.8.3"],
13-
"version": "3.1.1"
13+
"version": "3.1.2-pre.2"
1414
}

0 commit comments

Comments
 (0)