1414from ..connection import StickController
1515from ..constants import UTF8
1616from ..exceptions import CacheError , MessageError , NodeError , StickError , StickTimeout
17- from ..helpers .util import validate_mac
1817from ..messages .requests import CirclePlusAllowJoiningRequest , NodePingRequest
1918from ..messages .responses import (
2019 NODE_AWAKE_RESPONSE_ID ,
@@ -149,8 +148,6 @@ def registry(self) -> dict[int, tuple[str, NodeType | None]]:
149148
150149 async def register_node (self , mac : str ) -> bool :
151150 """Register node to Plugwise network."""
152- if not validate_mac (mac ):
153- raise NodeError (f"Invalid mac '{ mac } ' to register" )
154151 address = await self ._register .register_node (mac )
155152 return await self ._discover_node (address , mac , None )
156153
@@ -247,8 +244,12 @@ async def node_join_available_message(self, response: PlugwiseResponse) -> bool:
247244 f"Invalid response message type ({ response .__class__ .__name__ } ) received, expected NodeJoinAvailableResponse"
248245 )
249246 mac = response .mac_decoded
250- await self ._notify_node_event_subscribers (NodeEvent .JOIN , mac )
251- return True
247+ if await self .register_node (mac ):
248+ await self ._notify_node_event_subscribers (NodeEvent .JOIN , mac )
249+ return True
250+
251+ _LOGGER .debug ("Joining of available Node %s failed" , mac )
252+ return False
252253
253254 async def node_rejoin_message (self , response : PlugwiseResponse ) -> bool :
254255 """Handle NodeRejoinResponse messages."""
@@ -257,7 +258,6 @@ async def node_rejoin_message(self, response: PlugwiseResponse) -> bool:
257258 f"Invalid response message type ({ response .__class__ .__name__ } ) received, expected NodeRejoinResponse"
258259 )
259260 mac = response .mac_decoded
260- address = self ._register .network_address (mac )
261261 if (address := self ._register .network_address (mac )) is not None :
262262 if self ._nodes .get (mac ) is None :
263263 if self ._discover_sed_tasks .get (mac ) is None :
@@ -319,6 +319,7 @@ async def discover_network_coordinator(self, load: bool = False) -> bool:
319319 if load :
320320 return await self ._load_node (self ._controller .mac_coordinator )
321321 return True
322+
322323 return False
323324
324325 # endregion
@@ -485,9 +486,11 @@ async def discover_nodes(self, load: bool = True) -> bool:
485486 await self .discover_network_coordinator (load = load )
486487 if not self ._is_running :
487488 await self .start ()
489+
488490 await self ._discover_registered_nodes ()
489491 if load :
490492 return await self ._load_discovered_nodes ()
493+
491494 return True
492495
493496 async def stop (self ) -> None :
@@ -506,11 +509,14 @@ async def stop(self) -> None:
506509
507510 async def allow_join_requests (self , state : bool ) -> None :
508511 """Enable or disable Plugwise network."""
512+ _LOGGER .debug ("Send AllowJoiningRequest to Circle+ with state=%s" , state )
509513 request = CirclePlusAllowJoiningRequest (self ._controller .send , state )
510- response = await request .send ()
511514 if (response := await request .send ()) is None :
512- raise NodeError ("No response to get notifications for join request." )
513- if response .response_type != NodeResponseType .JOIN_ACCEPTED :
515+ raise NodeError ("No response for CirclePlusAllowJoiningRequest." )
516+
517+ if response .response_type not in (
518+ NodeResponseType .JOIN_ACCEPTED , NodeResponseType .CIRCLE_PLUS
519+ ):
514520 raise MessageError (
515521 f"Unknown NodeResponseType '{ response .response_type .name } ' received"
516522 )
@@ -544,3 +550,4 @@ async def _notify_node_event_subscribers(self, event: NodeEvent, mac: str) -> No
544550 callback_list .append (callback (event , mac ))
545551 if len (callback_list ) > 0 :
546552 await gather (* callback_list )
553+
0 commit comments