mirror of
https://github.com/XiaoMi/ha_xiaomi_home.git
synced 2026-01-15 14:01:14 +08:00
fix: fix mips re-connect error
This commit is contained in:
parent
36bf686629
commit
00a8c69f4b
@ -356,7 +356,7 @@ class MIoTClient:
|
|||||||
# Cloud mips
|
# Cloud mips
|
||||||
self._mips_cloud.unsub_mips_state(
|
self._mips_cloud.unsub_mips_state(
|
||||||
key=f'{self._uid}-{self._cloud_server}')
|
key=f'{self._uid}-{self._cloud_server}')
|
||||||
self._mips_cloud.disconnect()
|
self._mips_cloud.deinit()
|
||||||
# Cancel refresh cloud devices
|
# Cancel refresh cloud devices
|
||||||
if self._refresh_cloud_devices_timer:
|
if self._refresh_cloud_devices_timer:
|
||||||
self._refresh_cloud_devices_timer.cancel()
|
self._refresh_cloud_devices_timer.cancel()
|
||||||
@ -369,7 +369,7 @@ class MIoTClient:
|
|||||||
for mips in self._mips_local.values():
|
for mips in self._mips_local.values():
|
||||||
mips.on_dev_list_changed = None
|
mips.on_dev_list_changed = None
|
||||||
mips.unsub_mips_state(key=mips.group_id)
|
mips.unsub_mips_state(key=mips.group_id)
|
||||||
mips.disconnect()
|
mips.deinit()
|
||||||
if self._mips_local_state_changed_timers:
|
if self._mips_local_state_changed_timers:
|
||||||
for timer_item in (
|
for timer_item in (
|
||||||
self._mips_local_state_changed_timers.values()):
|
self._mips_local_state_changed_timers.values()):
|
||||||
|
|||||||
@ -229,6 +229,7 @@ class _MipsClient(ABC):
|
|||||||
_ca_file: Optional[str]
|
_ca_file: Optional[str]
|
||||||
_cert_file: Optional[str]
|
_cert_file: Optional[str]
|
||||||
_key_file: Optional[str]
|
_key_file: Optional[str]
|
||||||
|
_tls_done: bool
|
||||||
|
|
||||||
_mqtt_logger: Optional[logging.Logger]
|
_mqtt_logger: Optional[logging.Logger]
|
||||||
_mqtt: Client
|
_mqtt: Client
|
||||||
@ -271,6 +272,7 @@ class _MipsClient(ABC):
|
|||||||
self._ca_file = ca_file
|
self._ca_file = ca_file
|
||||||
self._cert_file = cert_file
|
self._cert_file = cert_file
|
||||||
self._key_file = key_file
|
self._key_file = key_file
|
||||||
|
self._tls_done = False
|
||||||
|
|
||||||
self._mqtt_logger = None
|
self._mqtt_logger = None
|
||||||
self._mqtt_fd = -1
|
self._mqtt_fd = -1
|
||||||
@ -328,19 +330,36 @@ class _MipsClient(ABC):
|
|||||||
self._client_id if thread_name is None else thread_name)
|
self._client_id if thread_name is None else thread_name)
|
||||||
self._mips_thread.start()
|
self._mips_thread.start()
|
||||||
|
|
||||||
@final
|
async def connect_async(self) -> None:
|
||||||
def close(self) -> None:
|
"""mips connect async."""
|
||||||
self._internal_loop.call_soon_threadsafe(self.__mips_close)
|
self.connect()
|
||||||
if self._mips_thread:
|
await self._event_connect.wait()
|
||||||
self._mips_thread.join()
|
|
||||||
|
def disconnect(self) -> None:
|
||||||
|
"""mips disconnect."""
|
||||||
|
if not self._mips_thread:
|
||||||
|
return
|
||||||
|
self._internal_loop.call_soon_threadsafe(self.__mips_disconnect)
|
||||||
|
self._mips_thread.join()
|
||||||
|
self._mips_thread = None
|
||||||
self._internal_loop.close()
|
self._internal_loop.close()
|
||||||
|
|
||||||
|
async def disconnect_async(self) -> None:
|
||||||
|
"""mips disconnect async."""
|
||||||
|
self.disconnect()
|
||||||
|
await self._event_disconnect.wait()
|
||||||
|
|
||||||
|
@final
|
||||||
|
def deinit(self) -> None:
|
||||||
|
self.disconnect()
|
||||||
|
|
||||||
self._logger = None
|
self._logger = None
|
||||||
self._username = None
|
self._username = None
|
||||||
self._password = None
|
self._password = None
|
||||||
self._ca_file = None
|
self._ca_file = None
|
||||||
self._cert_file = None
|
self._cert_file = None
|
||||||
self._key_file = None
|
self._key_file = None
|
||||||
|
self._tls_done = False
|
||||||
self._mqtt_logger = None
|
self._mqtt_logger = None
|
||||||
with self._mips_state_sub_map_lock:
|
with self._mips_state_sub_map_lock:
|
||||||
self._mips_state_sub_map.clear()
|
self._mips_state_sub_map.clear()
|
||||||
@ -375,20 +394,6 @@ class _MipsClient(ABC):
|
|||||||
else:
|
else:
|
||||||
self._mqtt.disable_logger()
|
self._mqtt.disable_logger()
|
||||||
|
|
||||||
async def connect_async(self) -> None:
|
|
||||||
"""mips connect async."""
|
|
||||||
self.connect()
|
|
||||||
await self._event_connect.wait()
|
|
||||||
|
|
||||||
def disconnect(self) -> None:
|
|
||||||
"""mips disconnect."""
|
|
||||||
self._internal_loop.call_soon_threadsafe(self.__mips_disconnect)
|
|
||||||
|
|
||||||
async def disconnect_async(self) -> None:
|
|
||||||
"""mips disconnect async."""
|
|
||||||
self.disconnect()
|
|
||||||
await self._event_disconnect.wait()
|
|
||||||
|
|
||||||
@final
|
@final
|
||||||
def sub_mips_state(
|
def sub_mips_state(
|
||||||
self, key: str, handler: Callable[[str, bool], Coroutine]
|
self, key: str, handler: Callable[[str, bool], Coroutine]
|
||||||
@ -586,19 +591,21 @@ class _MipsClient(ABC):
|
|||||||
if self._username:
|
if self._username:
|
||||||
self._mqtt.username_pw_set(
|
self._mqtt.username_pw_set(
|
||||||
username=self._username, password=self._password)
|
username=self._username, password=self._password)
|
||||||
if (
|
if not self._tls_done:
|
||||||
self._ca_file
|
if (
|
||||||
and self._cert_file
|
self._ca_file
|
||||||
and self._key_file
|
and self._cert_file
|
||||||
):
|
and self._key_file
|
||||||
self._mqtt.tls_set(
|
):
|
||||||
tls_version=ssl.PROTOCOL_TLS_CLIENT,
|
self._mqtt.tls_set(
|
||||||
ca_certs=self._ca_file,
|
tls_version=ssl.PROTOCOL_TLS_CLIENT,
|
||||||
certfile=self._cert_file,
|
ca_certs=self._ca_file,
|
||||||
keyfile=self._key_file)
|
certfile=self._cert_file,
|
||||||
else:
|
keyfile=self._key_file)
|
||||||
self._mqtt.tls_set(tls_version=ssl.PROTOCOL_TLS_CLIENT)
|
else:
|
||||||
self._mqtt.tls_insecure_set(True)
|
self._mqtt.tls_set(tls_version=ssl.PROTOCOL_TLS_CLIENT)
|
||||||
|
self._mqtt.tls_insecure_set(True)
|
||||||
|
self._tls_done = True
|
||||||
self._mqtt.on_connect = self.__on_connect
|
self._mqtt.on_connect = self.__on_connect
|
||||||
self._mqtt.on_connect_fail = self.__on_connect_failed
|
self._mqtt.on_connect_fail = self.__on_connect_failed
|
||||||
self._mqtt.on_disconnect = self.__on_disconnect
|
self._mqtt.on_disconnect = self.__on_disconnect
|
||||||
@ -776,10 +783,6 @@ class _MipsClient(ABC):
|
|||||||
self._internal_loop.remove_writer(self._mqtt_fd)
|
self._internal_loop.remove_writer(self._mqtt_fd)
|
||||||
self._mqtt_fd = -1
|
self._mqtt_fd = -1
|
||||||
self._mqtt.disconnect()
|
self._mqtt.disconnect()
|
||||||
|
|
||||||
def __mips_close(self) -> None:
|
|
||||||
self.log_info('mips client closing')
|
|
||||||
self.__mips_disconnect()
|
|
||||||
self._internal_loop.stop()
|
self._internal_loop.stop()
|
||||||
|
|
||||||
def __get_next_reconnect_time(self) -> float:
|
def __get_next_reconnect_time(self) -> float:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user