7979_LOGGER = logging .getLogger (__name__ )
8080
8181
82- RECOVER_NETWORK_DELAY = 120
83- RECOVER_NETWORK_RETRY_DELAY = 600
8482REFRESH_PROPS_DELAY = 0.2
8583REFRESH_PROPS_RETRY_DELAY = 3
8684REFRESH_CLOUD_DEVICES_DELAY = 6
85+ REFRESH_CLOUD_DEVICES_RETRY_DELAY = 60
8786REFRESH_GATEWAY_DEVICES_DELAY = 3
8887
8988@dataclass
@@ -163,7 +162,6 @@ class MIoTClient:
163162 _sub_device_state : dict [str , MipsDeviceState ]
164163
165164 _mips_local_state_changed_timers : dict [str , asyncio .TimerHandle ]
166- _recover_network_timer : Optional [asyncio .TimerHandle ]
167165 _refresh_token_timer : Optional [asyncio .TimerHandle ]
168166 _refresh_cert_timer : Optional [asyncio .TimerHandle ]
169167 _refresh_cloud_devices_timer : Optional [asyncio .TimerHandle ]
@@ -234,7 +232,6 @@ def __init__(
234232 self ._sub_device_state = {}
235233
236234 self ._mips_local_state_changed_timers = {}
237- self ._recover_network_timer = None
238235 self ._refresh_token_timer = None
239236 self ._refresh_cert_timer = None
240237 self ._refresh_cloud_devices_timer = None
@@ -415,10 +412,6 @@ async def deinit_async(self) -> None:
415412 devices = list (self ._device_list_cache .keys ()))
416413 await self ._miot_lan .vote_for_lan_ctrl_async (
417414 key = f'{ self ._uid } -{ self ._cloud_server } ' , vote = False )
418- # Cancel recover network
419- if self ._recover_network_timer :
420- self ._recover_network_timer .cancel ()
421- self ._recover_network_timer = None
422415 # Cancel refresh auth info
423416 if self ._refresh_token_timer :
424417 self ._refresh_token_timer .cancel ()
@@ -1035,13 +1028,14 @@ def __update_device_msg_sub(self, did: str) -> None:
10351028 @final
10361029 async def __on_network_status_changed (self , status : bool ) -> None :
10371030 _LOGGER .info ('network status changed, %s' , status )
1038- if self ._recover_network_timer :
1039- self ._recover_network_timer .cancel ()
1040- self ._recover_network_timer = None
10411031 if status :
1042- self ._recover_network_timer = self ._main_loop .call_later (
1043- RECOVER_NETWORK_DELAY , lambda : self ._main_loop .create_task (
1044- self .__recover_network_async ()))
1032+ # Check auth_info
1033+ if await self .refresh_oauth_info_async ():
1034+ # Connect to mips cloud
1035+ self ._mips_cloud .connect ()
1036+ # Update device list
1037+ self .__request_refresh_cloud_devices ()
1038+ await self .refresh_user_cert_async ()
10451039 else :
10461040 self .__request_show_devices_changed_notify (delay_sec = 30 )
10471041 # Cancel refresh cloud devices
@@ -1051,25 +1045,6 @@ async def __on_network_status_changed(self, status: bool) -> None:
10511045 # Disconnect cloud mips
10521046 self ._mips_cloud .disconnect ()
10531047
1054- @final
1055- async def __recover_network_async (self ) -> None :
1056- _LOGGER .info ('recover network connection' )
1057- if self ._recover_network_timer :
1058- self ._recover_network_timer .cancel ()
1059- self ._recover_network_timer = None
1060- # Check auth_info
1061- if await self .refresh_oauth_info_async ():
1062- # Connect to mips cloud
1063- self ._mips_cloud .connect ()
1064- # Update device list
1065- self .__request_refresh_cloud_devices ()
1066- else :
1067- self ._recover_network_timer = self ._main_loop .call_later (
1068- RECOVER_NETWORK_RETRY_DELAY ,
1069- lambda : self ._main_loop .create_task (
1070- self .__recover_network_async ()))
1071- await self .refresh_user_cert_async ()
1072-
10731048 @final
10741049 async def __on_mips_service_state_change (
10751050 self , group_id : str , state : MipsServiceState , data : dict
@@ -1464,12 +1439,18 @@ async def __update_devices_from_cloud_async(
14641439 async def __refresh_cloud_devices_async (self ) -> None :
14651440 _LOGGER .debug (
14661441 'refresh cloud devices, %s, %s' , self ._uid , self ._cloud_server )
1467- self ._refresh_cloud_devices_timer = None
1442+ if self ._refresh_cloud_devices_timer :
1443+ self ._refresh_cloud_devices_timer .cancel ()
1444+ self ._refresh_cloud_devices_timer = None
14681445 try :
14691446 result = await self ._http .get_devices_async (
14701447 home_ids = list (self ._entry_data .get ('home_selected' , {}).keys ()))
14711448 except Exception as err : # pylint: disable=broad-exception-caught
14721449 _LOGGER .error ('refresh cloud devices failed, %s' , err )
1450+ self ._refresh_cloud_devices_timer = self ._main_loop .call_later (
1451+ REFRESH_CLOUD_DEVICES_RETRY_DELAY ,
1452+ lambda : self ._main_loop .create_task (
1453+ self .__refresh_cloud_devices_async ()))
14731454 return
14741455 if not result and 'devices' not in result :
14751456 self .__show_client_error_notify (
@@ -1516,17 +1497,11 @@ def __request_refresh_cloud_devices(self, immediately=False) -> None:
15161497 _LOGGER .debug (
15171498 'request refresh cloud devices, %s, %s' ,
15181499 self ._uid , self ._cloud_server )
1519- if immediately :
1520- if self ._refresh_cloud_devices_timer :
1521- self ._refresh_cloud_devices_timer .cancel ()
1522- self ._refresh_cloud_devices_timer = self ._main_loop .call_later (
1523- 0 , lambda : self ._main_loop .create_task (
1524- self .__refresh_cloud_devices_async ()))
1525- return
1500+ delay_sec : int = 0 if immediately else REFRESH_CLOUD_DEVICES_DELAY
15261501 if self ._refresh_cloud_devices_timer :
1527- return
1502+ self . _refresh_cloud_devices_timer . cancel ()
15281503 self ._refresh_cloud_devices_timer = self ._main_loop .call_later (
1529- REFRESH_CLOUD_DEVICES_DELAY , lambda : self ._main_loop .create_task (
1504+ delay_sec , lambda : self ._main_loop .create_task (
15301505 self .__refresh_cloud_devices_async ()))
15311506
15321507 @final
0 commit comments