From 94a80656c31d7325cde8322c798905b365c1540b Mon Sep 17 00:00:00 2001 From: tomaae <23486452+tomaae@users.noreply.github.com> Date: Wed, 11 Mar 2020 20:01:29 +0100 Subject: [PATCH] api disconnects from router on communication error --- .../mikrotik_router/mikrotikapi.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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()