Skip to content

Commit 5b3fe2f

Browse files
committed
WIP
1 parent a2f441f commit 5b3fe2f

File tree

90 files changed

+4984
-3076
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+4984
-3076
lines changed

benchmarks/power_distribution/power_distributor.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from typing import Any
1313

1414
from frequenz.channels import Broadcast
15-
from frequenz.client.microgrid import Component, ComponentCategory
15+
from frequenz.client.microgrid import ComponentId
16+
from frequenz.client.microgrid.component import Battery
1617
from frequenz.quantities import Power
1718

1819
from frequenz.sdk import microgrid
@@ -37,7 +38,7 @@
3738
# send requests, and those no longer go directly to the power distributing actor, but
3839
# instead through the power managing actor. So the below function needs to be updated
3940
# to use the PowerDistributingActor directly.
40-
async def send_requests(batteries: set[int], request_num: int) -> list[Result]:
41+
async def send_requests(batteries: set[ComponentId], request_num: int) -> list[Result]:
4142
"""Send requests to the PowerDistributingActor and wait for the response.
4243
4344
Args:
@@ -98,7 +99,7 @@ def parse_result(result: list[list[Result]]) -> dict[str, float]:
9899

99100
async def run_test( # pylint: disable=too-many-locals
100101
num_requests: int,
101-
batteries: set[int],
102+
batteries: set[ComponentId],
102103
) -> dict[str, Any]:
103104
"""Run test.
104105
@@ -115,8 +116,7 @@ async def run_test( # pylint: disable=too-many-locals
115116
battery_status_channel = Broadcast[ComponentPoolStatus](name="battery-status")
116117
power_result_channel = Broadcast[Result](name="power-result")
117118
async with PowerDistributingActor(
118-
component_category=ComponentCategory.BATTERY,
119-
component_type=None,
119+
component_type=Battery,
120120
requests_receiver=power_request_channel.new_receiver(),
121121
results_sender=power_result_channel.new_sender(),
122122
component_pool_status_sender=battery_status_channel.new_sender(),
@@ -142,10 +142,10 @@ async def run() -> None:
142142
ResamplerConfig(resampling_period=timedelta(seconds=1.0)),
143143
)
144144

145-
all_batteries: set[Component] = connection_manager.get().component_graph.components(
146-
component_categories={ComponentCategory.BATTERY}
145+
all_batteries = connection_manager.get().component_graph.components(
146+
filter_by_types={Battery},
147147
)
148-
batteries_ids = {c.component_id for c in all_batteries}
148+
batteries_ids = {c.id for c in all_batteries}
149149
# Take some time to get data from components
150150
await asyncio.sleep(4)
151151
with open("/dev/stdout", "w", encoding="utf-8") as csvfile:

benchmarks/timeseries/benchmark_datasourcing.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from typing import Any
1818

1919
from frequenz.channels import Broadcast, Receiver, ReceiverStoppedError
20-
from frequenz.client.microgrid import ComponentMetricId
20+
from frequenz.client.microgrid.metrics import Metric
2121

2222
from frequenz.sdk import microgrid
2323
from frequenz.sdk._internal._channels import ChannelRegistry
@@ -37,9 +37,9 @@
3737
sys.exit(1)
3838

3939
COMPONENT_METRIC_IDS = [
40-
ComponentMetricId.CURRENT_PHASE_1,
41-
ComponentMetricId.CURRENT_PHASE_2,
42-
ComponentMetricId.CURRENT_PHASE_3,
40+
Metric.AC_CURRENT_PHASE_1,
41+
Metric.AC_CURRENT_PHASE_2,
42+
Metric.AC_CURRENT_PHASE_3,
4343
]
4444

4545

examples/battery_pool.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from frequenz.sdk import microgrid
1414
from frequenz.sdk.actor import ResamplerConfig
1515

16-
MICROGRID_API_URL = "grpc://microgrid.sandbox.api.frequenz.io:62060"
16+
MICROGRID_API_URL = "grpc://microgrid.sandbox.api.frequenz.io:61060"
1717

1818

1919
async def main() -> None:

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ dependencies = [
2929
# Make sure to update the mkdocs.yml file when
3030
# changing the version
3131
# (plugins.mkdocstrings.handlers.python.import)
32-
"frequenz-client-microgrid >= 0.6.0, < 0.7.0",
32+
#"frequenz-client-microgrid >= 0.6.0, < 0.7.0",
33+
"frequenz-client-microgrid @ git+https://github.com/frequenz-floss/frequenz-client-microgrid-python@refs/pull/94/head",
3334
"frequenz-channels >= 1.6.0, < 2.0.0",
3435
"frequenz-quantities[marshmallow] >= 1.0.0, < 2.0.0",
3536
"networkx >= 2.8, < 4",

src/frequenz/sdk/microgrid/_data_pipeline.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
from datetime import timedelta
1818

1919
from frequenz.channels import Broadcast, Sender
20-
from frequenz.client.microgrid import ComponentCategory, InverterType
20+
from frequenz.client.microgrid import ComponentId
21+
from frequenz.client.microgrid.component import Battery, EvCharger, SolarInverter
2122

2223
from .._internal._channels import ChannelRegistry
2324
from ..actor._actor import Actor
@@ -103,31 +104,32 @@ def __init__(
103104
self._battery_power_wrapper = PowerWrapper(
104105
self._channel_registry,
105106
api_power_request_timeout=api_power_request_timeout,
106-
component_category=ComponentCategory.BATTERY,
107+
component_class=Battery,
107108
)
108109
self._ev_power_wrapper = PowerWrapper(
109110
self._channel_registry,
110111
api_power_request_timeout=api_power_request_timeout,
111-
component_category=ComponentCategory.EV_CHARGER,
112+
component_class=EvCharger,
112113
)
113114
self._pv_power_wrapper = PowerWrapper(
114115
self._channel_registry,
115116
api_power_request_timeout=api_power_request_timeout,
116-
component_category=ComponentCategory.INVERTER,
117-
component_type=InverterType.SOLAR,
117+
component_class=SolarInverter,
118118
)
119119

120120
self._logical_meter: LogicalMeter | None = None
121121
self._consumer: Consumer | None = None
122122
self._producer: Producer | None = None
123123
self._grid: Grid | None = None
124124
self._ev_charger_pool_reference_stores: dict[
125-
frozenset[int], EVChargerPoolReferenceStore
125+
frozenset[ComponentId], EVChargerPoolReferenceStore
126126
] = {}
127127
self._battery_pool_reference_stores: dict[
128-
frozenset[int], BatteryPoolReferenceStore
128+
frozenset[ComponentId], BatteryPoolReferenceStore
129+
] = {}
130+
self._pv_pool_reference_stores: dict[
131+
frozenset[ComponentId], PVPoolReferenceStore
129132
] = {}
130-
self._pv_pool_reference_stores: dict[frozenset[int], PVPoolReferenceStore] = {}
131133
self._frequency_instance: GridFrequency | None = None
132134
self._voltage_instance: VoltageStreamer | None = None
133135

@@ -208,7 +210,7 @@ def new_ev_charger_pool(
208210
self,
209211
*,
210212
priority: int,
211-
component_ids: abc.Set[int] | None = None,
213+
component_ids: abc.Set[ComponentId] | None = None,
212214
name: str | None = None,
213215
set_operating_point: bool = False,
214216
) -> EVChargerPool:
@@ -238,7 +240,7 @@ def new_ev_charger_pool(
238240
self._ev_power_wrapper.start()
239241

240242
# We use frozenset to make a hashable key from the input set.
241-
ref_store_key: frozenset[int] = frozenset()
243+
ref_store_key: frozenset[ComponentId] = frozenset()
242244
if component_ids is not None:
243245
ref_store_key = frozenset(component_ids)
244246

@@ -288,7 +290,7 @@ def new_pv_pool(
288290
self,
289291
*,
290292
priority: int,
291-
component_ids: abc.Set[int] | None = None,
293+
component_ids: abc.Set[ComponentId] | None = None,
292294
name: str | None = None,
293295
set_operating_point: bool = False,
294296
) -> PVPool:
@@ -316,7 +318,7 @@ def new_pv_pool(
316318
self._pv_power_wrapper.start()
317319

318320
# We use frozenset to make a hashable key from the input set.
319-
ref_store_key: frozenset[int] = frozenset()
321+
ref_store_key: frozenset[ComponentId] = frozenset()
320322
if component_ids is not None:
321323
ref_store_key = frozenset(component_ids)
322324

@@ -365,7 +367,7 @@ def new_battery_pool(
365367
self,
366368
*,
367369
priority: int,
368-
component_ids: abc.Set[int] | None = None,
370+
component_ids: abc.Set[ComponentId] | None = None,
369371
name: str | None = None,
370372
set_operating_point: bool = False,
371373
) -> BatteryPool:
@@ -395,7 +397,7 @@ def new_battery_pool(
395397
self._battery_power_wrapper.start()
396398

397399
# We use frozenset to make a hashable key from the input set.
398-
ref_store_key: frozenset[int] = frozenset()
400+
ref_store_key: frozenset[ComponentId] = frozenset()
399401
if component_ids is not None:
400402
ref_store_key = frozenset(component_ids)
401403

@@ -555,7 +557,7 @@ def producer() -> Producer:
555557
def new_ev_charger_pool(
556558
*,
557559
priority: int,
558-
component_ids: abc.Set[int] | None = None,
560+
component_ids: abc.Set[ComponentId] | None = None,
559561
name: str | None = None,
560562
set_operating_point: bool = False,
561563
) -> EVChargerPool:
@@ -600,7 +602,7 @@ def new_ev_charger_pool(
600602
def new_battery_pool(
601603
*,
602604
priority: int,
603-
component_ids: abc.Set[int] | None = None,
605+
component_ids: abc.Set[ComponentId] | None = None,
604606
name: str | None = None,
605607
set_operating_point: bool = False,
606608
) -> BatteryPool:
@@ -645,7 +647,7 @@ def new_battery_pool(
645647
def new_pv_pool(
646648
*,
647649
priority: int,
648-
component_ids: abc.Set[int] | None = None,
650+
component_ids: abc.Set[ComponentId] | None = None,
649651
name: str | None = None,
650652
set_operating_point: bool = False,
651653
) -> PVPool:

src/frequenz/sdk/microgrid/_data_sourcing/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
"""The DataSourcingActor."""
55

6-
from ._component_metric_request import ComponentMetricId, ComponentMetricRequest
6+
from frequenz.client.microgrid.metrics import Metric
7+
8+
from ._component_metric_request import ComponentMetricRequest
79
from .data_sourcing import DataSourcingActor
810

911
__all__ = [
10-
"ComponentMetricId",
12+
"Metric",
1113
"ComponentMetricRequest",
1214
"DataSourcingActor",
1315
]

src/frequenz/sdk/microgrid/_data_sourcing/_component_metric_request.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
from dataclasses import dataclass
77
from datetime import datetime
88

9-
from frequenz.client.microgrid import ComponentMetricId
9+
from frequenz.client.microgrid import ComponentId
10+
from frequenz.client.microgrid.metrics import Metric
1011

11-
__all__ = ["ComponentMetricRequest", "ComponentMetricId"]
12+
from frequenz.sdk.microgrid._old_component_data import TransitionalMetric
13+
14+
__all__ = ["ComponentMetricRequest", "Metric"]
1215

1316

1417
@dataclass
@@ -24,7 +27,7 @@ class ComponentMetricRequest:
2427
metric. For example, requesters can use different `namespace` values to subscribe to
2528
raw or resampled data streams separately. This ensures that each requester receives
2629
the appropriate type of data without interference. Requests with the same
27-
`namespace`, `component_id`, and `metric_id` will use the same channel, preventing
30+
`namespace`, `component_id`, and `metric` will use the same channel, preventing
2831
unnecessary duplication of data streams.
2932
3033
The requester and provider must use the same channel name so that they can
@@ -36,10 +39,10 @@ class ComponentMetricRequest:
3639
namespace: str
3740
"""A client-defined identifier influencing the channel name."""
3841

39-
component_id: int
42+
component_id: ComponentId
4043
"""The ID of the requested component."""
4144

42-
metric_id: ComponentMetricId
45+
metric: Metric | TransitionalMetric
4346
"""The ID of the requested component's metric."""
4447

4548
start_time: datetime | None
@@ -59,7 +62,7 @@ def get_channel_name(self) -> str:
5962
"component_metric_request<"
6063
f"namespace={self.namespace},"
6164
f"component_id={self.component_id},"
62-
f"metric_id={self.metric_id.name}"
65+
f"metric={self.metric.name}"
6366
f"{start}"
6467
">"
6568
)

0 commit comments

Comments
 (0)