2020 NodeEvent ,
2121 NodeFeature ,
2222 NodeInfo ,
23+ NodeInfoMessage ,
2324 NodeType ,
2425 PowerStatistics ,
2526 RelayConfig ,
@@ -456,14 +457,7 @@ async def node_info_update(
456457 await self ._available_update_state (False )
457458 return self ._node_info
458459 await self ._available_update_state (True , node_info .timestamp )
459- await self .update_node_details (
460- firmware = node_info .firmware ,
461- node_type = node_info .node_type ,
462- hardware = node_info .hardware ,
463- timestamp = node_info .timestamp ,
464- relay_state = node_info .relay_state ,
465- logaddress_pointer = node_info .current_logaddress_pointer ,
466- )
460+ await self .update_node_details (node_info )
467461 return self ._node_info
468462
469463 async def _node_info_load_from_cache (self ) -> bool :
@@ -474,54 +468,67 @@ async def _node_info_load_from_cache(self) -> bool:
474468 node_type : NodeType | None = None
475469 if (node_type_str := self ._get_cache (CACHE_NODE_TYPE )) is not None :
476470 node_type = NodeType (int (node_type_str ))
477-
478- return await self .update_node_details (
471+ node_info = NodeInfoMessage (
479472 firmware = firmware ,
480473 hardware = hardware ,
481474 node_type = node_type ,
482475 timestamp = timestamp ,
483476 relay_state = None ,
484- logaddress_pointer = None ,
477+ current_logaddress_pointer = None ,
485478 )
479+ return await self .update_node_details (node_info )
486480
487- # pylint: disable=too-many-arguments
488- async def update_node_details ( # noqa: PLR0912 PLR0913
489- self ,
490- firmware : datetime | None ,
491- hardware : str | None ,
492- node_type : NodeType | None ,
493- timestamp : datetime | None ,
494- relay_state : bool | None ,
495- logaddress_pointer : int | None ,
481+ async def update_node_details (
482+ self , node_info : NodeInfoResponse | NodeInfoMessage | None = None
496483 ) -> bool :
497484 """Process new node info and return true if all fields are updated."""
498485 _LOGGER .debug (
499486 "update_node_details | firmware=%s, hardware=%s, nodetype=%s" ,
500- firmware ,
501- hardware ,
502- node_type ,
487+ node_info . firmware ,
488+ node_info . hardware ,
489+ node_info . node_type ,
503490 )
504491 _LOGGER .debug (
505492 "update_node_details | timestamp=%s, relay_state=%s, logaddress_pointer=%s," ,
506- timestamp ,
507- relay_state ,
508- logaddress_pointer ,
493+ node_info . timestamp ,
494+ node_info . relay_state ,
495+ node_info . current_logaddress_pointer ,
509496 )
510497 complete = True
511- if node_type is None :
498+ if node_info . node_type is None :
512499 complete = False
513500 else :
514- self ._node_info .node_type = NodeType (node_type )
501+ self ._node_info .node_type = NodeType (node_info . node_type )
515502 self ._set_cache (CACHE_NODE_TYPE , self ._node_info .node_type .value )
516503
517- if firmware is None :
504+ if node_info . firmware is None :
518505 complete = False
519506 else :
520- self ._node_info .firmware = firmware
521- self ._set_cache (CACHE_FIRMWARE , firmware )
507+ self ._node_info .firmware = node_info .firmware
508+ self ._set_cache (CACHE_FIRMWARE , node_info .firmware )
509+
510+ complete &= await self ._update_node_details_hardware (node_info .hardware )
511+ complete &= await self ._update_node_details_timestamp (node_info .timestamp )
512+
513+ await self .save_cache ()
514+ if node_info .timestamp is not None and node_info .timestamp > datetime .now (
515+ tz = UTC
516+ ) - timedelta (minutes = 5 ):
517+ await self ._available_update_state (True , node_info .timestamp )
518+
519+ return complete
520+
521+ async def _update_node_details_timestamp (self , timestamp : datetime | None ) -> bool :
522+ if timestamp is None :
523+ return False
524+ else :
525+ self ._node_info .timestamp = timestamp
526+ self ._set_cache (CACHE_NODE_INFO_TIMESTAMP , timestamp )
527+ return True
522528
529+ async def _update_node_details_hardware (self , hardware : str | None ) -> bool :
523530 if hardware is None :
524- complete = False
531+ return False
525532 else :
526533 if self ._node_info .version != hardware :
527534 # Generate modelname based on hardware version
@@ -561,20 +568,7 @@ async def update_node_details( # noqa: PLR0912 PLR0913
561568 self ._node_info .name = f"{ model_info [0 ]} { self ._node_info .mac [- 5 :]} "
562569
563570 self ._set_cache (CACHE_HARDWARE , hardware )
564-
565- if timestamp is None :
566- complete = False
567- else :
568- self ._node_info .timestamp = timestamp
569- self ._set_cache (CACHE_NODE_INFO_TIMESTAMP , timestamp )
570-
571- await self .save_cache ()
572- if timestamp is not None and timestamp > datetime .now (tz = UTC ) - timedelta (
573- minutes = 5
574- ):
575- await self ._available_update_state (True , timestamp )
576-
577- return complete
571+ return True
578572
579573 async def is_online (self ) -> bool :
580574 """Check if node is currently online."""
0 commit comments