@@ -421,6 +421,7 @@ async def energy_log_update(self, address: int) -> bool:
421421 return False
422422
423423 await self ._available_update_state (True )
424+ energy_record_update = False
424425
425426 # Forward historical energy log information to energy counters
426427 # Each response message contains 4 log counters (slots) of the
@@ -433,15 +434,17 @@ async def energy_log_update(self, address: int) -> bool:
433434 if _log_timestamp is None :
434435 self ._energy_counters .add_empty_log (response .log_address , _slot )
435436 else :
436- await self ._energy_log_record_update_state (
437+ if await self ._energy_log_record_update_state (
437438 response .log_address ,
438439 _slot ,
439440 _log_timestamp .replace (tzinfo = UTC ),
440441 _log_pulses ,
441442 import_only = True
442- )
443+ ):
444+ energy_record_update = True
443445 self ._energy_counters .update ()
444- await self .save_cache ()
446+ if energy_record_update :
447+ await self .save_cache ()
445448 return True
446449
447450 async def _energy_log_records_load_from_cache (self ) -> bool :
@@ -525,8 +528,8 @@ async def _energy_log_record_update_state(
525528 timestamp : datetime ,
526529 pulses : int ,
527530 import_only : bool = False ,
528- ) -> None :
529- """Process new energy log record."""
531+ ) -> bool :
532+ """Process new energy log record. Returns true if record is new or changed. """
530533 self ._energy_counters .add_pulse_log (
531534 address ,
532535 slot ,
@@ -535,7 +538,7 @@ async def _energy_log_record_update_state(
535538 import_only = import_only
536539 )
537540 if not self ._cache_enabled :
538- return
541+ return False
539542 log_cache_record = f"{ address } :{ slot } :{ timestamp .year } "
540543 log_cache_record += f"-{ timestamp .month } -{ timestamp .day } "
541544 log_cache_record += f"-{ timestamp .hour } -{ timestamp .minute } "
@@ -551,12 +554,15 @@ async def _energy_log_record_update_state(
551554 self ._set_cache (
552555 CACHE_ENERGY_COLLECTION , cached_logs + "|" + log_cache_record
553556 )
557+ return True
558+ return False
554559 else :
555560 _LOGGER .debug (
556561 "No existing energy collection log cached for %s" ,
557562 self .mac
558563 )
559564 self ._set_cache (CACHE_ENERGY_COLLECTION , log_cache_record )
565+ return True
560566
561567 async def switch_relay (self , state : bool ) -> bool | None :
562568 """Switch state of relay.
0 commit comments