From 1407201c82e022a1c2ae72f03186f95dbf0c17e1 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 13 Jun 2025 16:39:07 +0200 Subject: [PATCH] recognize priority for switch on delay --- packages/control/algorithm/algorithm.py | 1 - .../algorithm/integration_test/pv_charging_test.py | 10 +++++----- packages/control/algorithm/min_current.py | 11 ++++++++++- packages/control/algorithm/surplus_controlled.py | 9 --------- packages/control/counter.py | 2 +- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/packages/control/algorithm/algorithm.py b/packages/control/algorithm/algorithm.py index 63192124eb..0c15fdf855 100644 --- a/packages/control/algorithm/algorithm.py +++ b/packages/control/algorithm/algorithm.py @@ -33,7 +33,6 @@ def calc_current(self) -> None: common.reset_current_to_target_current() self.additional_current.set_additional_current() counter.limit_raw_power_left_to_surplus(self.evu_counter.calc_raw_surplus()) - self.surplus_controlled.check_switch_on() if self.evu_counter.data.set.surplus_power_left > 0: log.info("**PV-geführten Strom setzen**") common.reset_current_to_target_current() diff --git a/packages/control/algorithm/integration_test/pv_charging_test.py b/packages/control/algorithm/integration_test/pv_charging_test.py index 985dcd3c0f..2147814339 100644 --- a/packages/control/algorithm/integration_test/pv_charging_test.py +++ b/packages/control/algorithm/integration_test/pv_charging_test.py @@ -115,7 +115,7 @@ def assert_counter_set(params: ParamsExpectedCounterSet): def test_start_pv_delay(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatch): # alle 3 im PV-laden, keine Ladung -> bei zwei die Verzögerung starten, für den 3. reicht es nicht # setup - data.data.counter_data["counter0"].data.set.raw_power_left = 31775 + data.data.counter_data["counter0"].data.set.raw_power_left = 31975 data.data.counter_data["counter0"].data.set.raw_currents_left = [32, 30, 31] data.data.counter_data["counter6"].data.set.raw_currents_left = [16, 12, 14] data.data.counter_data["counter0"].data.set.reserved_surplus = 0 @@ -127,13 +127,13 @@ def test_start_pv_delay(all_cp_pv_charging_3p, all_cp_not_charging, monkeypatch) for i in range(3, 6): assert data.data.cp_data[f"cp{i}"].data.set.current == 0 assert data.data.cp_data[ - "cp3"].data.control_parameter.timestamp_switch_on_off == 1652683252.0 + "cp3"].data.control_parameter.timestamp_switch_on_off is None assert data.data.cp_data[ "cp4"].data.control_parameter.timestamp_switch_on_off == 1652683252.0 assert data.data.cp_data[ - "cp5"].data.control_parameter.timestamp_switch_on_off is None - assert data.data.counter_data["counter0"].data.set.raw_power_left == 31775 - assert data.data.counter_data["counter0"].data.set.surplus_power_left == 9890 + "cp5"].data.control_parameter.timestamp_switch_on_off == 1652683252.0 + assert data.data.counter_data["counter0"].data.set.raw_power_left == 31975 + assert data.data.counter_data["counter0"].data.set.surplus_power_left == 10090.0 assert data.data.counter_data["counter0"].data.set.reserved_surplus == 9000 diff --git a/packages/control/algorithm/min_current.py b/packages/control/algorithm/min_current.py index ff24452cba..8dada55ce0 100644 --- a/packages/control/algorithm/min_current.py +++ b/packages/control/algorithm/min_current.py @@ -1,7 +1,9 @@ import logging +from control import data from control.algorithm import common -from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_MIN_CURRENT +from control.algorithm.chargemodes import CONSIDERED_CHARGE_MODES_MIN_CURRENT, CONSIDERED_CHARGE_MODES_PV_ONLY +from control.chargepoint.chargepoint_state import ChargepointState from control.loadmanagement import Loadmanagement from control.algorithm.filter_chargepoints import get_chargepoints_by_mode_and_counter @@ -41,5 +43,12 @@ def set_min_current(self) -> None: cp.data.control_parameter.min_current, cp) else: + if mode_tuple in CONSIDERED_CHARGE_MODES_PV_ONLY: + try: + if (cp.data.control_parameter.state == ChargepointState.NO_CHARGING_ALLOWED or + cp.data.control_parameter.state == ChargepointState.SWITCH_ON_DELAY): + data.data.counter_all_data.get_evu_counter().switch_on_threshold_reached(cp) + except Exception: + log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}") cp.data.set.current = 0 preferenced_chargepoints.pop(0) diff --git a/packages/control/algorithm/surplus_controlled.py b/packages/control/algorithm/surplus_controlled.py index ef95e8cf52..b5a45aad97 100644 --- a/packages/control/algorithm/surplus_controlled.py +++ b/packages/control/algorithm/surplus_controlled.py @@ -181,15 +181,6 @@ def phase_switch_necessary() -> bool: except Exception: log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}") - def check_switch_on(self) -> None: - for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_PV_ONLY): - try: - if (cp.data.control_parameter.state == ChargepointState.NO_CHARGING_ALLOWED or - cp.data.control_parameter.state == ChargepointState.SWITCH_ON_DELAY): - data.data.counter_all_data.get_evu_counter().switch_on_threshold_reached(cp) - except Exception: - log.exception(f"Fehler in der PV-gesteuerten Ladung bei {cp.num}") - def set_required_current_to_max(self) -> None: for cp in get_chargepoints_by_chargemodes(CONSIDERED_CHARGE_MODES_SURPLUS): try: diff --git a/packages/control/counter.py b/packages/control/counter.py index 400f166ab8..32af37e5c4 100644 --- a/packages/control/counter.py +++ b/packages/control/counter.py @@ -262,7 +262,7 @@ def get_usable_surplus(self, feed_in_yield: float) -> float: SWITCH_ON_MAX_PHASES = "Der Überschuss ist ausreichend, um direkt mit {} Phasen zu laden." def calc_switch_on_power(self, chargepoint: Chargepoint) -> Tuple[float, float]: - surplus = self.data.set.surplus_power_left - self.data.set.reserved_surplus + surplus = self.calc_raw_surplus() - self.data.set.reserved_surplus control_parameter = chargepoint.data.control_parameter pv_config = data.data.general_data.data.chargemode_config.pv_charging