mirror of
https://github.com/esphome/esphome.git
synced 2025-03-15 15:18:16 +00:00
Update client.py
This commit is contained in:
parent
f05449f544
commit
c9cd1257c3
@ -132,8 +132,8 @@ class APIClient(threading.Thread):
|
|||||||
if self._connected:
|
if self._connected:
|
||||||
try:
|
try:
|
||||||
self.ping()
|
self.ping()
|
||||||
except APIConnectionError:
|
except APIConnectionError as err:
|
||||||
self._fatal_error()
|
self._fatal_error(err)
|
||||||
else:
|
else:
|
||||||
self._refresh_ping()
|
self._refresh_ping()
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ class APIClient(threading.Thread):
|
|||||||
raise APIConnectionError("You need to call start() first!")
|
raise APIConnectionError("You need to call start() first!")
|
||||||
|
|
||||||
if self._connected:
|
if self._connected:
|
||||||
raise APIConnectionError("Already connected!")
|
self.disconnect(on_disconnect=False)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ip = resolve_ip_address(self._address)
|
ip = resolve_ip_address(self._address)
|
||||||
@ -193,8 +193,9 @@ class APIClient(threading.Thread):
|
|||||||
try:
|
try:
|
||||||
self._socket.connect((ip, self._port))
|
self._socket.connect((ip, self._port))
|
||||||
except socket.error as err:
|
except socket.error as err:
|
||||||
self._fatal_error()
|
err = APIConnectionError("Error connecting to {}: {}".format(ip, err))
|
||||||
raise APIConnectionError("Error connecting to {}: {}".format(ip, err))
|
self._fatal_error(err)
|
||||||
|
raise err
|
||||||
self._socket.settimeout(0.1)
|
self._socket.settimeout(0.1)
|
||||||
|
|
||||||
self._socket_open_event.set()
|
self._socket_open_event.set()
|
||||||
@ -204,7 +205,7 @@ class APIClient(threading.Thread):
|
|||||||
try:
|
try:
|
||||||
resp = self._send_message_await_response(hello, pb.HelloResponse)
|
resp = self._send_message_await_response(hello, pb.HelloResponse)
|
||||||
except APIConnectionError as err:
|
except APIConnectionError as err:
|
||||||
self._fatal_error()
|
self._fatal_error(err)
|
||||||
raise err
|
raise err
|
||||||
_LOGGER.debug("Successfully connected to %s ('%s' API=%s.%s)", self._address,
|
_LOGGER.debug("Successfully connected to %s ('%s' API=%s.%s)", self._address,
|
||||||
resp.server_info, resp.api_version_major, resp.api_version_minor)
|
resp.server_info, resp.api_version_major, resp.api_version_minor)
|
||||||
@ -214,8 +215,9 @@ class APIClient(threading.Thread):
|
|||||||
|
|
||||||
def _check_connected(self):
|
def _check_connected(self):
|
||||||
if not self._connected:
|
if not self._connected:
|
||||||
self._fatal_error()
|
err = APIConnectionError("Must be connected!")
|
||||||
raise APIConnectionError("Must be connected!")
|
self._fatal_error(err)
|
||||||
|
raise err
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
self._check_connected()
|
self._check_connected()
|
||||||
@ -233,13 +235,13 @@ class APIClient(threading.Thread):
|
|||||||
if self.on_login is not None:
|
if self.on_login is not None:
|
||||||
self.on_login()
|
self.on_login()
|
||||||
|
|
||||||
def _fatal_error(self):
|
def _fatal_error(self, err):
|
||||||
was_connected = self._connected
|
was_connected = self._connected
|
||||||
|
|
||||||
self._close_socket()
|
self._close_socket()
|
||||||
|
|
||||||
if was_connected and self.on_disconnect is not None:
|
if was_connected and self.on_disconnect is not None:
|
||||||
self.on_disconnect()
|
self.on_disconnect(err)
|
||||||
|
|
||||||
def _write(self, data): # type: (bytes) -> None
|
def _write(self, data): # type: (bytes) -> None
|
||||||
if self._socket is None:
|
if self._socket is None:
|
||||||
@ -250,8 +252,9 @@ class APIClient(threading.Thread):
|
|||||||
try:
|
try:
|
||||||
self._socket.sendall(data)
|
self._socket.sendall(data)
|
||||||
except socket.error as err:
|
except socket.error as err:
|
||||||
self._fatal_error()
|
err = APIConnectionError("Error while writing data: {}".format(err))
|
||||||
raise APIConnectionError("Error while writing data: {}".format(err))
|
self._fatal_error(err)
|
||||||
|
raise err
|
||||||
|
|
||||||
def _send_message(self, msg):
|
def _send_message(self, msg):
|
||||||
# type: (message.Message) -> None
|
# type: (message.Message) -> None
|
||||||
@ -271,7 +274,6 @@ class APIClient(threading.Thread):
|
|||||||
req += _varuint_to_bytes(message_type)
|
req += _varuint_to_bytes(message_type)
|
||||||
req += encoded
|
req += encoded
|
||||||
self._write(req)
|
self._write(req)
|
||||||
self._refresh_ping()
|
|
||||||
|
|
||||||
def _send_message_await_response_complex(self, send_msg, do_append, do_stop, timeout=1):
|
def _send_message_await_response_complex(self, send_msg, do_append, do_stop, timeout=1):
|
||||||
event = threading.Event()
|
event = threading.Event()
|
||||||
@ -309,7 +311,7 @@ class APIClient(threading.Thread):
|
|||||||
self._check_connected()
|
self._check_connected()
|
||||||
return self._send_message_await_response(pb.PingRequest(), pb.PingResponse)
|
return self._send_message_await_response(pb.PingRequest(), pb.PingResponse)
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self, on_disconnect=True):
|
||||||
self._check_connected()
|
self._check_connected()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -318,7 +320,7 @@ class APIClient(threading.Thread):
|
|||||||
pass
|
pass
|
||||||
self._close_socket()
|
self._close_socket()
|
||||||
|
|
||||||
if self.on_disconnect is not None:
|
if self.on_disconnect is not None and on_disconnect:
|
||||||
self.on_disconnect()
|
self.on_disconnect()
|
||||||
|
|
||||||
def _check_authenticated(self):
|
def _check_authenticated(self):
|
||||||
@ -399,7 +401,7 @@ class APIClient(threading.Thread):
|
|||||||
break
|
break
|
||||||
if self._connected:
|
if self._connected:
|
||||||
_LOGGER.error("Error while reading incoming messages: %s", err)
|
_LOGGER.error("Error while reading incoming messages: %s", err)
|
||||||
self._fatal_error()
|
self._fatal_error(err)
|
||||||
self._running_event.clear()
|
self._running_event.clear()
|
||||||
|
|
||||||
def _handle_internal_messages(self, msg):
|
def _handle_internal_messages(self, msg):
|
||||||
@ -431,12 +433,12 @@ def run_logs(config, address):
|
|||||||
|
|
||||||
has_connects = []
|
has_connects = []
|
||||||
|
|
||||||
def try_connect(tries=0, is_disconnect=True):
|
def try_connect(err, tries=0):
|
||||||
if stopping:
|
if stopping:
|
||||||
return
|
return
|
||||||
|
|
||||||
if is_disconnect:
|
if err:
|
||||||
_LOGGER.warning(u"Disconnected from API.")
|
_LOGGER.warning(u"Disconnected from API: %s", err)
|
||||||
|
|
||||||
while retry_timer:
|
while retry_timer:
|
||||||
retry_timer.pop(0).cancel()
|
retry_timer.pop(0).cancel()
|
||||||
@ -460,7 +462,7 @@ def run_logs(config, address):
|
|||||||
else:
|
else:
|
||||||
_LOGGER.warning(u"Couldn't connect to API (%s). Trying to reconnect in %s seconds",
|
_LOGGER.warning(u"Couldn't connect to API (%s). Trying to reconnect in %s seconds",
|
||||||
error, wait_time)
|
error, wait_time)
|
||||||
timer = threading.Timer(wait_time, functools.partial(try_connect, tries + 1, is_disconnect))
|
timer = threading.Timer(wait_time, functools.partial(try_connect, None, tries + 1))
|
||||||
timer.start()
|
timer.start()
|
||||||
retry_timer.append(timer)
|
retry_timer.append(timer)
|
||||||
|
|
||||||
@ -484,7 +486,7 @@ def run_logs(config, address):
|
|||||||
cli.start()
|
cli.start()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
try_connect(is_disconnect=False)
|
try_connect(None)
|
||||||
while True:
|
while True:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user