@@ -51,6 +51,7 @@ def __init__(
5151 )
5252 self ._string_engines : dict [str , FormulaEngine [Quantity ]] = {}
5353 self ._power_engines : dict [str , FormulaEngine [Power ]] = {}
54+ self ._power_3_phase_engines : dict [str , FormulaEngine3Phase [Power ]] = {}
5455 self ._current_engines : dict [str , FormulaEngine3Phase [Current ]] = {}
5556
5657 def from_string (
@@ -123,6 +124,40 @@ def from_power_formula_generator(
123124 self ._power_engines [channel_key ] = engine
124125 return engine
125126
127+ def from_power_3_phase_formula_generator (
128+ self ,
129+ channel_key : str ,
130+ generator : type [FormulaGenerator [Power ]],
131+ config : FormulaGeneratorConfig = FormulaGeneratorConfig (),
132+ ) -> FormulaEngine3Phase [Power ]:
133+ """Get a formula engine that streams 3-phase power values.
134+
135+ Args:
136+ channel_key: The string to uniquely identify the formula.
137+ generator: The formula generator.
138+ config: The config to initialize the formula generator with.
139+
140+ Returns:
141+ A formula engine that streams [3-phase][frequenz.sdk.timeseries.Sample3Phase]
142+ power values.
143+ """
144+ from ._formula_engine import ( # pylint: disable=import-outside-toplevel
145+ FormulaEngine3Phase ,
146+ )
147+
148+ if channel_key in self ._power_3_phase_engines :
149+ return self ._power_3_phase_engines [channel_key ]
150+
151+ engine = generator (
152+ self ._namespace ,
153+ self ._channel_registry ,
154+ self ._resampler_subscription_sender ,
155+ config ,
156+ ).generate ()
157+ assert isinstance (engine , FormulaEngine3Phase )
158+ self ._power_3_phase_engines [channel_key ] = engine
159+ return engine
160+
126161 def from_3_phase_current_formula_generator (
127162 self ,
128163 channel_key : str ,
@@ -163,5 +198,7 @@ async def stop(self) -> None:
163198 await string_engine ._stop () # pylint: disable=protected-access
164199 for power_engine in self ._power_engines .values ():
165200 await power_engine ._stop () # pylint: disable=protected-access
201+ for power_3_phase_engine in self ._power_3_phase_engines .values ():
202+ await power_3_phase_engine ._stop () # pylint: disable=protected-access
166203 for current_engine in self ._current_engines .values ():
167204 await current_engine ._stop () # pylint: disable=protected-access
0 commit comments