From 1954d3614aad70dc4d460ade31ca1fb6caa515e2 Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 2 Jan 2025 10:05:06 +0100 Subject: [PATCH 1/2] add warning for powers --- .../devices/sungrow/sungrow/counter.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/modules/devices/sungrow/sungrow/counter.py b/packages/modules/devices/sungrow/sungrow/counter.py index 643f9be4b6..4a4664f5c6 100644 --- a/packages/modules/devices/sungrow/sungrow/counter.py +++ b/packages/modules/devices/sungrow/sungrow/counter.py @@ -31,8 +31,15 @@ def update(self, pv_power: float): if self.device_config.configuration.version in (Version.SH, Version.SH_winet_dongle): power = self.__tcp_client.read_input_registers(13009, ModbusDataType.INT_32, wordorder=Endian.Little, unit=unit) * -1 - powers = self.__tcp_client.read_input_registers(5602, [ModbusDataType.INT_32] * 3, - wordorder=Endian.Little, unit=unit) + try: + powers = self.__tcp_client.read_input_registers(5602, [ModbusDataType.INT_32] * 3, + wordorder=Endian.Little, unit=unit) + except Exception: + powers = None + self.fault_state.warning( + "Dieser Sungrow Zähler liefert von Werk aus (entgegen der Dokumentation) " + "keine Leistung der einzelnen Phasen. " + "Das Lastmanagement ist daher nur anhand der Gesamtleistung (nicht phasenbasiert) möglich.") else: if pv_power != 0: power = self.__tcp_client.read_input_registers(5082, ModbusDataType.INT_32, @@ -40,8 +47,15 @@ def update(self, pv_power: float): else: power = self.__tcp_client.read_input_registers(5090, ModbusDataType.INT_32, wordorder=Endian.Little, unit=unit) - powers = self.__tcp_client.read_input_registers(5084, [ModbusDataType.INT_32] * 3, - wordorder=Endian.Little, unit=unit) + try: + powers = self.__tcp_client.read_input_registers(5084, [ModbusDataType.INT_32] * 3, + wordorder=Endian.Little, unit=unit) + except Exception: + powers = None + self.fault_state.warning( + "Dieser Sungrow Zähler liefert von Werk aus (entgegen der Dokumentation) " + "keine Leistung der einzelnen Phasen. " + "Das Lastmanagement ist daher nur anhand der Gesamtleistung (nicht phasenbasiert) möglich.") frequency = self.__tcp_client.read_input_registers(5035, ModbusDataType.UINT_16, unit=unit) / 10 if self.device_config.configuration.version == Version.SH_winet_dongle: From e4a7344d36ecf63e9e74b09a4ccc6c4de784e46f Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Thu, 2 Jan 2025 14:15:32 +0100 Subject: [PATCH 2/2] add variable for warning text --- packages/modules/devices/sungrow/sungrow/counter.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/modules/devices/sungrow/sungrow/counter.py b/packages/modules/devices/sungrow/sungrow/counter.py index 4a4664f5c6..63cdcb88f9 100644 --- a/packages/modules/devices/sungrow/sungrow/counter.py +++ b/packages/modules/devices/sungrow/sungrow/counter.py @@ -25,6 +25,9 @@ def __init__(self, self.sim_counter = SimCounter(self.device_config.id, self.component_config.id, prefix="bezug") self.store = get_counter_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + self.fault_text = "Dieser Sungrow Zähler liefert von Werk aus (entgegen der Dokumentation) " + "keine Leistung der einzelnen Phasen. " + "Das Lastmanagement ist daher nur anhand der Gesamtleistung (nicht phasenbasiert) möglich." def update(self, pv_power: float): unit = self.device_config.configuration.modbus_id @@ -36,10 +39,7 @@ def update(self, pv_power: float): wordorder=Endian.Little, unit=unit) except Exception: powers = None - self.fault_state.warning( - "Dieser Sungrow Zähler liefert von Werk aus (entgegen der Dokumentation) " - "keine Leistung der einzelnen Phasen. " - "Das Lastmanagement ist daher nur anhand der Gesamtleistung (nicht phasenbasiert) möglich.") + self.fault_state.warning(self.fault_text) else: if pv_power != 0: power = self.__tcp_client.read_input_registers(5082, ModbusDataType.INT_32, @@ -52,10 +52,7 @@ def update(self, pv_power: float): wordorder=Endian.Little, unit=unit) except Exception: powers = None - self.fault_state.warning( - "Dieser Sungrow Zähler liefert von Werk aus (entgegen der Dokumentation) " - "keine Leistung der einzelnen Phasen. " - "Das Lastmanagement ist daher nur anhand der Gesamtleistung (nicht phasenbasiert) möglich.") + self.fault_state.warning(self.fault_text) frequency = self.__tcp_client.read_input_registers(5035, ModbusDataType.UINT_16, unit=unit) / 10 if self.device_config.configuration.version == Version.SH_winet_dongle: