Skip to content

Commit

Permalink
Anpassung Ziel-SoC/Limit-SoC (#1662)
Browse files Browse the repository at this point in the history
* Anpassung Ziel-SoC/Limit-SoC

* Anpassung if-statement -> pytest

* fix text

* flake8 line too long
  • Loading branch information
pama87 authored Jun 27, 2024
1 parent 6346adf commit 45ad961
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions packages/control/ev.py
Original file line number Diff line number Diff line change
Expand Up @@ -761,7 +761,11 @@ def calculate_duration(self,
duration = missing_amount/(plan.current * phases*230) * 3600
return duration, missing_amount

SCHEDULED_CHARGING_REACHED_LIMIT_SOC = "Kein Zielladen, da der Ziel-Soc und das SoC-Limit bereits erreicht wurden."
SCHEDULED_REACHED_LIMIT_SOC = ("Kein Zielladen, da noch Zeit bis zum Zieltermin ist. "
"Kein Zielladen mit Überschuss, da das SoC-Limit für Überschuss-Laden " +
"erreicht wurde.")
SCHEDULED_CHARGING_REACHED_LIMIT_SOC = ("Kein Zielladen, da das Limit für Fahrzeug Laden mit Überschuss (SoC-Limit)"
" sowie der Fahrzeug-SoC (Ziel-SoC) bereits erreicht wurde.")
SCHEDULED_CHARGING_REACHED_AMOUNT = "Kein Zielladen, da die Energiemenge bereits erreicht wurde."
SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC = ("Falls vorhanden wird mit EVU-Überschuss geladen, da der Ziel-Soc "
"für Zielladen bereits erreicht wurde.")
Expand All @@ -787,22 +791,22 @@ def scheduled_charging_calc_current(self,
min_current: int,
soc_request_intervall_offset: int) -> Tuple[float, str, str, int]:
current = 0
mode = "stop"
submode = "stop"
if plan_data is None:
if len(self.data.chargemode.scheduled_charging.plans) == 0:
return current, mode, self.SCHEDULED_CHARGING_NO_PLANS_CONFIGURED, control_parameter_phases
return current, submode, self.SCHEDULED_CHARGING_NO_PLANS_CONFIGURED, control_parameter_phases
else:
return current, mode, self.SCHEDULED_CHARGING_NO_DATE_PENDING, control_parameter_phases
return current, submode, self.SCHEDULED_CHARGING_NO_DATE_PENDING, control_parameter_phases
current_plan = self.data.chargemode.scheduled_charging.plans[plan_data.num]
limit = current_plan.limit
phases = plan_data.phases
log.debug("Verwendeter Plan: "+str(current_plan.name))
if limit.selected == "soc" and soc >= limit.soc_limit:
if limit.selected == "soc" and soc >= limit.soc_limit and soc >= limit.soc_scheduled:
message = self.SCHEDULED_CHARGING_REACHED_LIMIT_SOC
elif limit.selected == "soc" and limit.soc_scheduled <= soc < limit.soc_limit:
message = self.SCHEDULED_CHARGING_REACHED_SCHEDULED_SOC
current = min_current
mode = "pv_charging"
submode = "pv_charging"
# bei Überschuss-Laden mit der Phasenzahl aus den control_parameter laden,
# um die Umschaltung zu berücksichtigen.
phases = control_parameter_phases
Expand All @@ -817,7 +821,7 @@ def scheduled_charging_calc_current(self,
message = self.SCHEDULED_CHARGING_IN_TIME.format(
plan_data.available_current, limit_string, current_plan.time)
current = plan_data.available_current
mode = "instant_charging"
submode = "instant_charging"
# weniger als die berechnete Zeit verfügbar
# Ladestart wurde um maximal 20 Min verpasst.
elif plan_data.remaining_time <= 0 - soc_request_intervall_offset:
Expand All @@ -827,7 +831,7 @@ def scheduled_charging_calc_current(self,
current = min(plan_data.missing_amount/((plan_data.duration + plan_data.remaining_time) /
3600)/(phases*230), plan_data.max_current)
message = self.SCHEDULED_CHARGING_MAX_CURRENT.format(round(current, 2))
mode = "instant_charging"
submode = "instant_charging"
else:
# Wenn Elektronische Tarife aktiv sind, prüfen, ob jetzt ein günstiger Zeitpunkt zum Laden
# ist.
Expand All @@ -837,18 +841,24 @@ def scheduled_charging_calc_current(self,
if timecheck.is_list_valid(hourlist):
message = self.SCHEDULED_CHARGING_CHEAP_HOUR
current = plan_data.available_current
mode = "instant_charging"
else:
submode = "instant_charging"
elif soc <= limit.soc_limit:
message = self.SCHEDULED_CHARGING_EXPENSIVE_HOUR
current = min_current
mode = "pv_charging"
submode = "pv_charging"
phases = control_parameter_phases
else:
message = self.SCHEDULED_REACHED_LIMIT_SOC
else:
message = self.SCHEDULED_CHARGING_USE_PV
current = min_current
mode = "pv_charging"
phases = control_parameter_phases
return current, mode, message, phases
# Wenn SoC-Limit erreicht wurde, soll nicht mehr mit Überschuss geladen werden
if soc >= limit.soc_limit:
message = self.SCHEDULED_REACHED_LIMIT_SOC
else:
message = self.SCHEDULED_CHARGING_USE_PV
current = min_current
submode = "pv_charging"
phases = control_parameter_phases
return current, submode, message, phases

def standby(self) -> Tuple[int, str, str]:
return 0, "standby", "Keine Ladung, da der Lademodus Standby aktiv ist."
Expand Down

0 comments on commit 45ad961

Please sign in to comment.