Skip to content

Commit 0d108b2

Browse files
authored
Add files via upload
1 parent b6fe65e commit 0d108b2

2 files changed

Lines changed: 14 additions & 16 deletions

File tree

custom_components/solax_modbus/__init__.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
CONF_HOST,
2121
CONF_NAME,
2222
CONF_PORT,
23-
EVENT_HOMEASSISTANT_STARTED,
2423
EVENT_HOMEASSISTANT_STOP,
2524
PERCENTAGE,
2625
Platform,
@@ -414,19 +413,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
414413
"hub": hub,
415414
}
416415

417-
# Tests on some systems have shown that establishing the Modbus connection
418-
# can occasionally lead to errors if Home Assistant is not fully loaded.
419-
if hass.is_running:
420-
# Start init in background so it can be cancelled on unload
421-
hub._init_task = hass.loop.create_task(hub.async_init())
422-
else:
423-
# Defer until HA is started, but still capture the task handle for cancellation
424-
async def _deferred_init(event: Any) -> None:
425-
if getattr(hub, "_stopping", False):
426-
return
427-
hub._init_task = hass.loop.create_task(hub.async_init())
428-
429-
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, _deferred_init)
416+
await hub.async_init()
430417

431418
entry.async_on_unload(entry.add_update_listener(config_entry_update_listener))
432419
return True
@@ -590,6 +577,8 @@ def __init__(
590577
self.config: Any = config # MappingProxyType from entry.options
591578
self.entry: ConfigEntry = entry
592579
self.device_info: DeviceInfo | None = None
580+
self.inverter_model: str | None = None
581+
self._has_local_inverter_model: bool = False
593582
self.blocks_changed: bool = False
594583
self.initial_groups: dict[Any, Any] = {} # as returned by the sensor setup - holdingRegs and inputRegs should not change
595584

@@ -691,7 +680,7 @@ async def async_init(self, *args: Any) -> None: # noqa: D102
691680
self.device_info = DeviceInfo(
692681
identifiers=cast(set[tuple[str, str]], {(DOMAIN, self._name, INVERTER_IDENT)}),
693682
manufacturer=self.plugin.plugin_manufacturer,
694-
model=getattr(self.plugin, "inverter_model", None),
683+
model=self._get_inverter_model(),
695684
name=plugin_name,
696685
serial_number=self.seriesnumber,
697686
sw_version=self.plugin.getSoftwareVersion(self.data),
@@ -722,6 +711,11 @@ async def async_init(self, *args: Any) -> None: # noqa: D102
722711

723712
self._init_task = None
724713

714+
def _get_inverter_model(self) -> str | None:
715+
if self._has_local_inverter_model:
716+
return self.inverter_model
717+
return getattr(self.plugin, "inverter_model", None)
718+
725719
async def _deferred_setup_loop(self, interval: int = 30) -> None:
726720
"""Keep trying to detect inverter type and forward platforms once online."""
727721
import asyncio
@@ -743,7 +737,7 @@ async def _deferred_setup_loop(self, interval: int = 30) -> None:
743737
self.device_info = DeviceInfo(
744738
identifiers=cast(set[tuple[str, str]], {(DOMAIN, self._name, INVERTER_IDENT)}),
745739
manufacturer=self.plugin.plugin_manufacturer,
746-
model=getattr(self.plugin, "inverter_model", None),
740+
model=self._get_inverter_model(),
747741
name=plugin_name,
748742
serial_number=self.seriesnumber,
749743
sw_version=self.plugin.getSoftwareVersion(self.data),

custom_components/solax_modbus/plugin_solax.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11300,6 +11300,7 @@ def wakeupButton(self) -> str:
1130011300
async def async_determineInverterType(self, hub: Any, configdict: dict[str, Any]) -> int:
1130111301
# global SENSOR_TYPES
1130211302
_LOGGER.info(f"{hub.name}: trying to determine inverter type")
11303+
self.inverter_model = None
1130311304
seriesnumber = await async_read_serialnr(hub, 0x0)
1130411305
if not seriesnumber:
1130511306
seriesnumber = await async_read_serialnr(hub, 0x300) # bug in Endian.LITTLE decoding?
@@ -11685,6 +11686,9 @@ async def async_determineInverterType(self, hub: Any, configdict: dict[str, Any]
1168511686
invertertype = 0
1168611687
_LOGGER.error(f"unrecognized inverter type - serial number : {seriesnumber}")
1168711688

11689+
hub.inverter_model = self.inverter_model if invertertype > 0 else None
11690+
hub._has_local_inverter_model = True
11691+
1168811692
if invertertype > 0:
1168911693
# Firmware metadata is needed before the first poll so the device registry and
1169011694
# protocol-specific register filters start with the right values.

0 commit comments

Comments
 (0)