Skip to content

Commit 1f18880

Browse files
committed
Add support for ev chargers and 3-phase current in mock microgrid
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent e6760f0 commit 1f18880

File tree

1 file changed

+55
-6
lines changed

1 file changed

+55
-6
lines changed

tests/timeseries/mock_microgrid.py

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from frequenz.api.microgrid.battery_pb2 import Battery
1515
from frequenz.api.microgrid.battery_pb2 import Data as BatteryData
1616
from 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
1719
from frequenz.api.microgrid.inverter_pb2 import Data as InverterData
1820
from frequenz.api.microgrid.inverter_pb2 import Inverter
1921
from 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

Comments
 (0)