Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions packages/control/consumer/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,12 @@ def update(self):
if self.data.usage.type in NOT_CONTROLLED:
return
else:
if self.data.get.voltages is None:
self.data.get.voltages = [230 for i in range(0, self.data.config.connected_phases)]
if self.data.get.currents is None:
self.data.get.currents = [0]*3
# Gegen den Default statt auf None prüfen, sonst bleibt ein Array mit der alten Phasenzahl stehen,
# wenn connected_phases nachträglich geändert wird (zB 3 auf 1 Phase).
if self.data.get.voltages == [230.0]*3:
self.data.get.voltages = [230 if i < self.data.config.connected_phases else 0
for i in range(0, 3)]
if self.data.get.currents == [0.0]*3:
for i in range(0, self.data.config.connected_phases):
self.data.get.currents[i] = (self.data.get.power /
self.data.config.connected_phases /
Expand Down
4 changes: 2 additions & 2 deletions packages/control/consumer/consumer_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from control.chargemode import Chargemode
from control.chargepoint.control_parameter import ControlParameter, control_parameter_factory
from control.consumer.usage import ConsumerUsage
from dataclass_utils.factories import empty_list_factory, voltages_list_factory
from dataclass_utils.factories import currents_list_factory, empty_list_factory, voltages_list_factory
from helpermodules.abstract_plans import ScheduledPlanConsumer, TimeChargingPlanConsumer, TimepointPlan
from helpermodules.constants import NO_ERROR
from modules.common.consumer_setup import ConsumerSetup
Expand Down Expand Up @@ -63,7 +63,7 @@ class ConsumerConfig:
@dataclass
class Get:
charge_state: bool = False
currents: Optional[List[Optional[float]]] = None
currents: List[float] = field(default_factory=currents_list_factory)
daily_imported: float = field(default=0, metadata={"topic": "get/daily_imported"})
error_timestamp: int = 0
exported: float = 0
Expand Down
42 changes: 42 additions & 0 deletions packages/control/consumer/consumer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,3 +590,45 @@ def test_reset_chargemode_at_time(
assert check_end_time_mock.call_count == expected_check_end_time_calls
if expected_check_end_time_calls:
check_end_time_mock.assert_called_once_with(consumer.data.usage.reset_chargemode)


@pytest.mark.parametrize(
"connected_phases, previous_voltages, previous_currents, power, expected_voltages, expected_currents",
[
pytest.param(1, [230.0]*3, [0.0]*3, 0, [230, 0, 0], [0.0, 0.0, 0.0],
id="noch beim Default (3 Phasen): Spannung wird auf 1 Phase neu berechnet"),
pytest.param(1, [230.0]*3, [0.0]*3, 230, [230, 0, 0], [1.0, 0.0, 0.0],
id="Neuberechnung respektiert die tatsächliche Leistung"),
pytest.param(1, [230, 0, 0], [0.0, 1.0, 0.0], 0, [230, 0, 0], [0.0, 1.0, 0.0],
id="bereits korrekt (nicht beim Default): keine Neuberechnung nötig, bleibt stabil"),
],
)
def test_update_recalculates_voltages_and_currents_when_still_at_default(
consumer: Consumer,
connected_phases: int,
previous_voltages: List[float],
previous_currents: List[float],
power: float,
expected_voltages: List[float],
expected_currents: List[float],
monkeypatch):
""" Neuberechnung muss gegen den Default-Wert prüfen, nicht gegen None - sonst bleibt ein Array mit der alten
Phasenzahl stehen, wenn connected_phases nachträglich geändert wird (zB 3 auf 1 Phase). """
# setup
consumer.data.config.connected_phases = connected_phases
consumer.data.get.voltages = previous_voltages
consumer.data.get.currents = previous_currents
consumer.data.get.power = power
monkeypatch.setattr(consumer, "reset_chargemode_at_time", Mock())
monkeypatch.setattr(consumer, "is_switch_interval_elapsed", Mock())
monkeypatch.setattr(consumer, "get_parameter", Mock(return_value=(0, None, None, None)))
monkeypatch.setattr(consumer, "set_mode_changed", Mock())
monkeypatch.setattr(consumer, "set_control_parameter", Mock())
data.data.counter_all_data = Mock()

# execution
consumer.update()

# evaluation
assert consumer.data.get.voltages == expected_voltages
assert consumer.data.get.currents == expected_currents
Loading