From ed39260a33b9f43ce109a9b4941b35fce1f74546 Mon Sep 17 00:00:00 2001 From: Anthony Charlton Date: Fri, 9 Jan 2026 13:42:14 +1100 Subject: [PATCH 1/3] Updated to use SDK with required `mrid`. Signed-off-by: Anthony Charlton --- changelog.md | 2 +- docs/docs/build_network_hierarchy.mdx | 36 +++++++++---------- pyproject.toml | 2 +- .../examples/building_network_hierarchy.py | 30 ++++++++-------- .../examples/current_state_manipulations.py | 4 +-- .../examples/network_service_interactions.py | 4 +-- .../translating_to_pandapower_model.py | 4 +-- 7 files changed, 41 insertions(+), 41 deletions(-) diff --git a/changelog.md b/changelog.md index 6a25ad0..c9697ba 100644 --- a/changelog.md +++ b/changelog.md @@ -1,7 +1,7 @@ # EWB Python SDK examples ## [0.7.0] - UNRELEASED ### Breaking Changes -* None. +* Updated `zepben.ewb` now requires `mrid` when constructing any `IdentifiedObject`. ### New Features * None. diff --git a/docs/docs/build_network_hierarchy.mdx b/docs/docs/build_network_hierarchy.mdx index 6a2c50b..f5def9c 100644 --- a/docs/docs/build_network_hierarchy.mdx +++ b/docs/docs/build_network_hierarchy.mdx @@ -24,23 +24,23 @@ from zepben.evolve import NetworkHierarchy, GeographicalRegion, SubGeographicalR First, you will need to create instances of Feeders, Substations, Circuits, Loops, and Geographical and Sub-Geographical Regions to represent the components of the network hierarchy. ```python -fdr1 = Feeder(name="Sydney feeder 1") -fdr2 = Feeder(name="Sydney feeder 2") -fdr3 = Feeder(name="Sydney feeder 3") -fdr4 = Feeder(name="Newcastle feeder 1") -fdr5 = Feeder(name="Newcastle feeder 2") -fdr6 = Feeder(name="Newcastle feeder 3") - -sub1 = Substation(name="Sydney substation 1") -sub2 = Substation(name="Sydney substation 2", normal_energized_feeders=[fdr1, fdr2, fdr3]) -sub3 = Substation(name="Newcastle substation", normal_energized_feeders=[fdr4, fdr5, fdr6]) - -circuit_sydney = Circuit(end_substations=[sub1, sub2]) -loop_sydney = Loop(circuits=[circuit_sydney], substations=[sub1], energizing_substations=[sub2]) -sgr_sydney = SubGeographicalRegion(name="Sydney", substations=[sub1, sub2]) -sgr_newcastle = SubGeographicalRegion(name="Newcastle", substations=[sub3]) - -gr_nsw = GeographicalRegion(name="New South Wales", sub_geographical_regions=[sgr_sydney, sgr_newcastle]) +fdr1 = Feeder(mrid="sf1", name="Sydney feeder 1") +fdr2 = Feeder(mrid="sf2", name="Sydney feeder 2") +fdr3 = Feeder(mrid="sf3", name="Sydney feeder 3") +fdr4 = Feeder(mrid="nf1", name="Newcastle feeder 1") +fdr5 = Feeder(mrid="nf2", name="Newcastle feeder 2") +fdr6 = Feeder(mrid="nf3", name="Newcastle feeder 3") + +sub1 = Substation(mrid="ss1", name="Sydney substation 1") +sub2 = Substation(mrid="ss2", name="Sydney substation 2", normal_energized_feeders=[fdr1, fdr2, fdr3]) +sub3 = Substation(mrid="ns1", name="Newcastle substation", normal_energized_feeders=[fdr4, fdr5, fdr6]) + +circuit_sydney = Circuit(mrid="sc1", end_substations=[sub1, sub2]) +loop_sydney = Loop(mrid="sl1", circuits=[circuit_sydney], substations=[sub1], energizing_substations=[sub2]) +sgr_sydney = SubGeographicalRegion(mrid="ssgr", name="Sydney", substations=[sub1, sub2]) +sgr_newcastle = SubGeographicalRegion(mrid="nsgr", name="Newcastle", substations=[sub3]) + +gr_nsw = GeographicalRegion(mrid="nsw", name="New South Wales", sub_geographical_regions=[sgr_sydney, sgr_newcastle]) ``` ## Build Network Hierarchy @@ -78,4 +78,4 @@ for gr in network_hierarchy.geographical_regions.values(): Output: -![](./assets/network_hierarchy_ex1.png) \ No newline at end of file +![](./assets/network_hierarchy_ex1.png) diff --git a/pyproject.toml b/pyproject.toml index c4a8358..4554c72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ authors = [ ] dependencies = [ "zepben.eas==0.26.0", - "zepben.ewb==1.0.3", + "zepben.ewb==1.1.0b14", "numba==0.60.0", "geojson==2.5.0", "gql[requests]==3.4.1", diff --git a/src/zepben/examples/building_network_hierarchy.py b/src/zepben/examples/building_network_hierarchy.py index f4ce539..70026ab 100644 --- a/src/zepben/examples/building_network_hierarchy.py +++ b/src/zepben/examples/building_network_hierarchy.py @@ -10,23 +10,23 @@ # A network hierarchy describes the high-level hierarchy of the network. - fdr1 = Feeder(name="Sydney feeder 1") - fdr2 = Feeder(name="Sydney feeder 2") - fdr3 = Feeder(name="Sydney feeder 3") - fdr4 = Feeder(name="Newcastle feeder 1") - fdr5 = Feeder(name="Newcastle feeder 2") - fdr6 = Feeder(name="Newcastle feeder 3") + fdr1 = Feeder(mrid="sf1", name="Sydney feeder 1") + fdr2 = Feeder(mrid="sf2", name="Sydney feeder 2") + fdr3 = Feeder(mrid="sf3", name="Sydney feeder 3") + fdr4 = Feeder(mrid="nf1", name="Newcastle feeder 1") + fdr5 = Feeder(mrid="nf2", name="Newcastle feeder 2") + fdr6 = Feeder(mrid="nf3", name="Newcastle feeder 3") - sub1 = Substation(name="Sydney substation 1") - sub2 = Substation(name="Sydney substation 2", normal_energized_feeders=[fdr1, fdr2, fdr3]) - sub3 = Substation(name="Newcastle substation", normal_energized_feeders=[fdr4, fdr5, fdr6]) + sub1 = Substation(mrid="ss1", name="Sydney substation 1") + sub2 = Substation(mrid="ss2", name="Sydney substation 2", normal_energized_feeders=[fdr1, fdr2, fdr3]) + sub3 = Substation(mrid="ns1", name="Newcastle substation", normal_energized_feeders=[fdr4, fdr5, fdr6]) - circuit_sydney = Circuit(end_substations=[sub1, sub2]) - loop_sydney = Loop(circuits=[circuit_sydney], substations=[sub1], energizing_substations=[sub2]) - sgr_sydney = SubGeographicalRegion(name="Sydney", substations=[sub1, sub2]) - sgr_newcastle = SubGeographicalRegion(name="Newcastle", substations=[sub3]) + circuit_sydney = Circuit(mrid="sc1", end_substations=[sub1, sub2]) + loop_sydney = Loop(mrid="sl1", circuits=[circuit_sydney], substations=[sub1], energizing_substations=[sub2]) + sgr_sydney = SubGeographicalRegion(mrid="ssgr", name="Sydney", substations=[sub1, sub2]) + sgr_newcastle = SubGeographicalRegion(mrid="nsgr", name="Newcastle", substations=[sub3]) - gr_nsw = GeographicalRegion(name="New South Wales", sub_geographical_regions=[sgr_sydney, sgr_newcastle]) + gr_nsw = GeographicalRegion(mrid="nsw", name="New South Wales", sub_geographical_regions=[sgr_sydney, sgr_newcastle]) network_hierarchy = NetworkHierarchy( geographical_regions={gr_nsw.mrid: gr_nsw}, @@ -45,4 +45,4 @@ for sub in sgr.substations: print(f" - {sub.name}") for fdr in sub.feeders: - print(f" - {fdr.name}") \ No newline at end of file + print(f" - {fdr.name}") diff --git a/src/zepben/examples/current_state_manipulations.py b/src/zepben/examples/current_state_manipulations.py index 40a2a8b..4cd3cc1 100644 --- a/src/zepben/examples/current_state_manipulations.py +++ b/src/zepben/examples/current_state_manipulations.py @@ -101,8 +101,8 @@ async def zone_bus_trace(client: NetworkConsumerClient): print(f"creating bus for {[feeder.mrid for it in feeder_heads for feeder in it.normal_feeders]}...") # There is no subtrans in the model we pulled down so create a zone bus for all the feeders. - bus = BusbarSection() - bus_terminal = Terminal() + bus = BusbarSection(mrid="zone-bus") + bus_terminal = Terminal(mrid="zone-bus-t1") bus.add_terminal(bus_terminal) for it in feeder_head_other_terms: diff --git a/src/zepben/examples/network_service_interactions.py b/src/zepben/examples/network_service_interactions.py index 1fe8e0d..e735630 100644 --- a/src/zepben/examples/network_service_interactions.py +++ b/src/zepben/examples/network_service_interactions.py @@ -111,8 +111,8 @@ # Apart from identified objects, a `NetworkService` also supports names. Each identified object has # exactly one mRID, but can have any number of names. Each name has a name type. In this example, # we add two names of type "NMI" to the network model. -meter1 = Meter() -meter2 = Meter() +meter1 = Meter(mrid="meter1") +meter2 = Meter(mrid="meter2") name_type = NameType(name="NMI", description="National Meter Identifier") name_type.get_or_add_name("987654321", line) diff --git a/src/zepben/examples/translating_to_pandapower_model.py b/src/zepben/examples/translating_to_pandapower_model.py index d82596e..8e3e84d 100644 --- a/src/zepben/examples/translating_to_pandapower_model.py +++ b/src/zepben/examples/translating_to_pandapower_model.py @@ -83,8 +83,8 @@ async def main(): def add_energy_source(_network: NetworkService, connect_to_terminal: Terminal): bv = connect_to_terminal.conducting_equipment.base_voltage - es_t = Terminal(phases=connect_to_terminal.phases) - es = EnergySource(terminals=[es_t], base_voltage=bv) + es_t = Terminal(mrid=f"{connect_to_terminal.mrid}-es-t1", phases=connect_to_terminal.phases) + es = EnergySource(mrid=f"{connect_to_terminal.mrid}-es", terminals=[es_t], base_voltage=bv) _network.add(es_t) _network.add(es) _network.connect_terminals(es_t, connect_to_terminal) From 6e42ef5f756f3424c117f9a5d3638a9ef01c3b19 Mon Sep 17 00:00:00 2001 From: Anthony Charlton Date: Fri, 9 Jan 2026 15:00:31 +1100 Subject: [PATCH 2/3] Updated to use EAS client that is compatible with the SDK. Signed-off-by: Anthony Charlton --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 4554c72..86b6b28 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ authors = [ {name = "Zeppelin Bend", email = "oss@zepben.com"} ] dependencies = [ - "zepben.eas==0.26.0", + "zepben.eas==0.27.0b1", "zepben.ewb==1.1.0b14", "numba==0.60.0", "geojson==2.5.0", From e9db8bb4c667fe7c4aede5ecbeb18a269ad3f908 Mon Sep 17 00:00:00 2001 From: Anthony Charlton Date: Fri, 9 Jan 2026 15:10:03 +1100 Subject: [PATCH 3/3] Updated to use gql[requests] that is compatible with the SDK. Signed-off-by: Anthony Charlton --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 86b6b28..acf53da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,7 +27,7 @@ dependencies = [ "zepben.ewb==1.1.0b14", "numba==0.60.0", "geojson==2.5.0", - "gql[requests]==3.4.1", + "gql[requests]==3.5.3", "geopandas", "pandas", "shapely",