Skip to content

Commit ba544b5

Browse files
committed
Fix MockResampler zero handling
The mock resampler was interpreting `0.0` as `None`, so if a received value was `0.0`, the resampled sample would have `None` as value, which is wrong. We now have a helper method to create new samples that handle `0.0` properly. Signed-off-by: Leandro Lucarella <[email protected]>
1 parent 2cd252b commit ba544b5

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

tests/timeseries/mock_resampler.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66

77
import asyncio
8+
import math
89
from datetime import datetime
910

1011
from frequenz.channels import Broadcast, Receiver, Sender
@@ -187,58 +188,65 @@ async def _handle_resampling_requests(self) -> None:
187188
)
188189
)
189190

191+
def make_sample(self, value: float | None) -> Sample[Quantity]:
192+
"""Create a sample with the given value."""
193+
return Sample(
194+
self._next_ts,
195+
None if value is None else Quantity(value),
196+
)
197+
190198
async def send_meter_power(self, values: list[float | None]) -> None:
191199
"""Send the given values as resampler output for meter power."""
192200
assert len(values) == len(self._meter_power_senders)
193201
for chan, value in zip(self._meter_power_senders, values):
194-
sample = Sample(self._next_ts, None if not value else Quantity(value))
202+
sample = self.make_sample(value)
195203
await chan.send(sample)
196204

197205
async def send_chp_power(self, values: list[float | None]) -> None:
198206
"""Send the given values as resampler output for CHP power."""
199207
assert len(values) == len(self._chp_power_senders)
200208
for chan, value in zip(self._chp_power_senders, values):
201-
sample = Sample(self._next_ts, None if not value else Quantity(value))
209+
sample = self.make_sample(value)
202210
await chan.send(sample)
203211

204212
async def send_pv_inverter_power(self, values: list[float | None]) -> None:
205213
"""Send the given values as resampler output for PV Inverter power."""
206214
assert len(values) == len(self._pv_inverter_power_senders)
207215
for chan, value in zip(self._pv_inverter_power_senders, values):
208-
sample = Sample(self._next_ts, None if not value else Quantity(value))
216+
sample = self.make_sample(value)
209217
await chan.send(sample)
210218

211219
async def send_meter_frequency(self, values: list[float | None]) -> None:
212220
"""Send the given values as resampler output for meter frequency."""
213221
assert len(values) == len(self._meter_frequency_senders)
214222
for sender, value in zip(self._meter_frequency_senders, values):
215-
sample = Sample(self._next_ts, None if not value else Quantity(value))
223+
sample = self.make_sample(value)
216224
await sender.send(sample)
217225

218226
async def send_bat_inverter_frequency(self, values: list[float | None]) -> None:
219227
"""Send the given values as resampler output for battery inverter frequency."""
220228
assert len(values) == len(self._bat_inverter_frequency_senders)
221229
for chan, value in zip(self._bat_inverter_frequency_senders, values):
222-
sample = Sample(self._next_ts, None if not value else Quantity(value))
230+
sample = self.make_sample(value)
223231
await chan.send(sample)
224232

225233
async def send_evc_power(self, values: list[float | None]) -> None:
226234
"""Send the given values as resampler output for EV Charger power."""
227235
assert len(values) == len(self._ev_power_senders)
228236
for chan, value in zip(self._ev_power_senders, values):
229-
sample = Sample(self._next_ts, None if not value else Quantity(value))
237+
sample = self.make_sample(value)
230238
await chan.send(sample)
231239

232240
async def send_bat_inverter_power(self, values: list[float | None]) -> None:
233241
"""Send the given values as resampler output for battery inverter power."""
234242
assert len(values) == len(self._bat_inverter_power_senders)
235243
for chan, value in zip(self._bat_inverter_power_senders, values):
236-
sample = Sample(self._next_ts, None if not value else Quantity(value))
244+
sample = self.make_sample(value)
237245
await chan.send(sample)
238246

239247
async def send_non_existing_component_value(self) -> None:
240248
"""Send a value for a non existing component."""
241-
sample = Sample[Quantity](self._next_ts, None)
249+
sample = self.make_sample(None)
242250
await self._non_existing_component_sender.send(sample)
243251

244252
async def send_evc_current(self, values: list[list[float | None]]) -> None:
@@ -247,7 +255,7 @@ async def send_evc_current(self, values: list[list[float | None]]) -> None:
247255
for chan, evc_values in zip(self._ev_current_senders, values):
248256
assert len(evc_values) == 3 # 3 values for phases
249257
for phase, value in enumerate(evc_values):
250-
sample = Sample(self._next_ts, None if not value else Quantity(value))
258+
sample = self.make_sample(value)
251259
await chan[phase].send(sample)
252260

253261
async def send_bat_inverter_current(self, values: list[list[float | None]]) -> None:
@@ -256,7 +264,7 @@ async def send_bat_inverter_current(self, values: list[list[float | None]]) -> N
256264
for chan, bat_values in zip(self._bat_inverter_current_senders, values):
257265
assert len(bat_values) == 3 # 3 values for phases
258266
for phase, value in enumerate(bat_values):
259-
sample = Sample(self._next_ts, None if not value else Quantity(value))
267+
sample = self.make_sample(value)
260268
await chan[phase].send(sample)
261269

262270
async def send_meter_current(self, values: list[list[float | None]]) -> None:
@@ -265,7 +273,7 @@ async def send_meter_current(self, values: list[list[float | None]]) -> None:
265273
for chan, meter_values in zip(self._meter_current_senders, values):
266274
assert len(meter_values) == 3 # 3 values for phases
267275
for phase, value in enumerate(meter_values):
268-
sample = Sample(self._next_ts, None if not value else Quantity(value))
276+
sample = self.make_sample(value)
269277
await chan[phase].send(sample)
270278

271279
async def send_meter_voltage(self, values: list[list[float | None]]) -> None:
@@ -274,5 +282,5 @@ async def send_meter_voltage(self, values: list[list[float | None]]) -> None:
274282
for chan, meter_values in zip(self._meter_voltage_senders, values):
275283
assert len(meter_values) == 3 # 3 values for phases
276284
for phase, value in enumerate(meter_values):
277-
sample = Sample(self._next_ts, None if not value else Quantity(value))
285+
sample = self.make_sample(value)
278286
await chan[phase].send(sample)

0 commit comments

Comments
 (0)