From 447f438a3aa09ffe930818eea7cd92f5f3400d9f Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Fri, 11 Jul 2025 14:30:28 +0200 Subject: [PATCH] get counter state --- packages/modules/common/b23.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/modules/common/b23.py b/packages/modules/common/b23.py index c3ee955055..affebbd9d0 100644 --- a/packages/modules/common/b23.py +++ b/packages/modules/common/b23.py @@ -4,6 +4,9 @@ from modules.common import modbus from modules.common.abstract_counter import AbstractCounter +from modules.common.component_state import CounterState +from modules.common.fault_state import FaultState +from modules.common.hardware_check import check_meter_values from modules.common.modbus import ModbusDataType @@ -24,9 +27,10 @@ class B23(AbstractCounter): "INT_64": 0x7FFFFFFFFFFFFFFF, } - def __init__(self, modbus_id: int, client: modbus.ModbusTcpClient_) -> None: + def __init__(self, modbus_id: int, client: modbus.ModbusTcpClient_, fault_state: FaultState) -> None: self.client = client self.id = modbus_id + self.fault_state = fault_state def check_nan(self, raw_value: int, value: any, data_type: ModbusDataType) -> Optional[Union[float, int]]: """Checks if the value is a NaN and returns None if it is. @@ -101,3 +105,19 @@ def get_voltages(self) -> List[float]: values = [self.check_nan(val, val / 10, data_type) for val in self.client.read_holding_registers(0x5B00, [data_type]*3, unit=self.id)] return values + + def get_counter_state(self) -> CounterState: + powers, power = self.get_power() + counter_state = CounterState( + imported=self.get_imported(), + exported=self.get_exported(), + power=power, + voltages=self.get_voltages(), + currents=self.get_currents(), + powers=powers, + power_factors=self.get_power_factors(), + frequency=self.get_frequency(), + serial_number=self.get_serial_number() + ) + check_meter_values(counter_state, self.fault_state) + return counter_state