33from typing import Callable , Dict , List , Optional , Tuple
44
55from control import data
6- from control .consumer .usage import NOT_CONTROLLED
6+ from control .consumer .usage import NOT_CONTROLLED , ON_OFF
77from control .algorithm .utils import get_medium_charging_current
88from control .chargemode import Chargemode
99from control .chargepoint .chargepoint_state import CHARGING_STATES , ChargepointState
@@ -60,11 +60,11 @@ def update(self):
6060 self .data .get .charge_state = True if self .data .get .power > 0 else False
6161 self .reset_chargemode_at_time ()
6262 self .is_switch_interval_elapsed ()
63- min_current , required_current , message , mode , submode = self .get_parameter ()
63+ required_current , message , mode , submode = self .get_parameter ()
6464 self .set_mode_changed (submode , mode )
6565 if self .chargemode_changed or self .submode_changed :
6666 data .data .counter_all_data .get_evu_counter ().reset_switch_on_off (self )
67- self .set_control_parameter (min_current , required_current ,
67+ self .set_control_parameter (required_current ,
6868 self .data .config .connected_phases , submode , mode )
6969 self .set_state_and_log (message )
7070 self .process_on_time ()
@@ -74,6 +74,15 @@ def update(self):
7474 except Exception :
7575 log .exception (f"Fehler bei Verbraucher { self .num } " )
7676
77+ def _get_min_current (self ):
78+ if self .data .usage .type == ConsumerUsage .SUSPENDABLE_TUNABLE :
79+ return self .data .config .min_current
80+ else :
81+ if self .data .get .charge_state :
82+ return get_medium_charging_current (self .data .get .currents )
83+ else :
84+ return self ._convert_power_to_current (self .data .config .max_power )
85+
7786 def process_on_time (self ):
7887 if self .data .get .charge_state :
7988 now = timecheck .create_timestamp ()
@@ -105,7 +114,7 @@ def is_switch_interval_elapsed(self):
105114 SURPLUS_CONTINOUS_STILL_RUNNING = ("Verbraucher läuft ggf auch ohne ausreichend Überschuss weiter, da der "
106115 "Verbraucher nicht abgeschaltet werden darf." )
107116
108- def get_parameter (self ) -> Tuple [float , float , Optional [str ], Optional [Chargemode ], Chargemode ]:
117+ def get_parameter (self ) -> Tuple [float , Optional [str ], Optional [Chargemode ], Chargemode ]:
109118 if self .data .set .switch_interval_elapsed is False :
110119 log .debug ("Intervall für neuen Schaltbefehl nicht abgelaufen." )
111120 return (0 ,
@@ -114,10 +123,6 @@ def get_parameter(self) -> Tuple[float, float, Optional[str], Optional[Chargemod
114123 self .data .control_parameter .chargemode ,
115124 self .data .control_parameter .submode )
116125
117- if self .data .usage .type == ConsumerUsage .SUSPENDABLE_TUNABLE :
118- min_current = self .data .config .min_current
119- else :
120- min_current = self ._convert_power_to_current (self .data .config .max_power )
121126 required_current = 0
122127 submode = Chargemode .STOP
123128 mode = self .data .usage .chargemode
@@ -144,10 +149,10 @@ def get_parameter(self) -> Tuple[float, float, Optional[str], Optional[Chargemod
144149 message = f"{ message or '' } { tmp_message or '' } " .strip ()
145150 if self .data .usage .chargemode == Chargemode .STOP :
146151 required_current , message , submode = self .stop ()
147- return min_current , required_current , message , mode , submode
152+ return required_current , message , mode , submode
148153
149154 def _parse_required_current_by_usage (self , required_current : float ) -> float :
150- if self .data .usage .type in [ ConsumerUsage . CONTINUOUS , ConsumerUsage . SUSPENDABLE_ONOFF ] :
155+ if self .data .usage .type in ON_OFF :
151156 if self .data .get .charge_state :
152157 return get_medium_charging_current (self .data .get .currents )
153158 else :
@@ -306,7 +311,7 @@ def convert_loading_hours_to_string(hour_list: List[datetime.datetime]) -> str:
306311 else :
307312 message = self .SCHEDULED_CHARGING_EXPENSIVE_HOUR .format (get_hours_message ())
308313 submode = Chargemode .PV_CHARGING
309- required_current = self ._parse_required_current_by_usage (self .data . config . min_current )
314+ required_current = self ._parse_required_current_by_usage (self ._get_min_current () )
310315 else :
311316 now = datetime .datetime .today ()
312317 start_time = now + datetime .timedelta (seconds = remaining_time )
@@ -317,7 +322,7 @@ def convert_loading_hours_to_string(hour_list: List[datetime.datetime]) -> str:
317322 message = self .SCHEDULED_CHARGING_USE_PV .format (
318323 f"am { start_time .strftime ('%d.%m' )} um { start_time .strftime ('%-H:%M' )} Uhr" )
319324 submode = Chargemode .PV_CHARGING
320- required_current = self ._parse_required_current_by_usage (self .data . config . min_current )
325+ required_current = self ._parse_required_current_by_usage (self ._get_min_current () )
321326 return required_current , message , submode
322327
323328 TIME_CHARGING_MIN_BAT_SOC_REACHED = ("Betrieb mit Zeitladen nach Speicher-SoC nicht möglich, da der SoC des"
@@ -380,18 +385,18 @@ def eco_charging(self) -> Tuple[float, Optional[str], Chargemode]:
380385 message = self .CHARGING_PRICE_LOW
381386 submode = Chargemode .INSTANT_CHARGING
382387 else :
383- required_current = self ._parse_required_current_by_usage (self .data . config . min_current )
388+ required_current = self ._parse_required_current_by_usage (self ._get_min_current () )
384389 message = self .CHARGING_PRICE_EXCEEDED
385390 if self .data .control_parameter .state in CHARGING_STATES :
386391 message += "Lädt mit Überschuss. "
387392 submode = Chargemode .PV_CHARGING
388393 else :
389- required_current = self ._parse_required_current_by_usage (self .data . config . min_current )
394+ required_current = self ._parse_required_current_by_usage (self ._get_min_current () )
390395 submode = Chargemode .PV_CHARGING
391396 return required_current , message , submode
392397
393398 def pv_charging (self ) -> Tuple [float , Optional [str ], Chargemode ]:
394- required_current = self ._parse_required_current_by_usage (self .data . config . min_current )
399+ required_current = self ._parse_required_current_by_usage (self ._get_min_current () )
395400 message = None
396401 submode = Chargemode .PV_CHARGING
397402 return required_current , message , submode
@@ -481,12 +486,11 @@ def reset_chargemode_at_time(self):
481486 self .data .usage .chargemode = self .data .usage .reset_chargemode .chargemode
482487
483488 def set_control_parameter (self ,
484- min_current : float ,
485489 required_current : float ,
486490 phases : int ,
487491 submode : Chargemode ,
488492 mode : Optional [Chargemode ]):
489- self .data .control_parameter .min_current = min_current
493+ self .data .control_parameter .min_current = self . _get_min_current ()
490494 self .data .control_parameter .required_current = required_current
491495 self .data .control_parameter .phases = phases
492496 self .data .control_parameter .submode = submode
0 commit comments