Skip to content

Commit 47d1379

Browse files
Remove the cons/prod formulas from logical meter
These formulas are replaced by a combination of the corresponding passive sign convention formulas and the recently added consumption and production operators. Signed-off-by: Matthias Wende <[email protected]>
1 parent 2c8d7df commit 47d1379

File tree

2 files changed

+3
-195
lines changed

2 files changed

+3
-195
lines changed

src/frequenz/sdk/timeseries/logical_meter/_logical_meter.py

Lines changed: 0 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -152,52 +152,6 @@ def grid_power(self) -> FormulaEngine[Power]:
152152
assert isinstance(engine, FormulaEngine)
153153
return engine
154154

155-
@property
156-
def grid_consumption_power(self) -> FormulaEngine[Power]:
157-
"""Fetch the grid consumption power for the microgrid.
158-
159-
This formula produces positive values when consuming power and 0 otherwise.
160-
161-
If a formula engine to calculate grid consumption power is not already running,
162-
it will be started.
163-
164-
A receiver from the formula engine can be created using the `new_receiver`
165-
method.
166-
167-
Returns:
168-
A FormulaEngine that will calculate and stream grid consumption power.
169-
"""
170-
engine = self._formula_pool.from_power_formula_generator(
171-
"grid_consumption_power",
172-
GridPowerFormula,
173-
FormulaGeneratorConfig(formula_type=FormulaType.CONSUMPTION),
174-
)
175-
assert isinstance(engine, FormulaEngine)
176-
return engine
177-
178-
@property
179-
def grid_production_power(self) -> FormulaEngine[Power]:
180-
"""Fetch the grid production power for the microgrid.
181-
182-
This formula produces positive values when producing power and 0 otherwise.
183-
184-
If a formula engine to calculate grid production power is not already running,
185-
it will be started.
186-
187-
A receiver from the formula engine can be created using the `new_receiver`
188-
method.
189-
190-
Returns:
191-
A FormulaEngine that will calculate and stream grid production power.
192-
"""
193-
engine = self._formula_pool.from_power_formula_generator(
194-
"grid_production_power",
195-
GridPowerFormula,
196-
FormulaGeneratorConfig(formula_type=FormulaType.PRODUCTION),
197-
)
198-
assert isinstance(engine, FormulaEngine)
199-
return engine
200-
201155
@property
202156
def grid_current(self) -> FormulaEngine3Phase[Current]:
203157
"""Fetch the grid power for the microgrid.
@@ -293,52 +247,6 @@ def pv_power(self) -> FormulaEngine[Power]:
293247
assert isinstance(engine, FormulaEngine)
294248
return engine
295249

296-
@property
297-
def pv_production_power(self) -> FormulaEngine[Power]:
298-
"""Fetch the PV power production in the microgrid.
299-
300-
This formula produces positive values when producing power and 0 otherwise.
301-
302-
If a formula engine to calculate PV power production is not already running, it
303-
will be started.
304-
305-
A receiver from the formula engine can be created using the `new_receiver`
306-
method.
307-
308-
Returns:
309-
A FormulaEngine that will calculate and stream PV power production.
310-
"""
311-
engine = self._formula_pool.from_power_formula_generator(
312-
"pv_production_power",
313-
PVPowerFormula,
314-
FormulaGeneratorConfig(formula_type=FormulaType.PRODUCTION),
315-
)
316-
assert isinstance(engine, FormulaEngine)
317-
return engine
318-
319-
@property
320-
def pv_consumption_power(self) -> FormulaEngine[Power]:
321-
"""Fetch the PV power consumption in the microgrid.
322-
323-
This formula produces positive values when consuming power and 0 otherwise.
324-
325-
If a formula engine to calculate PV power consumption is not already running, it
326-
will be started.
327-
328-
A receiver from the formula engine can be created using the `new_receiver`
329-
method.
330-
331-
Returns:
332-
A FormulaEngine that will calculate and stream PV power consumption.
333-
"""
334-
engine = self._formula_pool.from_power_formula_generator(
335-
"pv_consumption_power",
336-
PVPowerFormula,
337-
FormulaGeneratorConfig(formula_type=FormulaType.CONSUMPTION),
338-
)
339-
assert isinstance(engine, FormulaEngine)
340-
return engine
341-
342250
@property
343251
def chp_power(self) -> FormulaEngine[Power]:
344252
"""Fetch the CHP power production in the microgrid.
@@ -362,56 +270,6 @@ def chp_power(self) -> FormulaEngine[Power]:
362270
assert isinstance(engine, FormulaEngine)
363271
return engine
364272

