|
19 | 19 | BATTERY_REG_BASE,
|
20 | 20 | DOMAIN,
|
21 | 21 | METER_REG_BASE,
|
| 22 | + PYMODBUS_REQUIRED_VERSION, |
22 | 23 | ConfDefaultFlag,
|
23 | 24 | ConfDefaultInt,
|
24 | 25 | ConfDefaultStr,
|
@@ -202,6 +203,18 @@ def __init__(
|
202 | 203 | async def _async_init_solaredge(self) -> None:
|
203 | 204 | """Detect devices and load initial modbus data from inverters."""
|
204 | 205 |
|
| 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 | + |
205 | 218 | if not self.is_connected:
|
206 | 219 | ir.async_create_issue(
|
207 | 220 | self._hass,
|
@@ -628,6 +641,15 @@ async def write_registers(self, unit: int, address: int, payload) -> None:
|
628 | 641 | self.disconnect()
|
629 | 642 | raise ModbusWriteError(result)
|
630 | 643 |
|
| 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 | + |
631 | 653 | @property
|
632 | 654 | def online(self):
|
633 | 655 | return self._online
|
@@ -723,6 +745,10 @@ def number_of_inverters(self) -> int:
|
723 | 745 | def sleep_after_write(self) -> int:
|
724 | 746 | return self._sleep_after_write
|
725 | 747 |
|
| 748 | + @property |
| 749 | + def pymodbus_required_version(self) -> str: |
| 750 | + return PYMODBUS_REQUIRED_VERSION |
| 751 | + |
726 | 752 | @property
|
727 | 753 | def pymodbus_version(self) -> str:
|
728 | 754 | return self._pymodbus_version
|
|
0 commit comments