1010
1111import  grpc 
1212from  frequenz .channels  import  Broadcast , Sender , merge , select , selected_from 
13- from  frequenz .channels .timer  import  SkipMissedAndDrift , Timer 
1413from  frequenz .client .microgrid  import  ApiClient , ComponentCategory , EVChargerData 
1514from  typing_extensions  import  override 
1615
2019from  ....._internal ._math  import  is_close_to_zero 
2120from  .....timeseries  import  Power , Sample3Phase , Voltage 
2221from  ..._component_pool_status_tracker  import  ComponentPoolStatusTracker 
23- 
24- # from .._component_pool_status_tracker import ComponentPoolStatusTracker 
2522from  ..._component_status  import  ComponentPoolStatus , EVChargerStatusTracker 
2623from  ...request  import  Request 
2724from  ...result  import  PartialFailure , Result , Success 
3229_logger  =  logging .getLogger (__name__ )
3330
3431_DEFAULT_API_REQUEST_TIMEOUT  =  timedelta (seconds = 5.0 )
35- _TGT_POWER_RESEND_INTERVAL  =  timedelta (seconds = 5.0 )
3632
3733
3834class  EVChargerManager (ComponentManager ):
@@ -79,7 +75,9 @@ def component_ids(self) -> collections.abc.Set[int]:
7975    @override  
8076    async  def  start (self ) ->  None :
8177        """Start the ev charger data manager.""" 
82-         self ._task  =  asyncio .create_task (self ._run_forever ())
78+         # Need to start a task only if there are EV chargers in the component graph. 
79+         if  self ._ev_charger_ids :
80+             self ._task  =  asyncio .create_task (self ._run_forever ())
8381
8482    @override  
8583    async  def  distribute_power (self , request : Request ) ->  None :
@@ -88,7 +86,8 @@ async def distribute_power(self, request: Request) -> None:
8886        Args: 
8987            request: Request to get the distribution for. 
9088        """ 
91-         await  self ._target_power_tx .send (request )
89+         if  self ._ev_charger_ids :
90+             await  self ._target_power_tx .send (request )
9291
9392    @override  
9493    async  def  stop (self ) ->  None :
@@ -222,10 +221,8 @@ async def _run(self) -> None:  # pylint: disable=too-many-locals
222221        )
223222        target_power_rx  =  self ._target_power_channel .new_receiver ()
224223        api_request_timeout  =  _DEFAULT_API_REQUEST_TIMEOUT 
225-         resend_timer  =  Timer (_TGT_POWER_RESEND_INTERVAL , SkipMissedAndDrift ())
226224        latest_target_powers : dict [int , Power ] =  {}
227-         async  for  selected  in  select (ev_charger_data_rx , target_power_rx , resend_timer ):
228-             resending  =  False 
225+         async  for  selected  in  select (ev_charger_data_rx , target_power_rx ):
229226            target_power_changes  =  {}
230227            now  =  datetime .now (tz = timezone .utc )
231228
@@ -276,21 +273,14 @@ async def _run(self) -> None:  # pylint: disable=too-many-locals
276273                    diff_power  =  allocated_power  -  self ._target_power 
277274                    target_power_changes  =  self ._deallocate_unused_power (diff_power )
278275
279-             elif  selected_from (selected , resend_timer ):
280-                 target_power_changes  =  latest_target_powers 
281-                 resending  =  True 
282- 
283276            if  target_power_changes :
284277                _logger .debug ("Setting power to EV chargers: %s" , target_power_changes )
285278            else :
286279                continue 
287-             if  not  resending :
288-                 for  component_id , power  in  target_power_changes .items ():
289-                     self ._evc_states .get (component_id ).update_last_allocation (
290-                         power , now 
291-                     )
280+             for  component_id , power  in  target_power_changes .items ():
281+                 self ._evc_states .get (component_id ).update_last_allocation (power , now )
292282
293-                  latest_target_powers .update (target_power_changes )
283+             latest_target_powers .update (target_power_changes )
294284            result  =  await  self ._set_api_power (
295285                api , target_power_changes , api_request_timeout 
296286            )
0 commit comments