From 1a77f0bdf7838adcfceb5896de6d9de29c52a4ba Mon Sep 17 00:00:00 2001 From: seaspotter Date: Wed, 14 Oct 2026 23:25:55 +0200 Subject: [PATCH] =?UTF-8?q?fronius=20bat:=20set=5Fpower=5Flimit=20auf=20Se?= =?UTF-8?q?tPoint=20nachziehen=20(von=20#3850=20=C3=BCbersehen)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/modules/devices/fronius/fronius_http_api/bat.py | 5 +++-- .../modules/devices/fronius/fronius_http_api/bat_test.py | 7 ++++--- packages/modules/devices/fronius/fronius_sunspec/bat.py | 5 +++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/modules/devices/fronius/fronius_http_api/bat.py b/packages/modules/devices/fronius/fronius_http_api/bat.py index 8690fe7763..4c7b8232bd 100644 --- a/packages/modules/devices/fronius/fronius_http_api/bat.py +++ b/packages/modules/devices/fronius/fronius_http_api/bat.py @@ -2,7 +2,7 @@ import logging from typing import Any, Dict, Optional, TypedDict -from modules.common.abstract_device import AbstractBat +from modules.common.abstract_device import AbstractBat, SetPoint from modules.common.component_state import BatState from modules.common.component_type import ComponentDescriptor from modules.common.fault_state import ComponentInfo, FaultState @@ -72,7 +72,8 @@ def update(self, powerflow_response: Dict) -> None: ) self.store.set(bat_state) - def set_power_limit(self, power_limit: Optional[int]) -> None: + def set_power_limit(self, setpoint: SetPoint) -> None: + power_limit = setpoint.power_limit username = self.component_config.configuration.username password = self.component_config.configuration.password if username is None or password is None: diff --git a/packages/modules/devices/fronius/fronius_http_api/bat_test.py b/packages/modules/devices/fronius/fronius_http_api/bat_test.py index 4707128295..0a3f8b8c4f 100644 --- a/packages/modules/devices/fronius/fronius_http_api/bat_test.py +++ b/packages/modules/devices/fronius/fronius_http_api/bat_test.py @@ -2,6 +2,7 @@ import pytest +from control.bat import Set from dataclass_utils import dataclass_from_dict from modules.common.store._api import LoggingValueStore from modules.conftest import SAMPLE_IP @@ -88,7 +89,7 @@ def test_set_power_limit_without_credentials_does_not_connect(monkeypatch): FroniusConfiguration, device_config), device_id=0) battery.initialize() - battery.set_power_limit(0) + battery.set_power_limit(Set(power_limit=0)) mock_fronius_wr.assert_not_called() @@ -113,7 +114,7 @@ def test_set_power_limit_with_credentials(monkeypatch, power_limit, expected_cal FroniusConfiguration, device_config), device_id=0) battery.initialize() - battery.set_power_limit(power_limit) + battery.set_power_limit(Set(power_limit=power_limit)) mock_fronius_wr.assert_called_once_with({ 'address': SAMPLE_IP, @@ -127,7 +128,7 @@ def test_set_power_limit_with_credentials(monkeypatch, power_limit, expected_cal # Self-regulation/Stop dürfen dabei nicht erneut angestoßen werden, sobald der Modus schon aktiv # ist; Force-Charge/-Discharge werden hingegen bei jedem Aufruf erneut gesetzt, da sich die # gewünschte Lade-/Entladeleistung geändert haben könnte. - battery.set_power_limit(power_limit) + battery.set_power_limit(Set(power_limit=power_limit)) mock_fronius_wr.assert_called_once() expected_count = 2 if repeats_call else 1 assert getattr(mock_bat_api, expected_call).call_count == expected_count diff --git a/packages/modules/devices/fronius/fronius_sunspec/bat.py b/packages/modules/devices/fronius/fronius_sunspec/bat.py index fb3e1a4cd3..13d16b5b8b 100644 --- a/packages/modules/devices/fronius/fronius_sunspec/bat.py +++ b/packages/modules/devices/fronius/fronius_sunspec/bat.py @@ -3,7 +3,7 @@ from typing import Any, Optional, TypedDict from modules.common import modbus -from modules.common.abstract_device import AbstractBat +from modules.common.abstract_device import AbstractBat, SetPoint from modules.common.component_state import BatState from modules.common.component_type import ComponentDescriptor, ComponentType from modules.common.fault_state import ComponentInfo, FaultState @@ -66,7 +66,8 @@ def update(self) -> None: self.peak_filter.check_values(power) self.store.set(BatState(power=power, soc=soc)) - def set_power_limit(self, power_limit: Optional[int]) -> None: + def set_power_limit(self, setpoint: SetPoint) -> None: + power_limit = setpoint.power_limit # Nicht an echter Fronius-Hardware verifiziert -- vor Produktiveinsatz an einem realen # Gerät testen. unit = 1