365-
@property
366-
def chp_production_power(self) -> FormulaEngine[Power]:
367-
"""Fetch the CHP power production in the microgrid.
368-
369-
This formula produces positive values when producing power and 0 otherwise.
370-
371-
If a formula engine to calculate CHP power production is not already running, it
372-
will be started.
373-
374-
A receiver from the formula engine can be created using the `new_receiver`
375-
method.
376-
377-
Returns:
378-
A FormulaEngine that will calculate and stream CHP power production.
379-
"""
380-
engine = self._formula_pool.from_power_formula_generator(
381-
"chp_production_power",
382-
CHPPowerFormula,
383-
FormulaGeneratorConfig(
384-
formula_type=FormulaType.PRODUCTION,
385-
),
386-
)
387-
assert isinstance(engine, FormulaEngine)
388-
return engine
389-
390-
@property
391-
def chp_consumption_power(self) -> FormulaEngine[Power]:
392-
"""Fetch the CHP power consumption in the microgrid.
393-
394-
This formula produces positive values when consuming power and 0 otherwise.
395-
396-
If a formula engine to calculate CHP power consumption is not already running,
397-
it will be started.
398-
399-
A receiver from the formula engine can be created using the `new_receiver`
400-
method.
401-
402-
Returns:
403-
A FormulaEngine that will calculate and stream CHP power consumption.
404-
"""
405-
engine = self._formula_pool.from_power_formula_generator(
406-
"chp_consumption_power",
407-
CHPPowerFormula,
408-
FormulaGeneratorConfig(
409-
formula_type=FormulaType.CONSUMPTION,
410-
),
411-
)
412-
assert isinstance(engine, FormulaEngine)
413-
return engine
414-
415273
async def stop(self) -> None:
416274
"""Stop all formula engines."""
417275
await self._formula_pool.stop()

