diff --git a/custom_components/mikrotik_router/mikrotikapi.py b/custom_components/mikrotik_router/mikrotikapi.py index cc0889b..58c878a 100644 --- a/custom_components/mikrotik_router/mikrotikapi.py +++ b/custom_components/mikrotik_router/mikrotikapi.py @@ -51,6 +51,15 @@ class MikrotikAPI: if not self._port: self._port = 8729 if self._use_ssl else 8728 + # --------------------------- + # disconnect + # --------------------------- + def disconnect(self) -> bool: + """Disconnect from Mikrotik device.""" + self._connected = False + self._connection = None + self._connection_epoch = 0 + # --------------------------- # connect # --------------------------- @@ -157,10 +166,12 @@ class MikrotikAPI: ) as api_error: self.lock.release() _LOGGER.error("Mikrotik %s error while path %s", self._host, api_error) + self.disconnect() return None except: self.lock.release() _LOGGER.error("Mikrotik %s error while path %s", self._host, "unknown") + self.disconnect() return None else: self.lock.release() @@ -218,10 +229,12 @@ class MikrotikAPI: ) as api_error: self.lock.release() _LOGGER.error("Mikrotik %s error while update %s", self._host, api_error) + self.disconnect() return False except: self.lock.release() _LOGGER.error("Mikrotik %s error while update %s", self._host, "unknown") + self.disconnect() return False else: self.lock.release() @@ -279,10 +292,12 @@ class MikrotikAPI: ) as api_error: self.lock.release() _LOGGER.error("Mikrotik %s error while run_script %s", self._host, api_error) + self.disconnect() return False except: self.lock.release() _LOGGER.error("Mikrotik %s error while run_script %s", self._host, "unknown") + self.disconnect() return False else: self.lock.release() @@ -333,10 +348,12 @@ class MikrotikAPI: ) as api_error: self.lock.release() _LOGGER.error("Mikrotik %s error while get_traffic %s", self._host, api_error) + self.disconnect() return None except: self.lock.release() _LOGGER.error("Mikrotik %s error while get_traffic %s", self._host, "unknown") + self.disconnect() return None else: self.lock.release()