@@ -180,7 +180,29 @@ async def change_loop():
180180
181181 async def reset_network_info (self ):
182182 # TODO: There does not appear to be a way to factory reset a Conbee
183- await self .form_network (fast = True )
183+ await self .write_network_info (
184+ network_info = zigpy .state .NetworkInfo (
185+ pan_id = 0xFFFF ,
186+ extended_pan_id = zigpy .types .EUI64 .convert ("FF:FF:FF:FF:FF:FF:FF:FF" ),
187+ channel = None ,
188+ channel_mask = zigpy .types .Channels (0 ),
189+ nwk_update_id = 0 ,
190+ network_key = zigpy .state .Key (
191+ key = zigpy .types .KeyData .convert (
192+ "FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF"
193+ )
194+ ),
195+ tc_link_key = zigpy .state .Key (
196+ key = zigpy .types .KeyData .convert (b"ZigBeeAlliance09" .hex ())
197+ ),
198+ security_level = 0x05 ,
199+ ),
200+ node_info = zigpy .state .NodeInfo (
201+ logical_type = zdo_t .LogicalType .Coordinator ,
202+ ieee = zigpy .types .EUI64 .UNKNOWN ,
203+ nwk = 0xFFFF ,
204+ ),
205+ )
184206
185207 async def write_network_info (self , * , network_info , node_info ):
186208 try :
@@ -291,6 +313,14 @@ async def write_network_info(self, *, network_info, node_info):
291313 # Note: Changed network configuration parameters become only affective after
292314 # sending a Leave Network Request followed by a Create or Join Network Request
293315 await self ._change_network_state (NetworkState .OFFLINE )
316+
317+ if (
318+ network_info .pan_id == 0xFFFF
319+ or network_info .channel_mask == zigpy .types .Channels (0 )
320+ ):
321+ # Network is being reset, it will never enter the CONNECTED state
322+ return
323+
294324 await asyncio .sleep (CHANGE_NETWORK_STATE_DELAY )
295325 await self ._change_network_state (NetworkState .CONNECTED )
296326
@@ -341,7 +371,7 @@ async def load_network_info(self, *, load_devices=False):
341371 NetworkParameter .aps_extended_panid
342372 )
343373
344- if network_info .extended_pan_id == zigpy .types .EUI64 .convert (
374+ if network_info .extended_pan_id == zigpy .types .ExtendedPanId .convert (
345375 "00:00:00:00:00:00:00:00"
346376 ):
347377 network_info .extended_pan_id = await self ._api .read_parameter (
@@ -358,8 +388,16 @@ async def load_network_info(self, *, load_devices=False):
358388 NetworkParameter .nwk_update_id
359389 )
360390
361- if network_info .channel == 0 :
362- raise NetworkNotFormed ("Network channel is zero" )
391+ if (
392+ node_info .nwk == 0xFFFF
393+ or network_info .pan_id == 0xFFFF
394+ or (
395+ network_info .extended_pan_id
396+ == zigpy .types .ExtendedPanId .convert ("FF:FF:FF:FF:FF:FF:FF:FF" )
397+ )
398+ or network_info .channel == 0
399+ ):
400+ raise NetworkNotFormed ("Network is not formed" )
363401
364402 indexed_key = await self ._api .read_parameter (NetworkParameter .network_key , 0 )
365403
0 commit comments