77
88import asyncio
99import logging
10- from datetime import timedelta
1110from typing import Any , Dict
1211
13- from frequenz .channels import Broadcast , Receiver
12+ from frequenz .channels import Receiver
1413from frequenz .channels .util import MergeNamed
1514
1615from frequenz .sdk import microgrid
17- from frequenz .sdk .actor import (
18- ChannelRegistry ,
19- ComponentMetricRequest ,
20- DataSourcingActor ,
21- ResamplerConfig ,
22- )
23- from frequenz .sdk .actor .power_distributing import PowerDistributingActor
24- from frequenz .sdk .actor .power_distributing ._battery_pool_status import BatteryStatus
25- from frequenz .sdk .microgrid import connection_manager
26- from frequenz .sdk .microgrid .component import ComponentCategory
27- from frequenz .sdk .timeseries .battery_pool import BatteryPool
16+ from frequenz .sdk .actor import ResamplerConfig
2817
2918HOST = "microgrid.sandbox.api.frequenz.io" # it should be the host name.
3019PORT = 61060
3120
3221
33- def create_battery_pool () -> BatteryPool :
34- """Create battery pool.
35-
36- It needs many instance to be created before.
37-
38- Returns:
39- BatteryPool instance ready to use.
40- """
41- channel_registry = ChannelRegistry (name = "data-registry" )
42-
43- # Create a channels for sending/receiving subscription requests
44- data_source_request_channel = Broadcast [ComponentMetricRequest ](
45- "data-source" , resend_latest = True
46- )
47-
48- # Instantiate a data sourcing actor
49- _ = DataSourcingActor (
50- request_receiver = data_source_request_channel .new_receiver (
51- "data_sourcing_receiver"
52- ),
53- registry = channel_registry ,
54- )
55-
56- battery_status_channel = Broadcast [BatteryStatus ]("batteries-status" )
57- _ = PowerDistributingActor (
58- users_channels = {},
59- battery_status_sender = battery_status_channel .new_sender (),
60- )
61-
62- batteries = connection_manager .get ().component_graph .components (
63- component_category = {ComponentCategory .BATTERY }
64- )
65-
66- return BatteryPool (
67- batteries_id = set (battery .component_id for battery in batteries ),
68- batteries_status_receiver = battery_status_channel .new_receiver (
69- name = "battery_pool" , maxsize = 1
70- ),
71- min_update_interval = timedelta (seconds = 0.2 ),
72- )
73-
74-
7522async def main () -> None :
7623 """Create the battery pool, activate all formulas and listen for any update."""
7724 logging .basicConfig (
@@ -81,7 +28,7 @@ async def main() -> None:
8128 host = HOST , port = PORT , resampler_config = ResamplerConfig (resampling_period_s = 1.0 )
8229 )
8330
84- battery_pool = create_battery_pool ()
31+ battery_pool = microgrid . battery_pool ()
8532 receivers : Dict [str , Receiver [Any ]] = {
8633 "soc" : await battery_pool .soc (maxsize = 1 ),
8734 "capacity" : await battery_pool .capacity (maxsize = 1 ),
0 commit comments