diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index b31c99b..b146d94 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -245,10 +245,12 @@ class MikrotikControllerData: async def async_hwinfo_update(self): """Update Mikrotik hardware info""" try: - await asyncio.wait_for(self.lock.acquire(), timeout=10) + await asyncio.wait_for(self.lock.acquire(), timeout=30) except: return + _LOGGER.warning("Running async_hwinfo_update") + await self.hass.async_add_executor_job(self.get_capabilities) await self.hass.async_add_executor_job(self.get_system_routerboard) await self.hass.async_add_executor_job(self.get_system_resource) @@ -343,6 +345,9 @@ class MikrotikControllerData: # --------------------------- async def async_update(self): """Update Mikrotik data""" + if self.api.has_reconnected(): + await self.async_hwinfo_update() + try: await asyncio.wait_for(self.lock.acquire(), timeout=10) except: diff --git a/custom_components/mikrotik_router/mikrotikapi.py b/custom_components/mikrotik_router/mikrotikapi.py index ee224b3..06d6b17 100644 --- a/custom_components/mikrotik_router/mikrotikapi.py +++ b/custom_components/mikrotik_router/mikrotikapi.py @@ -48,6 +48,7 @@ class MikrotikAPI: self._connection = None self._connected = False + self._reconnected = False self._connection_epoch = 0 self._connection_retry_sec = 58 self.error = None @@ -58,6 +59,17 @@ class MikrotikAPI: if not self._port: self._port = 8729 if self._use_ssl else 8728 + # --------------------------- + # has_reconnected + # --------------------------- + def has_reconnected(self) -> bool: + """Check if mikrotik has reconnected""" + if self._reconnected: + self._reconnected = False + return True + + return False + # --------------------------- # connection_check # --------------------------- @@ -90,17 +102,18 @@ class MikrotikAPI: self.connection_error_reported = True + self._reconnected = False self._connected = False self._connection = None self._connection_epoch = 0 - + # --------------------------- # connect # --------------------------- def connect(self) -> bool: """Connect to Mikrotik device.""" self.error = "" - self._connected = None + self._connected = False self._connection_epoch = time() kwargs = { @@ -161,6 +174,7 @@ class MikrotikAPI: _LOGGER.debug("Mikrotik Connected to %s", self._host) self._connected = True + self._reconnected = True self.lock.release() return self._connected