Skip to content

Commit 052d90e

Browse files
committed
Add VoltageTransformer component
Signed-off-by: Leandro Lucarella <[email protected]>
1 parent b20c6c9 commit 052d90e

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

src/frequenz/client/microgrid/component/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from ._precharger import Precharger
1717
from ._relay import Relay
1818
from ._status import ComponentStatus
19+
from ._voltage_transformer import VoltageTransformer
1920

2021
__all__ = [
2122
"Chp",
@@ -31,4 +32,5 @@
3132
"Meter",
3233
"Precharger",
3334
"Relay",
35+
"VoltageTransformer",
3436
]
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# License: MIT
2+
# Copyright © 2024 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Voltage transformer component."""
5+
6+
import dataclasses
7+
from typing import Literal
8+
9+
from ._category import ComponentCategory
10+
from ._component import Component
11+
12+
13+
@dataclasses.dataclass(frozen=True, kw_only=True)
14+
class VoltageTransformer(Component):
15+
"""A voltage transformer component.
16+
17+
Voltage transformers are used to step up or step down the voltage, keeping
18+
the power somewhat constant by increasing or decreasing the current.
19+
20+
If voltage is stepped up, current is stepped down, and vice versa.
21+
22+
Note:
23+
Voltage transformers have efficiency losses, so the output power is always less
24+
than the input power.
25+
"""
26+
27+
category: Literal[ComponentCategory.VOLTAGE_TRANSFORMER] = (
28+
ComponentCategory.VOLTAGE_TRANSFORMER
29+
)
30+
"""The category of this component."""
31+
32+
primary_voltage: float
33+
"""The primary voltage of the transformer, in volts.
34+
35+
This is the input voltage that is stepped up or down.
36+
"""
37+
38+
secondary_voltage: float
39+
"""The secondary voltage of the transformer, in volts.
40+
41+
This is the output voltage that is the result of stepping the primary
42+
voltage up or down.
43+
"""
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# License: MIT
2+
# Copyright © 2025 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Tests for VoltageTransformer component."""
5+
6+
import pytest
7+
from frequenz.client.common.microgrid import MicrogridId
8+
from frequenz.client.common.microgrid.components import ComponentId
9+
10+
from frequenz.client.microgrid.component import (
11+
ComponentCategory,
12+
ComponentStatus,
13+
VoltageTransformer,
14+
)
15+
16+
17+
@pytest.fixture
18+
def component_id() -> ComponentId:
19+
"""Provide a test component ID."""
20+
return ComponentId(42)
21+
22+
23+
@pytest.fixture
24+
def microgrid_id() -> MicrogridId:
25+
"""Provide a test microgrid ID."""
26+
return MicrogridId(1)
27+
28+
29+
@pytest.mark.parametrize(
30+
"primary, secondary", [(400.0, 230.0), (0.0, 0.0), (230.0, 400.0), (-230.0, -400.0)]
31+
)
32+
def test_creation_ok(
33+
component_id: ComponentId,
34+
microgrid_id: MicrogridId,
35+
primary: float,
36+
secondary: float,
37+
) -> None:
38+
"""Test VoltageTransformer component initialization with different voltages."""
39+
voltage_transformer = VoltageTransformer(
40+
id=component_id,
41+
microgrid_id=microgrid_id,
42+
name="test_voltage_transformer",
43+
manufacturer="test_manufacturer",
44+
model_name="test_model",
45+
status=ComponentStatus.ACTIVE,
46+
primary_voltage=primary,
47+
secondary_voltage=secondary,
48+
)
49+
50+
assert voltage_transformer.id == component_id
51+
assert voltage_transformer.microgrid_id == microgrid_id
52+
assert voltage_transformer.name == "test_voltage_transformer"
53+
assert voltage_transformer.manufacturer == "test_manufacturer"
54+
assert voltage_transformer.model_name == "test_model"
55+
assert voltage_transformer.status == ComponentStatus.ACTIVE
56+
assert voltage_transformer.category == ComponentCategory.VOLTAGE_TRANSFORMER
57+
assert voltage_transformer.primary_voltage == pytest.approx(primary)
58+
assert voltage_transformer.secondary_voltage == pytest.approx(secondary)

0 commit comments

Comments
 (0)