@@ -26,12 +26,11 @@ def nodetypes(self) -> dict[str, NodeType]:
2626
2727 async def save_cache (self ) -> None :
2828 """Save the node information to file."""
29- cache_data_to_save : dict [str , str ] = {}
30- for mac , node_type in self ._nodetypes .items ():
31- node_value = str (node_type )
32- cache_data_to_save [mac ] = node_value
33- _LOGGER .debug ("Save NodeTypes %s" , str (len (cache_data_to_save )))
34- await self .write_cache (cache_data_to_save )
29+ cache_data_to_save : dict [str , str ] = {
30+ mac : node_type .name for mac , node_type in self ._nodetypes .items ()
31+ }
32+ _LOGGER .debug ("Save NodeTypes for %s Nodes" , len (cache_data_to_save ))
33+ await self .write_cache (cache_data_to_save , rewrite = True ) # Make sure the cache-contents is actual
3534
3635 async def clear_cache (self ) -> None :
3736 """Clear current cache."""
@@ -44,13 +43,18 @@ async def restore_cache(self) -> None:
4443 self ._nodetypes = {}
4544 for mac , node_value in data .items ():
4645 node_type : NodeType | None = None
47- if len (node_value ) >= 10 :
46+ # Backward-compatible parsing: support full enums, enum names, or numeric values
47+ val = node_value .strip ()
48+ key = (val .split ("." , 1 )[1 ] if val .startswith ("NodeType." ) else val ).upper ()
49+ node_type = NodeType .__members__ .get (key ) # e.g., "CIRCLE"
50+ if node_type is None :
4851 try :
49- node_type = NodeType [ node_value [ 9 :]]
50- except KeyError :
52+ node_type = NodeType ( int ( val ))
53+ except ValueError :
5154 node_type = None
55+
5256 if node_type is None :
53- _LOGGER .warning ("Invalid NodeType in cache: %s" , node_value )
57+ _LOGGER .warning ("Invalid NodeType in cache for mac %s : %s" , mac , node_value )
5458 continue
5559 self ._nodetypes [mac ] = node_type
5660 _LOGGER .debug (
@@ -86,5 +90,9 @@ async def prune_cache(self, registry: list[str]) -> None:
8690 continue
8791 if (node_type := self .get_nodetype (mac )) is not None :
8892 new_nodetypes [mac ] = node_type
93+
94+ if new_nodetypes == self ._nodetypes :
95+ _LOGGER .debug ("prune_cache: no changes; skipping save" )
96+ return
8997 self ._nodetypes = new_nodetypes
9098 await self .save_cache ()
0 commit comments