@@ -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