1414from frequenz .api .microgrid .battery_pb2 import Battery
1515from frequenz .api .microgrid .battery_pb2 import Data as BatteryData
1616from frequenz .api .microgrid .common_pb2 import AC , Metric , MetricAggregation
17+ from frequenz .api .microgrid .ev_charger_pb2 import Data as EVChargerData
18+ from frequenz .api .microgrid .ev_charger_pb2 import EVCharger
1719from frequenz .api .microgrid .inverter_pb2 import Data as InverterData
1820from frequenz .api .microgrid .inverter_pb2 import Inverter
1921from frequenz .api .microgrid .inverter_pb2 import Type as InverterType
@@ -41,6 +43,7 @@ class MockMicrogrid:
4143
4244 grid_id = 1
4345 main_meter_id = 4
46+ evc_id_suffix = 6
4447 meter_id_suffix = 7
4548 inverter_id_suffix = 8
4649 battery_id_suffix = 9
@@ -67,6 +70,7 @@ def __init__(
6770 self .battery_inverter_ids : list [int ] = []
6871 self .pv_inverter_ids : list [int ] = []
6972 self .battery_ids : list [int ] = []
73+ self .evc_ids : list [int ] = []
7074 self .meter_ids : list [int ] = [4 ]
7175
7276 self ._actors : list [typing .Any ] = []
@@ -114,7 +118,14 @@ def meter_msg(value: float) -> ComponentData:
114118 id = request .id ,
115119 ts = timestamp ,
116120 meter = Meter (
117- data = MeterData (ac = AC (power_active = Metric (value = value )))
121+ data = MeterData (
122+ ac = AC (
123+ power_active = Metric (value = value ),
124+ phase_1 = AC .ACPhase (current = Metric (value = value + 100.0 )),
125+ phase_2 = AC .ACPhase (current = Metric (value = value + 101.0 )),
126+ phase_3 = AC .ACPhase (current = Metric (value = value + 102.0 )),
127+ )
128+ )
118129 ),
119130 )
120131
@@ -138,6 +149,24 @@ def battery_msg(value: float) -> ComponentData:
138149 battery = Battery (data = BatteryData (soc = MetricAggregation (avg = value ))),
139150 )
140151
152+ def evc_msg (value : float ) -> ComponentData :
153+ timestamp = Timestamp ()
154+ timestamp .GetCurrentTime ()
155+ return ComponentData (
156+ id = request .id ,
157+ ts = timestamp ,
158+ ev_charger = EVCharger (
159+ data = EVChargerData (
160+ ac = AC (
161+ power_active = Metric (value = value ),
162+ phase_1 = AC .ACPhase (current = Metric (value = value + 10.0 )),
163+ phase_2 = AC .ACPhase (current = Metric (value = value + 11.0 )),
164+ phase_3 = AC .ACPhase (current = Metric (value = value + 12.0 )),
165+ )
166+ )
167+ ),
168+ )
169+
141170 if request .id % 10 == cls .inverter_id_suffix :
142171 next_msg = inverter_msg
143172 elif (
@@ -147,6 +176,8 @@ def battery_msg(value: float) -> ComponentData:
147176 next_msg = meter_msg
148177 elif request .id % 10 == cls .battery_id_suffix :
149178 next_msg = battery_msg
179+ elif request .id % 10 == cls .evc_id_suffix :
180+ next_msg = evc_msg
150181 else :
151182 raise RuntimeError (
152183 f"Component id { request .id } unsupported by MockMicrogrid"
@@ -181,9 +212,9 @@ def add_batteries(self, count: int) -> None:
181212 count: number of battery sets to add.
182213 """
183214 for _ in range (count ):
184- meter_id = self ._id_increment * 10 + 7
185- inv_id = self ._id_increment * 10 + 8
186- bat_id = self ._id_increment * 10 + 9
215+ meter_id = self ._id_increment * 10 + self . meter_id_suffix
216+ inv_id = self ._id_increment * 10 + self . inverter_id_suffix
217+ bat_id = self ._id_increment * 10 + self . battery_id_suffix
187218 self ._id_increment += 1
188219
189220 self .meter_ids .append (meter_id )
@@ -214,8 +245,8 @@ def add_solar_inverters(self, count: int) -> None:
214245 count: number of inverters to add to the microgrid.
215246 """
216247 for _ in range (count ):
217- meter_id = self ._id_increment * 10 + 7
218- inv_id = self ._id_increment * 10 + 8
248+ meter_id = self ._id_increment * 10 + self . meter_id_suffix
249+ inv_id = self ._id_increment * 10 + self . inverter_id_suffix
219250 self ._id_increment += 1
220251
221252 self .meter_ids .append (meter_id )
@@ -233,6 +264,24 @@ def add_solar_inverters(self, count: int) -> None:
233264 self ._servicer .add_connection (self ._connect_to , meter_id )
234265 self ._servicer .add_connection (meter_id , inv_id )
235266
267+ def add_ev_chargers (self , count : int ) -> None :
268+ """Add EV Chargers to the microgrid.
269+
270+ Args:
271+ count: Number of ev chargers to add to the microgrid.
272+ """
273+ for _ in range (count ):
274+ evc_id = self ._id_increment * 10 + self .evc_id_suffix
275+ self ._id_increment += 1
276+
277+ self .evc_ids .append (evc_id )
278+
279+ self ._servicer .add_component (
280+ evc_id ,
281+ microgrid_pb2 .ComponentCategory .COMPONENT_CATEGORY_EV_CHARGER ,
282+ )
283+ self ._servicer .add_connection (self ._connect_to , evc_id )
284+
236285 async def _init_client_and_actors (
237286 self ,
238287 ) -> Tuple [Sender [ComponentMetricRequest ], ChannelRegistry ]:
0 commit comments