Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion packages/modules/common/b23.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -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.
Expand Down Expand Up @@ -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