Skip to content

Commit 700bf0e

Browse files
committed
Replace Peekable in PowerDistributor with LatestValueCache
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 2250a95 commit 700bf0e

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/frequenz/sdk/actor/power_distributing/_component_managers/_battery_manager.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
from datetime import timedelta
1212

1313
import grpc
14-
from frequenz.channels import Peekable, Receiver, Sender
14+
from frequenz.channels import Receiver, Sender
1515

1616
from .... import microgrid
17+
from ...._internal._channels import LatestValueCache
1718
from ...._internal._math import is_close_to_zero
1819
from ....microgrid import connection_manager
1920
from ....microgrid.component import BatteryData, ComponentCategory, InverterData
@@ -139,8 +140,8 @@ def __init__(
139140
self._bat_bats_map = maps["bat_bats"]
140141
self._inv_invs_map = maps["inv_invs"]
141142

142-
self._battery_receivers: dict[int, Peekable[BatteryData]] = {}
143-
self._inverter_receivers: dict[int, Peekable[InverterData]] = {}
143+
self._battery_caches: dict[int, LatestValueCache[BatteryData]] = {}
144+
self._inverter_caches: dict[int, LatestValueCache[InverterData]] = {}
144145

145146
self._component_pool_status_tracker = ComponentPoolStatusTracker(
146147
component_ids=set(self._battery_ids),
@@ -294,11 +295,11 @@ async def _create_channels(self) -> None:
294295
api = connection_manager.get().api_client
295296
for battery_id, inverter_ids in self._bat_invs_map.items():
296297
bat_recv: Receiver[BatteryData] = await api.battery_data(battery_id)
297-
self._battery_receivers[battery_id] = bat_recv.into_peekable()
298+
self._battery_caches[battery_id] = LatestValueCache(bat_recv)
298299

299300
for inverter_id in inverter_ids:
300301
inv_recv: Receiver[InverterData] = await api.inverter_data(inverter_id)
301-
self._inverter_receivers[inverter_id] = inv_recv.into_peekable()
302+
self._inverter_caches[inverter_id] = LatestValueCache(inv_recv)
302303

303304
def _get_bounds(
304305
self,
@@ -370,10 +371,10 @@ def _check_request(
370371

371372
for battery in request.component_ids:
372373
_logger.debug("Checking battery %d", battery)
373-
if battery not in self._battery_receivers:
374+
if battery not in self._battery_caches:
374375
msg = (
375376
f"No battery {battery}, available batteries: "
376-
f"{list(self._battery_receivers.keys())}"
377+
f"{list(self._battery_caches.keys())}"
377378
)
378379
return Error(request=request, msg=msg)
379380

@@ -420,10 +421,11 @@ def _get_battery_inverter_data(
420421
Return None if we could not replace NaN values.
421422
"""
422423
battery_data_none = [
423-
self._battery_receivers[battery_id].peek() for battery_id in battery_ids
424+
self._battery_caches[battery_id].latest_value for battery_id in battery_ids
424425
]
425426
inverter_data_none = [
426-
self._inverter_receivers[inverter_id].peek() for inverter_id in inverter_ids
427+
self._inverter_caches[inverter_id].latest_value
428+
for inverter_id in inverter_ids
427429
]
428430

429431
# It means that nothing has been send on this channels, yet.
@@ -498,10 +500,10 @@ def _get_components_data(
498500
)
499501

500502
for battery_id in working_batteries:
501-
if battery_id not in self._battery_receivers:
503+
if battery_id not in self._battery_caches:
502504
raise KeyError(
503505
f"No battery {battery_id}, "
504-
f"available batteries: {list(self._battery_receivers.keys())}"
506+
f"available batteries: {list(self._battery_caches.keys())}"
505507
)
506508

507509
connected_inverters = _get_all_from_map(self._bat_invs_map, batteries)

0 commit comments

Comments
 (0)