Skip to content

Commit 4ce90a2

Browse files
committed
Update BatteryPool's control methods to accept/require Power objects
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent d6580af commit 4ce90a2

File tree

3 files changed

+31
-20
lines changed

3 files changed

+31
-20
lines changed

benchmarks/power_distribution/power_distributor.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
)
2727
from frequenz.sdk.microgrid import connection_manager
2828
from frequenz.sdk.microgrid.component import Component, ComponentCategory
29+
from frequenz.sdk.timeseries._quantities import Power
2930

3031
HOST = "microgrid.sandbox.api.frequenz.io"
3132
PORT = 61060
@@ -49,7 +50,7 @@ async def send_requests(batteries: Set[int], request_num: int) -> List[Result]:
4950
results_rx = battery_pool.power_distribution_results()
5051
result: List[Result] = []
5152
for _ in range(request_num):
52-
await battery_pool.set_power(float(random.randrange(100000, 1000000)))
53+
await battery_pool.set_power(Power(float(random.randrange(100000, 1000000))))
5354
try:
5455
output = await asyncio.wait_for(results_rx.receive(), timeout=3)
5556
if output is None:

examples/power_distribution.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ async def run(self) -> None:
6262

6363
avg_power = sum(request) / len(request)
6464
_logger.debug("Avg power %d", avg_power)
65-
power_to_set: float
65+
power_to_set: Power
6666
if avg_power > 30000:
6767
# Charge
68-
power_to_set = 10000.0
68+
power_to_set = Power(10000.0)
6969
else:
7070
# Discharge
71-
power_to_set = -10000.0
71+
power_to_set = Power(-10000.0)
7272

7373
await battery_pool.set_power(power_to_set)
7474
try:

src/frequenz/sdk/timeseries/battery_pool/battery_pool.py

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__( # pylint: disable=too-many-arguments
105105

106106
async def set_power(
107107
self,
108-
power: float,
108+
power: Power,
109109
*,
110110
adjust_power: bool = True,
111111
request_timeout: timedelta = timedelta(seconds=5.0),
@@ -134,7 +134,7 @@ async def set_power(
134134
await self._power_distributing_sender.send(
135135
Request(
136136
namespace=self._power_distributing_namespace,
137-
power=power,
137+
power=power.as_watts(),
138138
batteries=self._batteries,
139139
adjust_power=adjust_power,
140140
request_timeout_sec=request_timeout.total_seconds(),
@@ -144,7 +144,7 @@ async def set_power(
144144

145145
async def charge(
146146
self,
147-
power: float,
147+
power: Power,
148148
*,
149149
adjust_power: bool = True,
150150
request_timeout: timedelta = timedelta(seconds=5.0),
@@ -172,18 +172,23 @@ async def charge(
172172
Raises:
173173
ValueError: If the given power is negative.
174174
"""
175-
if power < 0.0:
175+
as_watts = power.as_watts()
176+
if as_watts < 0.0:
176177
raise ValueError("Charge power must be positive.")
177-
await self.set_power(
178-
power,
179-
adjust_power=adjust_power,
180-
request_timeout=request_timeout,
181-
include_broken_batteries=include_broken_batteries,
178+
await self._power_distributing_sender.send(
179+
Request(
180+
namespace=self._power_distributing_namespace,
181+
power=as_watts,
182+
batteries=self._batteries,
183+
adjust_power=adjust_power,
184+
request_timeout_sec=request_timeout.total_seconds(),
185+
include_broken_batteries=include_broken_batteries,
186+
)
182187
)
183188

184189
async def discharge(
185190
self,
186-
power: float,
191+
power: Power,
187192
*,
188193
adjust_power: bool = True,
189194
request_timeout: timedelta = timedelta(seconds=5.0),
@@ -211,13 +216,18 @@ async def discharge(
211216
Raises:
212217
ValueError: If the given power is negative.
213218
"""
214-
if power < 0.0:
219+
as_watts = power.as_watts()
220+
if as_watts < 0.0:
215221
raise ValueError("Discharge power must be positive.")
216-
await self.set_power(
217-
-power,
218-
adjust_power=adjust_power,
219-
request_timeout=request_timeout,
220-
include_broken_batteries=include_broken_batteries,
222+
await self._power_distributing_sender.send(
223+
Request(
224+
namespace=self._power_distributing_namespace,
225+
power=-as_watts,
226+
batteries=self._batteries,
227+
adjust_power=adjust_power,
228+
request_timeout_sec=request_timeout.total_seconds(),
229+
include_broken_batteries=include_broken_batteries,
230+
)
221231
)
222232

223233
def power_distribution_results(self) -> Receiver[Result]:

0 commit comments

Comments
 (0)