@@ -28,8 +28,8 @@ def main() -> None:
2828 parser .add_argument (
2929 "--cid" ,
3030 nargs = "+" ,
31- type = int ,
32- help = "Component IDs" ,
31+ type = str ,
32+ help = "Component IDs or formulae " ,
3333 )
3434 parser .add_argument (
3535 "--metrics" ,
@@ -102,7 +102,7 @@ def main() -> None:
102102async def run (
103103 * ,
104104 microgrid_id : int ,
105- component_id : list [int ],
105+ component_id : list [str ],
106106 metric_names : list [str ],
107107 start_dt : datetime | None ,
108108 end_dt : datetime | None ,
@@ -134,31 +134,48 @@ async def run(
134134 client = ReportingApiClient (service_address , key )
135135
136136 metrics = [Metric [mn ] for mn in metric_names ]
137- microgrid_components = [(microgrid_id , component_id )]
138137
139- def data_iter () -> AsyncIterator [MetricSample ]:
138+ cids = [int (cid .strip ()) for cid in component_id if cid .strip ().isdigit ()]
139+ formulas = [cid .strip () for cid in component_id if not cid .strip ().isdigit ()]
140+ microgrid_components = [(microgrid_id , cids )]
141+
142+ async def data_iter () -> AsyncIterator [MetricSample ]:
140143 """Iterate over single metric.
141144
142145 Just a wrapper around the client method for readability.
143146
144- Returns :
145- Iterator over single metric samples
147+ Yields :
148+ Single metric samples
146149 """
147150 resampling_period = (
148151 timedelta (seconds = resampling_period_s )
149152 if resampling_period_s is not None
150153 else None
151154 )
152155
153- return client .list_microgrid_components_data (
156+ async for sample in client .list_microgrid_components_data (
154157 microgrid_components = microgrid_components ,
155158 metrics = metrics ,
156159 start_dt = start_dt ,
157160 end_dt = end_dt ,
158161 resampling_period = resampling_period ,
159162 include_states = states ,
160163 include_bounds = bounds ,
161- )
164+ ):
165+ yield sample
166+
167+ for formula in formulas :
168+ assert resampling_period is not None
169+ for metric in metrics :
170+ async for sample in client .receive_aggregated_data (
171+ microgrid_id = microgrid_id ,
172+ metric = metric ,
173+ aggregation_formula = formula ,
174+ start = start_dt ,
175+ end = end_dt ,
176+ resampling_period = resampling_period ,
177+ ):
178+ yield sample
162179
163180 if fmt == "iter" :
164181 # Iterate over single metric generator
0 commit comments