Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions custom_components/solaredge_modbus_multi/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
DOMAIN = "solaredge_modbus_multi"
DEFAULT_NAME = "SolarEdge"

# raise a startup exception if pymodbus version is less than this
PYMODBUS_REQUIRED_VERSION = "3.8.3"

# units missing in homeassistant core
ENERGY_VOLT_AMPERE_HOUR: Final = "VAh"
ENERGY_VOLT_AMPERE_REACTIVE_HOUR: Final = "varh"
Expand Down
26 changes: 26 additions & 0 deletions custom_components/solaredge_modbus_multi/hub.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
BATTERY_REG_BASE,
DOMAIN,
METER_REG_BASE,
PYMODBUS_REQUIRED_VERSION,
ConfDefaultFlag,
ConfDefaultInt,
ConfDefaultStr,
Expand Down Expand Up @@ -202,6 +203,18 @@ def __init__(
async def _async_init_solaredge(self) -> None:
"""Detect devices and load initial modbus data from inverters."""

pymodbus_version_tuple = self._safe_version_tuple(self.pymodbus_version)
required_version_tuple = self._safe_version_tuple(
self.pymodbus_required_version
)

if pymodbus_version_tuple < required_version_tuple:
raise HubInitFailed(
f"pymodbus version must be at least {self.pymodbus_required_version}, "
f"but {self.pymodbus_version} is installed. Please remove other custom "
"integrations that depend on an older version of pymodbus and restart."
)

if not self.is_connected:
ir.async_create_issue(
self._hass,
Expand Down Expand Up @@ -628,6 +641,15 @@ async def write_registers(self, unit: int, address: int, payload) -> None:
self.disconnect()
raise ModbusWriteError(result)

@staticmethod
def _safe_version_tuple(version_str: str) -> tuple[int, ...]:
try:
version_parts = version_str.split(".")
version_tuple = tuple(int(part) for part in version_parts)
return version_tuple
except ValueError:
raise ValueError(f"Invalid version string: {version_str}")

@property
def online(self):
return self._online
Expand Down Expand Up @@ -723,6 +745,10 @@ def number_of_inverters(self) -> int:
def sleep_after_write(self) -> int:
return self._sleep_after_write

@property
def pymodbus_required_version(self) -> str:
return PYMODBUS_REQUIRED_VERSION

@property
def pymodbus_version(self) -> str:
return self._pymodbus_version
Expand Down
2 changes: 1 addition & 1 deletion custom_components/solaredge_modbus_multi/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -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.1"
"version": "3.1.2-pre.2"
}