66# pylint: disable=too-many-lines
77
88
9+ from contextlib import AsyncExitStack
910import asyncio
1011import dataclasses
1112import logging
@@ -490,8 +491,24 @@ async def test_battery_pool_power(mocker: MockerFixture) -> None:
490491 """Test `BatteryPool.power` method."""
491492 mockgrid = MockMicrogrid (grid_meter = True , mocker = mocker )
492493 mockgrid .add_batteries (2 )
493- await mockgrid .start (mocker )
494- await _test_battery_pool_power (mockgrid )
494+
495+ async with mockgrid , AsyncExitStack () as stack :
496+ battery_pool = microgrid .new_battery_pool (priority = 5 )
497+ stack .push_async_callback (battery_pool .stop )
498+ power_receiver = battery_pool .power .new_receiver ()
499+
500+ # send meter power [grid_meter, battery1_meter, battery2_meter]
501+ await mockgrid .mock_resampler .send_meter_power ([100.0 , 2.0 , 3.0 ])
502+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , 30.0 ])
503+ assert (await power_receiver .receive ()).value == Power .from_watts (5.0 )
504+
505+ await mockgrid .mock_resampler .send_meter_power ([100.0 , - 2.0 , - 5.0 ])
506+ await mockgrid .mock_resampler .send_bat_inverter_power ([- 20.0 , - 50.0 ])
507+ assert (await power_receiver .receive ()).value == Power .from_watts (- 7.0 )
508+
509+ await mockgrid .mock_resampler .send_meter_power ([100.0 , 2.0 , - 5.0 ])
510+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , - 50.0 ])
511+ assert (await power_receiver .receive ()).value == Power .from_watts (- 3.0 )
495512
496513
497514async def test_battery_pool_power_two_inverters_per_battery (
@@ -501,10 +518,29 @@ async def test_battery_pool_power_two_inverters_per_battery(
501518 gen = GraphGenerator ()
502519 bat = gen .component (ComponentCategory .BATTERY )
503520 mockgrid = MockMicrogrid (
504- graph = gen .to_graph ((ComponentCategory .METER , gen .battery_with_inverter (bat , 2 )))
521+ graph = gen .to_graph (
522+ (ComponentCategory .METER , gen .battery_with_inverter (bat , 2 ))
523+ ),
524+ mocker = mocker ,
505525 )
506- await mockgrid .start (mocker )
507- await _test_battery_pool_power (mockgrid )
526+ async with mockgrid , AsyncExitStack () as stack :
527+ battery_pool = microgrid .new_battery_pool (priority = 5 )
528+ stack .push_async_callback (battery_pool .stop )
529+ power_receiver = battery_pool .power .new_receiver ()
530+
531+ # send meter power [grid_meter, battery1_meter]
532+ # Fallback formula - use only meter power, inverter and batteries are not used.
533+ await mockgrid .mock_resampler .send_meter_power ([100.0 , 3.0 ])
534+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , 30.0 ])
535+ assert (await power_receiver .receive ()).value == Power .from_watts (3.0 )
536+
537+ await mockgrid .mock_resampler .send_meter_power ([100.0 , - 5.0 ])
538+ await mockgrid .mock_resampler .send_bat_inverter_power ([- 20.0 , - 50.0 ])
539+ assert (await power_receiver .receive ()).value == Power .from_watts (- 5.0 )
540+
541+ await mockgrid .mock_resampler .send_meter_power ([100.0 , - 5.0 ])
542+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , - 50.0 ])
543+ assert (await power_receiver .receive ()).value == Power .from_watts (- 5.0 )
508544
509545
510546async def test_batter_pool_power_two_batteries_per_inverter (
@@ -515,21 +551,43 @@ async def test_batter_pool_power_two_batteries_per_inverter(
515551 mockgrid = MockMicrogrid (
516552 graph = gen .to_graph (
517553 [
518- ComponentCategory .METER ,
519554 (
520- ComponentCategory .INVERTER ,
521- [ComponentCategory .BATTERY , ComponentCategory .BATTERY ],
555+ ComponentCategory .METER ,
556+ (
557+ ComponentCategory .INVERTER ,
558+ [ComponentCategory .BATTERY , ComponentCategory .BATTERY ],
559+ ),
522560 ),
523- ComponentCategory .METER ,
524561 (
525- ComponentCategory .INVERTER ,
526- [ComponentCategory .BATTERY , ComponentCategory .BATTERY ],
562+ ComponentCategory .METER ,
563+ (
564+ ComponentCategory .INVERTER ,
565+ [ComponentCategory .BATTERY , ComponentCategory .BATTERY ],
566+ ),
527567 ),
528568 ]
529- )
569+ ),
570+ mocker = mocker ,
530571 )
531- await mockgrid .start (mocker )
532- await _test_battery_pool_power (mockgrid )
572+
573+ async with mockgrid , AsyncExitStack () as stack :
574+ battery_pool = microgrid .new_battery_pool (priority = 5 )
575+ stack .push_async_callback (battery_pool .stop )
576+ power_receiver = battery_pool .power .new_receiver ()
577+
578+ # send meter power [battery1_meter, battery2_meter]
579+ # Fallback formula - use only meter power, inverter and batteries are not used.
580+ await mockgrid .mock_resampler .send_meter_power ([100.0 , 3.0 ])
581+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , 30.0 ])
582+ assert (await power_receiver .receive ()).value == Power .from_watts (103.0 )
583+
584+ await mockgrid .mock_resampler .send_meter_power ([100.0 , - 5.0 ])
585+ await mockgrid .mock_resampler .send_bat_inverter_power ([- 20.0 , - 50.0 ])
586+ assert (await power_receiver .receive ()).value == Power .from_watts (95.0 )
587+
588+ await mockgrid .mock_resampler .send_meter_power ([3.0 , - 5.0 ])
589+ await mockgrid .mock_resampler .send_bat_inverter_power ([20.0 , - 50.0 ])
590+ assert (await power_receiver .receive ()).value == Power .from_watts (- 2.0 )
533591
534592
535593async def test_batter_pool_power_no_batteries (mocker : MockerFixture ) -> None :
@@ -590,21 +648,6 @@ async def test_battery_pool_power_incomplete_bat_request(mocker: MockerFixture)
590648 assert (await power_receiver .receive ()).value == Power .from_watts (2.0 )
591649
592650
593- async def _test_battery_pool_power (mockgrid : MockMicrogrid ) -> None :
594- async with mockgrid :
595- battery_pool = microgrid .new_battery_pool (priority = 5 )
596- power_receiver = battery_pool .power .new_receiver ()
597-
598- await mockgrid .mock_resampler .send_bat_inverter_power ([2.0 , 3.0 ])
599- assert (await power_receiver .receive ()).value == Power .from_watts (5.0 )
600-
601- await mockgrid .mock_resampler .send_bat_inverter_power ([- 2.0 , - 5.0 ])
602- assert (await power_receiver .receive ()).value == Power .from_watts (- 7.0 )
603-
604- await mockgrid .mock_resampler .send_bat_inverter_power ([2.0 , - 5.0 ])
605- assert (await power_receiver .receive ()).value == Power .from_watts (- 3.0 )
606-
607-
608651async def run_capacity_test ( # pylint: disable=too-many-locals
609652 fake_time : time_machine .Coordinates , setup_args : SetupArgs
610653) -> None :
0 commit comments