tests/timeseries/test_logical_meter.py

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -269,18 +269,12 @@ async def test_grid_production_consumption_power_consumer_meter(
269269

270270
logical_meter = microgrid.logical_meter()
271271
grid_recv = logical_meter.grid_power.new_receiver()
272-
grid_production_recv = logical_meter.grid_production_power.new_receiver()
273-
grid_consumption_recv = logical_meter.grid_consumption_power.new_receiver()
274272

275273
await mockgrid.mock_resampler.send_meter_power([1.0, 2.0, 3.0, 4.0])
276274
assert (await grid_recv.receive()).value == Power.from_watts(10.0)
277-
assert (await grid_production_recv.receive()).value == Power.from_watts(0.0)
278-
assert (await grid_consumption_recv.receive()).value == Power.from_watts(10.0)
279275

280276
await mockgrid.mock_resampler.send_meter_power([1.0, 2.0, -3.0, -4.0])
281277
assert (await grid_recv.receive()).value == Power.from_watts(-4.0)
282-
assert (await grid_production_recv.receive()).value == Power.from_watts(4.0)
283-
assert (await grid_consumption_recv.receive()).value == Power.from_watts(0.0)
284278

285279
async def test_grid_production_consumption_power_no_grid_meter(
286280
self,
@@ -294,18 +288,12 @@ async def test_grid_production_consumption_power_no_grid_meter(
294288

295289
logical_meter = microgrid.logical_meter()
296290
grid_recv = logical_meter.grid_power.new_receiver()
297-
grid_production_recv = logical_meter.grid_production_power.new_receiver()
298-
grid_consumption_recv = logical_meter.grid_consumption_power.new_receiver()
299291

300292
await mockgrid.mock_resampler.send_meter_power([2.5, 3.5, 4.0])
301293
assert (await grid_recv.receive()).value == Power.from_watts(10.0)
302-
assert (await grid_production_recv.receive()).value == Power.from_watts(0.0)
303-
assert (await grid_consumption_recv.receive()).value == Power.from_watts(10.0)
304294

305295
await mockgrid.mock_resampler.send_meter_power([3.0, -3.0, -4.0])
306296
assert (await grid_recv.receive()).value == Power.from_watts(-4.0)
307-
assert (await grid_production_recv.receive()).value == Power.from_watts(4.0)
308-
assert (await grid_consumption_recv.receive()).value == Power.from_watts(0.0)
309297

310298
async def test_chp_power(self, mocker: MockerFixture) -> None:
311299
"""Test the chp power formula."""
@@ -316,30 +304,12 @@ async def test_chp_power(self, mocker: MockerFixture) -> None:
316304

317305
logical_meter = microgrid.logical_meter()
318306
chp_power_receiver = logical_meter.chp_power.new_receiver()
319-
chp_production_power_receiver = (
320-
logical_meter.chp_production_power.new_receiver()
321-
)
322-
chp_consumption_power_receiver = (
323-
logical_meter.chp_consumption_power.new_receiver()
324-
)
325307

326308
await mockgrid.mock_resampler.send_meter_power([2.0, 3.0, 4.0])
327309
assert (await chp_power_receiver.receive()).value == Power.from_watts(2.0)
328-
assert (
329-
await chp_production_power_receiver.receive()
330-
).value == Power.from_watts(0.0)
331-
assert (
332-
await chp_consumption_power_receiver.receive()
333-
).value == Power.from_watts(2.0)
334310

335311
await mockgrid.mock_resampler.send_meter_power([-12.0, None, 10.2])
336312
assert (await chp_power_receiver.receive()).value == Power.from_watts(-12.0)
337-
assert (
338-
await chp_production_power_receiver.receive()
339-
).value == Power.from_watts(12.0)
340-
assert (
341-
await chp_consumption_power_receiver.receive()
342-
).value == Power.from_watts(0.0)
343313

344314
async def test_pv_power(self, mocker: MockerFixture) -> None:
345315
"""Test the pv power formula."""
@@ -349,19 +319,9 @@ async def test_pv_power(self, mocker: MockerFixture) -> None:
349319

350320
logical_meter = microgrid.logical_meter()
351321
pv_power_receiver = logical_meter.pv_power.new_receiver()
352-
pv_production_power_receiver = logical_meter.pv_production_power.new_receiver()
353-
pv_consumption_power_receiver = (
354-
logical_meter.pv_consumption_power.new_receiver()
355-
)
356322

357323
await mockgrid.mock_resampler.send_meter_power([-1.0, -2.0])
358324
assert (await pv_power_receiver.receive()).value == Power.from_watts(-3.0)
359-
assert (await pv_production_power_receiver.receive()).value == Power.from_watts(
360-
3.0
361-
)
362-
assert (
363-
await pv_consumption_power_receiver.receive()
364-
).value == Power.from_watts(0.0)
365325

366326
async def test_pv_power_no_meter(self, mocker: MockerFixture) -> None:
367327
"""Test the pv power formula."""
@@ -371,19 +331,9 @@ async def test_pv_power_no_meter(self, mocker: MockerFixture) -> None:
371331

372332
logical_meter = microgrid.logical_meter()
373333
pv_power_receiver = logical_meter.pv_power.new_receiver()
374-
pv_production_power_receiver = logical_meter.pv_production_power.new_receiver()
375-
pv_consumption_power_receiver = (
376-
logical_meter.pv_consumption_power.new_receiver()
377-
)
378334

379335
await mockgrid.mock_resampler.send_pv_inverter_power([-1.0, -2.0])
380336
assert (await pv_power_receiver.receive()).value == Power.from_watts(-3.0)
381-
assert (await pv_production_power_receiver.receive()).value == Power.from_watts(
382-
3.0
383-
)
384-
assert (
385-
await pv_consumption_power_receiver.receive()
386-
).value == Power.from_watts(0.0)
387337

388338
async def test_pv_power_no_pv_components(self, mocker: MockerFixture) -> None:
389339
"""Test the pv power formula without having any pv components."""
@@ -427,17 +377,17 @@ async def test_consumer_power_2_grid_meters(
427377
self,
428378
mocker: MockerFixture,
429379
) -> None:
430-
"""Test the grid power formula with grid meters."""
380+
"""Test the grid power formula with two grid meters."""
431381
mockgrid = MockMicrogrid(grid_meter=False)
432382
# with no further sucessor these will be detected as grid meters
433383
mockgrid.add_consumer_meters(2)
434384
await mockgrid.start(mocker)
435385

436386
logical_meter = microgrid.logical_meter()
437-
grid_consumption_recv = logical_meter.grid_consumption_power.new_receiver()
387+
grid_recv = logical_meter.grid_power.new_receiver()
438388

439389
await mockgrid.mock_resampler.send_meter_power([1.0, 2.0])
440-
assert (await grid_consumption_recv.receive()).value == Power.from_watts(3.0)
390+
assert (await grid_recv.receive()).value == Power.from_watts(3.0)
441391

442392
async def test_consumer_power_no_grid_meter_no_consumer_meter(
443393
self, mocker: MockerFixture

0 commit comments

Comments
 (0)