@@ -137,6 +137,31 @@ async def test_grid_production_consumption_power_consumer_meter(
137137 assert (await grid_production_recv .receive ()).value == Power .from_watts (4.0 )
138138 assert (await grid_consumption_recv .receive ()).value == Power .from_watts (0.0 )
139139
140+ async def test_grid_production_consumption_power_no_grid_meter (
141+ self ,
142+ mocker : MockerFixture ,
143+ ) -> None :
144+ """Test the grid production and consumption power formulas."""
145+ mockgrid = MockMicrogrid (grid_meter = False )
146+ mockgrid .add_batteries (2 )
147+ mockgrid .add_solar_inverters (1 )
148+ await mockgrid .start (mocker )
149+
150+ logical_meter = microgrid .logical_meter ()
151+ grid_recv = logical_meter .grid_power .new_receiver ()
152+ grid_production_recv = logical_meter .grid_production_power .new_receiver ()
153+ grid_consumption_recv = logical_meter .grid_consumption_power .new_receiver ()
154+
155+ await mockgrid .mock_resampler .send_meter_power ([2.5 , 3.5 , 4.0 ])
156+ assert (await grid_recv .receive ()).value == Power .from_watts (10.0 )
157+ assert (await grid_production_recv .receive ()).value == Power .from_watts (0.0 )
158+ assert (await grid_consumption_recv .receive ()).value == Power .from_watts (10.0 )
159+
160+ await mockgrid .mock_resampler .send_meter_power ([3.0 , - 3.0 , - 4.0 ])
161+ assert (await grid_recv .receive ()).value == Power .from_watts (- 4.0 )
162+ assert (await grid_production_recv .receive ()).value == Power .from_watts (4.0 )
163+ assert (await grid_consumption_recv .receive ()).value == Power .from_watts (0.0 )
164+
140165 async def test_chp_power (self , mocker : MockerFixture ) -> None :
141166 """Test the chp power formula."""
142167 mockgrid = MockMicrogrid (grid_meter = False )
@@ -268,6 +293,23 @@ async def test_producer_power_no_chp(self, mocker: MockerFixture) -> None:
268293 await mockgrid .mock_resampler .send_meter_power ([2.0 , 3.0 ])
269294 assert (await producer_power_receiver .receive ()).value == Power .from_watts (5.0 )
270295
296+ async def test_producer_power_no_pv_no_consumer_meter (
297+ self , mocker : MockerFixture
298+ ) -> None :
299+ """Test the producer power formula without pv and without consumer meter."""
300+ mockgrid = MockMicrogrid (grid_meter = False )
301+ mockgrid .add_chps (1 )
302+ await mockgrid .start (mocker )
303+
304+ logical_meter = microgrid .logical_meter ()
305+ producer_power_receiver = logical_meter .producer_power .new_receiver ()
306+
307+ # As there is only one meter in the microgrid, the formula interprets it
308+ # as main meter instead of chp meter, so it reads the power from the
309+ # chp component directly.
310+ await mockgrid .mock_resampler .send_chp_power ([2.0 ])
311+ assert (await producer_power_receiver .receive ()).value == Power .from_watts (2.0 )
312+
271313 async def test_producer_power_no_pv (self , mocker : MockerFixture ) -> None :
272314 """Test the producer power formula without pv."""
273315 mockgrid = MockMicrogrid (grid_meter = False )
0 commit comments