@@ -454,9 +454,11 @@ def read_all_data(self) -> Optional[GrowattData]:
454454
455455 # Read 3000 range if needed - MIN/MOD models
456456 if has_3000_range :
457- logger .debug ("Reading 3000 range (3000-3250)" )
458- # Extended range to cover MOD battery registers up to 3250
459- registers = self .read_input_registers (3000 , 251 )
457+ # Find the highest register in the 3000 range
458+ max_3000_addr = max ([addr for addr in addresses if 3000 <= addr < 4000 ])
459+ count_3000 = (max_3000_addr - 3000 ) + 1
460+ logger .debug (f"Reading 3000 range (3000-{ max_3000_addr } , { count_3000 } registers)" )
461+ registers = self .read_input_registers (3000 , count_3000 )
460462 if registers is None :
461463 logger .error ("Failed to read main input register block" )
462464 return None
@@ -467,15 +469,20 @@ def read_all_data(self) -> Optional[GrowattData]:
467469
468470 # Read 31000 range if needed - MOD extended battery/BMS range
469471 if has_31000_range :
470- logger .debug ("Reading 31000 range (31100-31300)" )
471- registers = self .read_input_registers (31100 , 201 )
472+ # Find the min and max registers in the 31000 range
473+ addrs_31000 = [addr for addr in addresses if 31000 <= addr < 32000 ]
474+ min_31000_addr = min (addrs_31000 )
475+ max_31000_addr = max (addrs_31000 )
476+ count_31000 = (max_31000_addr - min_31000_addr ) + 1
477+ logger .debug (f"Reading 31000 range ({ min_31000_addr } -{ max_31000_addr } , { count_31000 } registers)" )
478+ registers = self .read_input_registers (min_31000_addr , count_31000 )
472479 if registers is None :
473- logger .warning ("Failed to read extended battery register block (31100 +)" )
480+ logger .warning ("Failed to read extended battery register block (31000 +)" )
474481 # Don't return None - continue with what we have
475482 else :
476483 # Populate cache
477484 for i , value in enumerate (registers ):
478- self ._register_cache [31100 + i ] = value
485+ self ._register_cache [min_31000_addr + i ] = value
479486
480487 # Now extract values using the register map
481488 try :
0 commit comments