From 389638d55564627b0d4c8457db6a71256723a706 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 6 Nov 2025 10:12:35 +0100 Subject: [PATCH] improve register check --- packages/modules/devices/sungrow/sungrow/bat.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/modules/devices/sungrow/sungrow/bat.py b/packages/modules/devices/sungrow/sungrow/bat.py index 5267f21774..ef99e62237 100644 --- a/packages/modules/devices/sungrow/sungrow/bat.py +++ b/packages/modules/devices/sungrow/sungrow/bat.py @@ -46,11 +46,16 @@ def detect_register_check(self) -> RegMode: return RegMode.NEW_REGISTERS except Exception: pass - + # register 13000 is always available, if unused it contains zero + # register type can only be determined if battery power is not zero + if self.__tcp_client.read_input_registers(13021, ModbusDataType.UINT_16, unit=unit) == 0: + raise ValueError("Speicherleistung aktuell 0kW. Registertyp wird gesetzt sobald " + "Speicher Leistungswerte liefert.") try: - self.__tcp_client.read_input_registers(13000, ModbusDataType.UINT_16, unit=unit) - log.debug("Battery register check: using old_registers (13021 + 13000 bits for sign).") - return RegMode.OLD_REGISTERS + if self.__tcp_client.read_input_registers(13000, ModbusDataType.UINT_16, unit=unit) != 0: + # if battery power is not zero and register 13000 shows status bits, old registers are used + log.debug("Battery register check: using old_registers (13021 + 13000 bits for sign).") + return RegMode.OLD_REGISTERS except Exception: pass