From 5004d40966f95deeb8ae95729153aa5114d9e07f Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 3 Mar 2026 15:28:55 +0100 Subject: [PATCH 1/6] calculate currents from powers --- packages/modules/devices/alpha_ess/alpha_ess/counter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index 46fea67721..23678be50c 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -45,10 +45,9 @@ def update(self): val * 10 for val in self.__tcp_client.read_holding_registers( 0x0010, [ModbusDataType.INT_32] * 2, unit=self.__modbus_id )] - currents = [val / 10 for val in self.__tcp_client.read_holding_registers( - 0x0017, [ModbusDataType.INT_16]*3, unit=self.__modbus_id)] powers = self.__tcp_client.read_holding_registers( 0x001b, [ModbusDataType.INT_32]*3, unit=self.__modbus_id) + currents = [val / 230 for val in powers] voltages = self.__tcp_client.read_holding_registers( 0x0014, [ModbusDataType.UINT_16]*3, unit=self.__modbus_id) frequency = self.__tcp_client.read_holding_registers( From 82f3e9544ad948b82a004148b3d82c355891017d Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 7 Apr 2026 16:01:11 +0200 Subject: [PATCH 2/6] add function to calculate the missing currents factor --- .../devices/alpha_ess/alpha_ess/counter.py | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index 46ffa1dd3e..37cc64b6d9 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -10,8 +10,6 @@ from modules.common.fault_state import ComponentInfo, FaultState from modules.common.modbus import ModbusDataType from modules.common.store import get_counter_value_store -from modules.common.utils.peak_filter import PeakFilter -from modules.common.component_type import ComponentType class KwargsDict(TypedDict): @@ -31,7 +29,6 @@ def initialize(self) -> None: self.__modbus_id: int = self.kwargs['modbus_id'] self.store = get_counter_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) - self.peak_filter = PeakFilter(ComponentType.COUNTER, self.component_config.id, self.fault_state) def update(self): time.sleep(0.1) @@ -48,14 +45,15 @@ def update(self): val * 10 for val in self.__tcp_client.read_holding_registers( 0x0010, [ModbusDataType.INT_32] * 2, unit=self.__modbus_id )] - powers = self.__tcp_client.read_holding_registers( - 0x001b, [ModbusDataType.INT_32]*3, unit=self.__modbus_id) - currents = [val / 230 for val in powers] - voltages = self.__tcp_client.read_holding_registers( - 0x0014, [ModbusDataType.UINT_16]*3, unit=self.__modbus_id) + # currents = [val / 230 for val in powers] frequency = self.__tcp_client.read_holding_registers( 0x001A, ModbusDataType.UINT_16, unit=self.__modbus_id) / 100 - imported, exported = self.peak_filter.check_values(power, imported, exported) + currents = self.__tcp_client.read_holding_registers( + 0x0017, [ModbusDataType.INT_16]*3, unit=self.__modbus_id) + voltages = [230, 230, 230] + powers = self.__tcp_client.read_holding_registers( + 0x001b, [ModbusDataType.INT_32]*3, unit=self.__modbus_id) + currents = scale_currents(currents, voltages, powers) counter_state = CounterState( currents=currents, imported=imported, @@ -71,4 +69,18 @@ def update(self): self.store.set(counter_state) +def scale_currents(currents, voltages, powers): + factors = [-1000, -100, -10, 10, 100, 1000] + scaled_currents = [] + for c, v, p in zip(currents, voltages, powers): + if p == 0: + rounded_factor = 0 + else: + factor = c * v / p + rounded_factor = min(factors, key=lambda z: abs(factor - z)) + scaled_currents.append(c / rounded_factor) + + return scaled_currents + + component_descriptor = ComponentDescriptor(configuration_factory=AlphaEssCounterSetup) From ba043c2ca747f8933ae63bce0557ccad8ae8a6ba Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 8 Apr 2026 10:57:29 +0200 Subject: [PATCH 3/6] fix divison by zero; remove comment --- packages/modules/devices/alpha_ess/alpha_ess/counter.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index 37cc64b6d9..be4e11dfc5 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -45,7 +45,6 @@ def update(self): val * 10 for val in self.__tcp_client.read_holding_registers( 0x0010, [ModbusDataType.INT_32] * 2, unit=self.__modbus_id )] - # currents = [val / 230 for val in powers] frequency = self.__tcp_client.read_holding_registers( 0x001A, ModbusDataType.UINT_16, unit=self.__modbus_id) / 100 currents = self.__tcp_client.read_holding_registers( @@ -74,11 +73,11 @@ def scale_currents(currents, voltages, powers): scaled_currents = [] for c, v, p in zip(currents, voltages, powers): if p == 0: - rounded_factor = 0 + scaled_currents.append(0) else: factor = c * v / p rounded_factor = min(factors, key=lambda z: abs(factor - z)) - scaled_currents.append(c / rounded_factor) + scaled_currents.append(c / rounded_factor) return scaled_currents From b5aad9892f50fe86e0b069a55e0662b7050a0d7b Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 8 Apr 2026 10:59:31 +0200 Subject: [PATCH 4/6] remove static voltages --- .../modules/devices/alpha_ess/alpha_ess/counter.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index be4e11dfc5..661455ff80 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -49,10 +49,9 @@ def update(self): 0x001A, ModbusDataType.UINT_16, unit=self.__modbus_id) / 100 currents = self.__tcp_client.read_holding_registers( 0x0017, [ModbusDataType.INT_16]*3, unit=self.__modbus_id) - voltages = [230, 230, 230] powers = self.__tcp_client.read_holding_registers( 0x001b, [ModbusDataType.INT_32]*3, unit=self.__modbus_id) - currents = scale_currents(currents, voltages, powers) + currents = scale_currents(currents, powers) counter_state = CounterState( currents=currents, imported=imported, @@ -61,21 +60,19 @@ def update(self): ) if 'powers' in locals(): counter_state.powers = powers - if 'voltages' in locals(): - counter_state.voltages = voltages if 'frequency' in locals(): counter_state.frequency = frequency self.store.set(counter_state) -def scale_currents(currents, voltages, powers): +def scale_currents(currents, powers): factors = [-1000, -100, -10, 10, 100, 1000] scaled_currents = [] - for c, v, p in zip(currents, voltages, powers): + for c, p in zip(currents, powers): if p == 0: scaled_currents.append(0) else: - factor = c * v / p + factor = c * 230 / p rounded_factor = min(factors, key=lambda z: abs(factor - z)) scaled_currents.append(c / rounded_factor) From 6222dc0eb8f20e561f4a7826761a97ea6af383ac Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 8 Apr 2026 11:19:37 +0200 Subject: [PATCH 5/6] add peak filter --- .../devices/alpha_ess/alpha_ess/counter.py | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index 661455ff80..a5f3deef87 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -10,6 +10,8 @@ from modules.common.fault_state import ComponentInfo, FaultState from modules.common.modbus import ModbusDataType from modules.common.store import get_counter_value_store +from modules.common.utils.peak_filter import PeakFilter +from modules.common.component_type import ComponentType class KwargsDict(TypedDict): @@ -29,6 +31,7 @@ def initialize(self) -> None: self.__modbus_id: int = self.kwargs['modbus_id'] self.store = get_counter_value_store(self.component_config.id) self.fault_state = FaultState(ComponentInfo.from_component_config(self.component_config)) + self.peak_filter = PeakFilter(ComponentType.COUNTER, self.component_config.id, self.fault_state) def update(self): time.sleep(0.1) @@ -37,14 +40,22 @@ def update(self): 0x6, [modbus.ModbusDataType.INT_32] * 3, unit=self.__modbus_id) exported *= 10 imported *= 10 + imported, exported = self.peak_filter(power, imported, exported) currents = [val / 230 for val in self.__tcp_client.read_holding_registers( 0x0000, [ModbusDataType.INT_32]*3, unit=self.__modbus_id)] + counter_state = CounterState( + currents=currents, + imported=imported, + exported=exported, + power=power + ) else: power = self.__tcp_client.read_holding_registers(0x0021, ModbusDataType.INT_32, unit=self.__modbus_id) exported, imported = [ val * 10 for val in self.__tcp_client.read_holding_registers( 0x0010, [ModbusDataType.INT_32] * 2, unit=self.__modbus_id )] + imported, exported = self.peak_filter(power, imported, exported) frequency = self.__tcp_client.read_holding_registers( 0x001A, ModbusDataType.UINT_16, unit=self.__modbus_id) / 100 currents = self.__tcp_client.read_holding_registers( @@ -52,16 +63,14 @@ def update(self): powers = self.__tcp_client.read_holding_registers( 0x001b, [ModbusDataType.INT_32]*3, unit=self.__modbus_id) currents = scale_currents(currents, powers) - counter_state = CounterState( - currents=currents, - imported=imported, - exported=exported, - power=power - ) - if 'powers' in locals(): - counter_state.powers = powers - if 'frequency' in locals(): - counter_state.frequency = frequency + counter_state = CounterState( + currents=currents, + imported=imported, + exported=exported, + power=power, + powers=powers, + frequency=frequency + ) self.store.set(counter_state) From 0ed49d4959883b17bc4a4e4c03e1c34d4f413e9d Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Wed, 8 Apr 2026 11:29:17 +0200 Subject: [PATCH 6/6] peak_filter fix --- packages/modules/devices/alpha_ess/alpha_ess/counter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/modules/devices/alpha_ess/alpha_ess/counter.py b/packages/modules/devices/alpha_ess/alpha_ess/counter.py index a5f3deef87..ea184ee888 100644 --- a/packages/modules/devices/alpha_ess/alpha_ess/counter.py +++ b/packages/modules/devices/alpha_ess/alpha_ess/counter.py @@ -40,7 +40,7 @@ def update(self): 0x6, [modbus.ModbusDataType.INT_32] * 3, unit=self.__modbus_id) exported *= 10 imported *= 10 - imported, exported = self.peak_filter(power, imported, exported) + imported, exported = self.peak_filter.check_values(power, imported, exported) currents = [val / 230 for val in self.__tcp_client.read_holding_registers( 0x0000, [ModbusDataType.INT_32]*3, unit=self.__modbus_id)] counter_state = CounterState( @@ -55,7 +55,7 @@ def update(self): val * 10 for val in self.__tcp_client.read_holding_registers( 0x0010, [ModbusDataType.INT_32] * 2, unit=self.__modbus_id )] - imported, exported = self.peak_filter(power, imported, exported) + imported, exported = self.peak_filter.check_values(power, imported, exported) frequency = self.__tcp_client.read_holding_registers( 0x001A, ModbusDataType.UINT_16, unit=self.__modbus_id) / 100 currents = self.__tcp_client.read_holding_registers(