Skip to content

Commit

Permalink
fix amount limit
Browse files Browse the repository at this point in the history
  • Loading branch information
LKuemmel committed Jul 31, 2023
1 parent bb4893c commit b059e17
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 23 deletions.
2 changes: 1 addition & 1 deletion packages/control/chargepoint/chargepoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,7 @@ def update(self, ev_list: Dict[str, Ev]) -> None:
charging_ev.data.control_parameter.phases = min(
self.get_phases_by_selected_chargemode(), max_phase_hw)
state, message_ev, submode, required_current, phases = charging_ev.get_required_current(
self.data.set.log.imported_since_mode_switch,
self.data.get.imported,
max_phase_hw,
self.cp_ev_support_phase_switch())
phases = self.set_phases(phases)
Expand Down
51 changes: 32 additions & 19 deletions packages/control/ev.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,8 @@ class ControlParameter:
timestamp_perform_phase_switch: Optional[str] = None
submode: Chargemode_enum = Chargemode_enum.STOP
chargemode: Chargemode_enum = Chargemode_enum.STOP
used_amount_instant_charging: float = 0
imported_at_plan_start: float = 0
imported_instant_charging: Optional[float] = None
imported_at_plan_start: Optional[float] = None
current_plan: Optional[str] = None
state: ChargepointState = ChargepointState.NO_CHARGING_ALLOWED

