From 3ca5053c0751e2b87b91614f6ad979b0033126ed Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Wed, 6 May 2026 19:21:10 +0200 Subject: [PATCH 1/2] Fix power sign and update voltage calculation --- packages/modules/devices/sungrow/sungrow_ihm/counter.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/sungrow/sungrow_ihm/counter.py b/packages/modules/devices/sungrow/sungrow_ihm/counter.py index 7a2289dade..a67a0d53ce 100644 --- a/packages/modules/devices/sungrow/sungrow_ihm/counter.py +++ b/packages/modules/devices/sungrow/sungrow_ihm/counter.py @@ -34,7 +34,7 @@ def initialize(self) -> None: def update(self): unit = self.device_config.configuration.modbus_id power = self.__tcp_client.read_input_registers(8156, ModbusDataType.INT_32, - wordorder=Endian.Little, unit=unit) * -10 + wordorder=Endian.Little, unit=unit) * 10 powers = self.__tcp_client.read_input_registers(8558, [ModbusDataType.UINT_32] * 3, wordorder=Endian.Little, unit=unit) @@ -43,8 +43,8 @@ def update(self): voltages = self.__tcp_client.read_input_registers(8554, [ModbusDataType.UINT_16] * 3, wordorder=Endian.Little, unit=unit) - - voltages = [value / 10 for value in voltages] + # Die Register liefern nur Spannung Phase zu Phase und nicht Phase zu N, daher durch Wurzel 3 + voltages = [value / 10 / (3 ** 0.5) for value in voltages] self.peak_filter.check_values(power) imported, exported = self.sim_counter.sim_count(power) From 45f0280920add469c736f21bf7c34834db25b8d4 Mon Sep 17 00:00:00 2001 From: Lutz Bender Date: Thu, 7 May 2026 11:31:51 +0200 Subject: [PATCH 2/2] explain voltage calculation --- packages/modules/devices/sungrow/sungrow_ihm/counter.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/modules/devices/sungrow/sungrow_ihm/counter.py b/packages/modules/devices/sungrow/sungrow_ihm/counter.py index a67a0d53ce..6eab6109fd 100644 --- a/packages/modules/devices/sungrow/sungrow_ihm/counter.py +++ b/packages/modules/devices/sungrow/sungrow_ihm/counter.py @@ -43,7 +43,11 @@ def update(self): voltages = self.__tcp_client.read_input_registers(8554, [ModbusDataType.UINT_16] * 3, wordorder=Endian.Little, unit=unit) - # Die Register liefern nur Spannung Phase zu Phase und nicht Phase zu N, daher durch Wurzel 3 + # Die Register liefern nur Spannung Phase zu Phase und nicht Phase zu N, daher durch Wurzel 3. + # Dies setzt voraus, dass die Phasen symmetrisch belastet sind, was in der Praxis nicht + # der Fall sein muss, es ist jedoch eine gute Näherung. + # Bei einer erlaubten Schieflast von 20A (allgemeine Vorgabe in Deutschland) könnte die Spannung + # auf einer Phase um 5 bis zu 20% höher sein als auf den anderen Phasen. voltages = [value / 10 / (3 ** 0.5) for value in voltages] self.peak_filter.check_values(power)