66from control .chargepoint .chargepoint import Chargepoint
77from control .counter import Counter
88from control .limiting_value import LimitingValue , LoadmanagementLimit
9+ from helpermodules .phase_handling import voltages_mean
910from modules .common .utils .component_parser import get_component_name_by_id
1011
1112
@@ -35,7 +36,7 @@ def get_available_currents(self,
3536 limit = new_limit if new_limit .limiting_value is not None else limit
3637
3738 available_currents , new_limit = self ._limit_by_power (
38- counter , available_currents , cp .data .get .voltages , counter .data .set .raw_power_left , feed_in )
39+ counter , available_currents , voltages_mean ( cp .data .get .voltages ) , counter .data .set .raw_power_left , feed_in )
3940 limit = new_limit if new_limit .limiting_value is not None else limit
4041
4142 if f"counter{ counter .num } " == data .data .counter_all_data .get_evu_counter_str ():
@@ -47,7 +48,7 @@ def get_available_currents(self,
4748
4849 def get_available_currents_surplus (self ,
4950 missing_currents : List [float ],
50- cp_voltages : List [ float ] ,
51+ cp_voltage : float ,
5152 counter : Counter ,
5253 cp : Chargepoint ,
5354 feed_in : int = 0 ) -> Tuple [List [float ], LoadmanagementLimit ]:
@@ -61,7 +62,7 @@ def get_available_currents_surplus(self,
6162 limit = new_limit if new_limit .limiting_value is not None else limit
6263
6364 available_currents , new_limit = self ._limit_by_power (
64- counter , available_currents , cp_voltages , counter .data .set .surplus_power_left , feed_in )
65+ counter , available_currents , cp_voltage , counter .data .set .surplus_power_left , feed_in )
6566 limit = new_limit if new_limit .limiting_value is not None else limit
6667
6768 if f"counter{ counter .num } " == data .data .counter_all_data .get_evu_counter_str ():
@@ -94,20 +95,22 @@ def _limit_by_unbalanced_load(self,
9495 def _limit_by_power (self ,
9596 counter : Counter ,
9697 available_currents : List [float ],
97- cp_voltages : List [ float ] ,
98+ cp_voltage : float ,
9899 raw_power_left : Optional [float ],
99100 feed_in : Optional [float ]) -> Tuple [List [float ], LoadmanagementLimit ]:
101+ # Mittelwert der Spannungen verwenden, um Phasenverdrehung zu kompensieren
102+ # (Probleme bei einphasig angeschlossenen Wallboxen)
100103 currents = available_currents .copy ()
101104 limit = LoadmanagementLimit (None , None )
102105 if raw_power_left :
103106 if feed_in :
104107 raw_power_left = raw_power_left - feed_in
105108 log .debug (f"Verbleibende Leistung unter Berücksichtigung der Einspeisegrenze: { raw_power_left } W" )
106- if sum ([c * v for c , v in zip ( available_currents , cp_voltages ) ]) > raw_power_left :
109+ if sum ([c * cp_voltage for c in available_currents ]) > raw_power_left :
107110 for i in range (0 , 3 ):
108111 try :
109112 # Am meisten belastete Phase trägt am meisten zur Leistungsreduktion bei.
110- currents [i ] = available_currents [i ] / sum (available_currents ) * raw_power_left / cp_voltages [ i ]
113+ currents [i ] = available_currents [i ] / sum (available_currents ) * raw_power_left / cp_voltage
111114 except ZeroDivisionError :
112115 # bei einphasig angeschlossenen Wallboxen ist die Spannung der anderen Phasen 0V
113116 currents [i ] = 0.0
0 commit comments