File tree Expand file tree Collapse file tree 5 files changed +38
-66
lines changed
src/frequenz/sdk/timeseries/_formula_engine/_formula_generators Expand file tree Collapse file tree 5 files changed +38
-66
lines changed Original file line number Diff line number Diff line change @@ -37,20 +37,9 @@ def generate(self) -> FormulaEngine[Power]:
3737 builder = self ._get_builder (
3838 "consumer-power" , ComponentMetricId .ACTIVE_POWER , Power .from_watts
3939 )
40- component_graph = connection_manager .get ().component_graph
41- grid_component = next (
42- (
43- comp
44- for comp in component_graph .components ()
45- if comp .category == ComponentCategory .GRID
46- ),
47- None ,
48- )
4940
50- if grid_component is None :
51- raise ComponentNotFound ("Grid component not found in the component graph." )
41+ grid_successors = self ._get_grid_component_successors ()
5242
53- grid_successors = component_graph .successors (grid_component .component_id )
5443 if not grid_successors :
5544 raise ComponentNotFound ("No components found in the component graph." )
5645
Original file line number Diff line number Diff line change 1515from frequenz .channels import Sender
1616
1717from ....actor import ChannelRegistry , ComponentMetricRequest
18+ from ....microgrid import component , connection_manager
1819from ....microgrid .component import ComponentMetricId
1920from ..._quantities import QuantityT
2021from .._formula_engine import FormulaEngine , FormulaEngine3Phase
@@ -100,6 +101,36 @@ def _get_builder(
100101 )
101102 return builder
102103
104+ def _get_grid_component_successors (self ) -> set [component .Component ]:
105+ """Get the set of grid component successors in the component graph.
106+
107+ Returns:
108+ A set of grid component successors.
109+
110+ Raises:
111+ ComponentNotFound: If the grid component is not found in the component graph.
112+ ComponentNotFound: If no successor components are found in the component graph.
113+ """
114+ component_graph = connection_manager .get ().component_graph
115+ grid_component = next (
116+ iter (
117+ component_graph .components (
118+ component_category = {component .ComponentCategory .GRID }
119+ )
120+ ),
121+ None ,
122+ )
123+
124+ if grid_component is None :
125+ raise ComponentNotFound ("Grid component not found in the component graph." )
126+
127+ grid_successors = component_graph .successors (grid_component .component_id )
128+
129+ if not grid_successors :
130+ raise ComponentNotFound ("No components found in the component graph." )
131+
132+ return grid_successors
133+
103134 @abstractmethod
104135 def generate (
105136 self ,
Original file line number Diff line number Diff line change 55
66from typing import Set
77
8- from ....microgrid import connection_manager
98from ....microgrid .component import Component , ComponentCategory , ComponentMetricId
109from ..._quantities import Current
1110from .._formula_engine import FormulaEngine , FormulaEngine3Phase
12- from ._formula_generator import ComponentNotFound , FormulaGenerator
11+ from ._formula_generator import FormulaGenerator
1312
1413
1514class GridCurrentFormula (FormulaGenerator [Current ]):
@@ -24,22 +23,7 @@ def generate(self) -> FormulaEngine3Phase[Current]:
2423 Raises:
2524 ComponentNotFound: when the component graph doesn't have a `GRID` component.
2625 """
27- component_graph = connection_manager .get ().component_graph
28- grid_component = next (
29- (
30- comp
31- for comp in component_graph .components ()
32- if comp .category == ComponentCategory .GRID
33- ),
34- None ,
35- )
36-
37- if grid_component is None :
38- raise ComponentNotFound (
39- "Unable to find a GRID component from the component graph."
40- )
41-
42- grid_successors = component_graph .successors (grid_component .component_id )
26+ grid_successors = self ._get_grid_component_successors ()
4327
4428 return FormulaEngine3Phase (
4529 "grid-current" ,
Original file line number Diff line number Diff line change 33
44"""Formula generator from component graph for Grid Power."""
55
6- from ....microgrid import connection_manager
76from ....microgrid .component import ComponentCategory , ComponentMetricId
87from ..._quantities import Power
98from .._formula_engine import FormulaEngine
10- from ._formula_generator import ComponentNotFound , FormulaGenerator , FormulaType
9+ from ._formula_generator import FormulaGenerator , FormulaType
1110
1211
1312class GridPowerFormula (FormulaGenerator [Power ]):
@@ -27,22 +26,7 @@ def generate(
2726 builder = self ._get_builder (
2827 "grid-power" , ComponentMetricId .ACTIVE_POWER , Power .from_watts
2928 )
30- component_graph = connection_manager .get ().component_graph
31- grid_component = next (
32- (
33- comp
34- for comp in component_graph .components ()
35- if comp .category == ComponentCategory .GRID
36- ),
37- None ,
38- )
39-
40- if grid_component is None :
41- raise ComponentNotFound (
42- "Unable to find a GRID component from the component graph."
43- )
44-
45- grid_successors = component_graph .successors (grid_component .component_id )
29+ grid_successors = self ._get_grid_component_successors ()
4630
4731 # generate a formula that just adds values from all commponents that are
4832 # directly connected to the grid. If the requested formula type is
Original file line number Diff line number Diff line change 99from ....microgrid .component import ComponentCategory , ComponentMetricId
1010from ..._quantities import Power
1111from .._formula_engine import FormulaEngine
12- from ._formula_generator import (
13- NON_EXISTING_COMPONENT_ID ,
14- ComponentNotFound ,
15- FormulaGenerator ,
16- )
12+ from ._formula_generator import NON_EXISTING_COMPONENT_ID , FormulaGenerator
1713
1814
1915class ProducerPowerFormula (FormulaGenerator [Power ]):
@@ -39,19 +35,7 @@ def generate(self) -> FormulaEngine[Power]:
3935 "producer_power" , ComponentMetricId .ACTIVE_POWER , Power .from_watts
4036 )
4137 component_graph = connection_manager .get ().component_graph
42- grid_component = next (
43- iter (
44- component_graph .components (component_category = {ComponentCategory .GRID })
45- ),
46- None ,
47- )
48-
49- if grid_component is None :
50- raise ComponentNotFound ("Grid component not found in the component graph." )
51-
52- grid_successors = component_graph .successors (grid_component .component_id )
53- if not grid_successors :
54- raise ComponentNotFound ("No components found in the component graph." )
38+ grid_successors = self ._get_grid_component_successors ()
5539
5640 if len (grid_successors ) == 1 :
5741 grid_meter = next (iter (grid_successors ))
You can’t perform that action at this time.
0 commit comments