Skip to content

Commit 1831a5a

Browse files
Add formula engine that streams 3-phase power
Signed-off-by: Daniel Zullo <[email protected]>
1 parent 40c6432 commit 1831a5a

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

src/frequenz/sdk/timeseries/formula_engine/_formula_engine_pool.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)