From e75cae8bcf3da0f51f770cdb00d19b13af3bc65d Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Tue, 17 Mar 2026 11:37:54 +0100 Subject: [PATCH] fix elgris --- packages/modules/devices/elgris/elgris/bat.py | 3 +- .../modules/devices/elgris/elgris/counter.py | 3 +- .../modules/devices/elgris/elgris/elgris.py | 1 + .../devices/elgris/elgris/elgris_test.py | 89 +++++++++++++++++++ .../modules/devices/elgris/elgris/inverter.py | 3 +- 5 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 packages/modules/devices/elgris/elgris/elgris_test.py diff --git a/packages/modules/devices/elgris/elgris/bat.py b/packages/modules/devices/elgris/elgris/bat.py index 6d45e76c4d..5558dd3dc0 100644 --- a/packages/modules/devices/elgris/elgris/bat.py +++ b/packages/modules/devices/elgris/elgris/bat.py @@ -29,8 +29,7 @@ def initialize(self) -> None: self.store = get_bat_value_store(self.component_config.id) def update(self): - with self.__tcp_client: - counter_state = self.elgris.get_counter_state() + counter_state = self.elgris.get_counter_state() bat_state = BatState( exported=counter_state.exported, imported=counter_state.imported, diff --git a/packages/modules/devices/elgris/elgris/counter.py b/packages/modules/devices/elgris/elgris/counter.py index 8456e3a134..9ee444cda3 100644 --- a/packages/modules/devices/elgris/elgris/counter.py +++ b/packages/modules/devices/elgris/elgris/counter.py @@ -28,8 +28,7 @@ def initialize(self) -> None: self.store = get_counter_value_store(self.component_config.id) def update(self): - with self.__tcp_client: - counter_state = self.elgris.get_counter_state() + counter_state = self.elgris.get_counter_state() self.store.set(counter_state) diff --git a/packages/modules/devices/elgris/elgris/elgris.py b/packages/modules/devices/elgris/elgris/elgris.py index 422afca3ee..e50afc021a 100644 --- a/packages/modules/devices/elgris/elgris/elgris.py +++ b/packages/modules/devices/elgris/elgris/elgris.py @@ -9,3 +9,4 @@ def __init__(self, modbus_id: int, client: modbus.ModbusTcpClient_, fault_state: self.id = modbus_id self.serial_number = "" self.fault_state = fault_state + self.fast_mode = True diff --git a/packages/modules/devices/elgris/elgris/elgris_test.py b/packages/modules/devices/elgris/elgris/elgris_test.py new file mode 100644 index 0000000000..cd300965e5 --- /dev/null +++ b/packages/modules/devices/elgris/elgris/elgris_test.py @@ -0,0 +1,89 @@ +from unittest.mock import Mock + +from modules.common.component_state import BatState, CounterState, InverterState +from modules.common.modbus import ModbusTcpClient_ + +from modules.common.sdm import SdmRegister +from modules.devices.elgris.elgris.config import Elgris, ElgrisBatSetup, ElgrisCounterSetup, ElgrisInverterSetup +from modules.devices.elgris.elgris.device import create_device + + +def setup_modbus_mocks(monkeypatch): + """Setup common Modbus mocks für alle Tests""" + mock_read_input_registers_bulk = Mock(side_effect=[ + {SdmRegister.VOLTAGE_L1: [231]*3, SdmRegister.CURRENT_L1: [0.5]*3, SdmRegister.POWER_L1: [115]*3}, + {SdmRegister.IMPORTED: 100, SdmRegister.EXPORTED: 200, SdmRegister.FREQUENCY: 50}]) + mock_read_input_registers = Mock(side_effect=[[0.99]*3]) + + monkeypatch.setattr(ModbusTcpClient_, "__enter__", Mock()) + monkeypatch.setattr(ModbusTcpClient_, "__exit__", Mock()) + monkeypatch.setattr(ModbusTcpClient_, "read_input_registers_bulk", mock_read_input_registers_bulk) + monkeypatch.setattr(ModbusTcpClient_, "read_input_registers", mock_read_input_registers) + + +def test_elgris_bat(monkeypatch): + setup_modbus_mocks(monkeypatch) + + device = create_device(Elgris()) + device.add_component(ElgrisBatSetup()) + + store_bat_mock = Mock() + monkeypatch.setattr(device.components["component0"], "store", store_bat_mock) + + # execution + device.update() + + # evaluation + assert vars(store_bat_mock.set.call_args[0][0]) == vars(BatState( + exported=200000, + imported=100000, + power=345, + currents=[0.5]*3, + )) + + +def test_elgris_counter(monkeypatch): + setup_modbus_mocks(monkeypatch) + + device = create_device(Elgris()) + device.add_component(ElgrisCounterSetup(id=1)) + + store_counter_mock = Mock() + monkeypatch.setattr(device.components["component1"], "store", store_counter_mock) + + # execution + device.update() + + # evaluation + assert vars(store_counter_mock.set.call_args[0][0]) == vars(CounterState( + exported=200000, + imported=100000, + power=345, + voltages=[231]*3, + currents=[0.5]*3, + powers=[115]*3, + power_factors=[0.99]*3, + frequency=50, + serial_number="" + )) + + +def test_elgris_inverter(monkeypatch): + setup_modbus_mocks(monkeypatch) + + device = create_device(Elgris()) + device.add_component(ElgrisInverterSetup(id=2)) + + store_inverter_mock = Mock() + monkeypatch.setattr(device.components["component2"], "store", store_inverter_mock) + + # execution + device.update() + + # evaluation + assert vars(store_inverter_mock.set.call_args[0][0]) == vars(InverterState( + exported=200000, + imported=100000, + power=345, + currents=[0.5]*3, + )) diff --git a/packages/modules/devices/elgris/elgris/inverter.py b/packages/modules/devices/elgris/elgris/inverter.py index c85d133582..9d9b9d45b9 100644 --- a/packages/modules/devices/elgris/elgris/inverter.py +++ b/packages/modules/devices/elgris/elgris/inverter.py @@ -29,8 +29,7 @@ def initialize(self) -> None: self.store = get_inverter_value_store(self.component_config.id) def update(self): - with self.__tcp_client: - counter_state = self.elgris.get_counter_state() + counter_state = self.elgris.get_counter_state() inverter_state = InverterState( exported=counter_state.exported, imported=counter_state.imported,