Expand Down Expand Up @@ -230,9 +230,9 @@ def reset_ev(self):
Pub().pub("openWB/set/vehicle/"+str(self.num) +
"/control_parameter/chargemode", "stop")
Pub().pub("openWB/set/vehicle/"+str(self.num) +
"/control_parameter/used_amount_instant_charging", 0)
"/control_parameter/imported_instant_charging", None)
Pub().pub("openWB/set/vehicle/"+str(self.num) +
"/control_parameter/imported_at_plan_start", 0)
"/control_parameter/imported_at_plan_start", None)
Pub().pub("openWB/set/vehicle/"+str(self.num) +
"/control_parameter/current_plan", None)
Pub().pub("openWB/set/vehicle/"+str(self.num) +
Expand All @@ -242,8 +242,8 @@ def reset_ev(self):
self.data.control_parameter.timestamp_perform_phase_switch = None
self.data.control_parameter.submode = "stop"
self.data.control_parameter.chargemode = "stop"
self.data.control_parameter.used_amount_instant_charging = 0
self.data.control_parameter.imported_at_plan_start = 0
self.data.control_parameter.imported_instant_charging = None
self.data.control_parameter.imported_at_plan_start = None
self.data.control_parameter.current_plan = None
self.data.control_parameter.state = ChargepointState.NO_CHARGING_ALLOWED
except Exception:
Expand All @@ -268,7 +268,7 @@ def soc_interval_expired(self, soc_update_data: SocUpdateData) -> bool:
return request_soc

def get_required_current(self,
charged_since_mode_switch: float,
imported: float,
max_phases: int,
phase_switch_supported: bool) -> Tuple[bool, Optional[str], str, float, int]:
""" ermittelt, ob und mit welchem Strom das EV geladen werden soll (unabhängig vom Lastmanagement)
Expand All @@ -295,7 +295,9 @@ def get_required_current(self,
state = True
try:
if self.charge_template.data.chargemode.selected == "scheduled_charging":
used_amount = charged_since_mode_switch - self.data.control_parameter.imported_at_plan_start
if self.data.control_parameter.imported_at_plan_start is None:
self.data.control_parameter.imported_at_plan_start = imported
used_amount = imported - self.data.control_parameter.imported_at_plan_start
plan_data = self.charge_template.scheduled_charging_recent_plan(
self.data.get.soc,
self.ev_template,
Expand All @@ -309,10 +311,10 @@ def get_required_current(self,
if (self.charge_template.data.chargemode.scheduled_charging.plans[plan_data.num].limit.
selected == "amount" and
name != self.data.control_parameter.current_plan):
self.data.control_parameter.imported_at_plan_start = charged_since_mode_switch
self.data.control_parameter.imported_at_plan_start = imported
Pub().pub(
f"openWB/set/vehicle/{self.num}/control_parameter/imported_at_plan_start",
charged_since_mode_switch)
imported)
else:
name = None
required_current, submode, message, phases = self.charge_template.scheduled_charging_calc_current(
Expand All @@ -327,30 +329,41 @@ def get_required_current(self,
# Wenn Zielladen auf Überschuss wartet, prüfen, ob Zeitladen aktiv ist.
if (submode != "instant_charging" and
self.charge_template.data.time_charging.active):
used_amount = charged_since_mode_switch - self.data.control_parameter.imported_at_plan_start
if self.data.control_parameter.imported_at_plan_start is None:
self.data.control_parameter.imported_at_plan_start = imported
Pub().pub(
f"openWB/set/vehicle/{self.num}/control_parameter/imported_at_plan_start",
imported)
used_amount = imported - self.data.control_parameter.imported_at_plan_start
tmp_current, tmp_submode, tmp_message, name = self.charge_template.time_charging(
self.data.get.soc,
used_amount
)
if tmp_current > 0:
self.data.control_parameter.current_plan = name
Pub().pub(f"openWB/set/vehicle/{self.num}/control_parameter/current_plan", name)
# Wenn mit einem neuen Plan geladen wird, muss auch die Energiemenge von neuem gezählt werden.
if name != self.data.control_parameter.current_plan:
self.data.control_parameter.imported_at_plan_start = imported
Pub().pub(
f"openWB/set/vehicle/{self.num}/control_parameter/imported_at_plan_start",
imported)
required_current = tmp_current
submode = tmp_submode
message = tmp_message
if (required_current == 0) or (required_current is None):
if self.charge_template.data.chargemode.selected == "instant_charging":
# Wenn der Submode auf stop gestellt wird, wird auch die Energiemenge seit Wechsel des Modus
# zurückgesetzt, dann darf nicht die Energiemenge erneute geladen werden.
if (self.charge_template.data.chargemode.instant_charging.limit.selected == "amount" and
charged_since_mode_switch > self.data.control_parameter.used_amount_instant_charging):
self.data.control_parameter.used_amount_instant_charging = charged_since_mode_switch
if self.data.control_parameter.imported_instant_charging is None:
self.data.control_parameter.imported_instant_charging = imported
Pub().pub(
f"openWB/set/vehicle/{self.num}/control_parameter/used_amount_instant_charging",
charged_since_mode_switch)
f"openWB/set/vehicle/{self.num}/control_parameter/imported_instant_charging",
imported)
used_amount = imported - self.data.control_parameter.imported_instant_charging
required_current, submode, message = self.charge_template.instant_charging(
self.data.get.soc,
self.data.control_parameter.used_amount_instant_charging)
used_amount)
elif self.charge_template.data.chargemode.selected == "pv_charging":
required_current, submode, message = self.charge_template.pv_charging(
self.data.get.soc, self.ev_template.data.min_current)
Expand Down Expand Up @@ -659,7 +672,7 @@ def time_charging(self,

def instant_charging(self,
soc: float,
used_amount_instant_charging: float) -> Tuple[int, str, Optional[str]]:
imported_instant_charging: float) -> Tuple[int, str, Optional[str]]:
""" prüft, ob die Lademengenbegrenzung erreicht wurde und setzt entsprechend den Ladestrom.
"""
message = None
Expand All @@ -676,7 +689,7 @@ def instant_charging(self,
else:
return 0, "stop", self.INSTANT_CHARGING_SOC_REACHED
elif instant_charging.limit.selected == "amount":
if used_amount_instant_charging < self.data.chargemode.instant_charging.limit.amount:
if imported_instant_charging < self.data.chargemode.instant_charging.limit.amount:
return instant_charging.current, "instant_charging", message
else:
return 0, "stop", self.INSTANT_CHARGING_AMOUNT_REACHED
Expand Down
4 changes: 2 additions & 2 deletions packages/helpermodules/setdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def _validate_value(self, msg: mqtt.MQTTMessage, data_type, ranges=[], collectio
else:
log.error(f"Payload ungültig: Topic {msg.topic}, Payload {value} sollte ein String sein.")
elif data_type == int or data_type == float:
if self._validate_min_max_value(value, msg, data_type, ranges):
if self._validate_min_max_value(value, msg, data_type, ranges) or isinstance(value, type(None)):
valid = True
elif data_type == bool:
valid, value = self._validate_bool_value(value, msg)
Expand Down Expand Up @@ -432,7 +432,7 @@ def process_vehicle_topic(self, msg: mqtt.MQTTMessage):
"/control_parameter/timestamp_perform_phase_switch" in msg.topic or
"/control_parameter/current_plan" in msg.topic):
self._validate_value(msg, str)
elif ("/control_parameter/used_amount_instant_charging" in msg.topic or
elif ("/control_parameter/imported_instant_charging" in msg.topic or
"/control_parameter/imported_at_plan_start" in msg.topic):
self._validate_value(msg, float, [(0, float("inf"))])
elif "/control_parameter/state" in msg.topic:
Expand Down
2 changes: 1 addition & 1 deletion packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ class UpdateConfig:
"^openWB/vehicle/[0-9]+/control_parameter/timestamp_auto_phase_switch$",
"^openWB/vehicle/[0-9]+/control_parameter/timestamp_perform_phase_switch$",
"^openWB/vehicle/[0-9]+/control_parameter/timestamp_switch_on_off$",
"^openWB/vehicle/[0-9]+/control_parameter/used_amount_instant_charging$",
"^openWB/vehicle/[0-9]+/control_parameter/imported_instant_charging$",
"^openWB/vehicle/[0-9]+/control_parameter/phases$",
"^openWB/vehicle/[0-9]+/control_parameter/state$",
"^openWB/vehicle/[0-9]+/set/ev_template$",
Expand Down

0 comments on commit b059e17

Please sign in to comment.