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