Skip to content

Commit e2585ef

Browse files
committed
scheduled charging: handle concurrent plans
1 parent 1407201 commit e2585ef

2 files changed

Lines changed: 16 additions & 7 deletions

File tree

packages/control/ev/charge_template.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,8 @@ def scheduled_charging_recent_plan(self,
326326
f"oder im Plan {p.name} als Begrenzung Energie einstellen.")
327327
try:
328328
if ((p.limit.selected == "amount" and used_amount >= p.limit.amount) or
329-
(p.limit.selected == "soc" and soc >= p.limit.soc_scheduled)):
329+
((p.limit.selected == "soc" and soc >= p.limit.soc_scheduled) and
330+
(p.limit.selected == "soc" and soc >= p.limit.soc_limit))):
330331
plan_fulfilled = True
331332
else:
332333
plan_fulfilled = False

packages/control/ev/charge_template_test.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -209,30 +209,38 @@ def test_scheduled_charging_recent_plan(end_time_mock,
209209
if selected_plan:
210210
assert selected_plan.plan.id == expected_plan_num
211211
else:
212-
selected_plan = None
212+
assert selected_plan is None
213213

214214

215-
def test_scheduled_charging_recent_plan_fulfilled(monkeypatch):
215+
@pytest.mark.parametrize("end_time_mock, expected_plan_num",
216+
[
217+
pytest.param([-10000, 1500, 2000], 0, id="1st plan"),
218+
pytest.param([None, -100, 2000], 1, id="1st plan fulfilled, 2nd plan"),
219+
pytest.param([None, -50, -100], 2, id="1st plan fulfilled, 3rd plan"),
220+
pytest.param([None]*3, None, id="no plan"),
221+
])
222+
def test_scheduled_charging_recent_plan_fulfilled(end_time_mock, expected_plan_num, monkeypatch):
216223
# setup
217224
# der erste PLan ist erfüllt, der zweite wird ausgewählt
218225
calculate_duration_mock = Mock(return_value=(100, 3000, 3, 500))
219226
monkeypatch.setattr(ChargeTemplate, "_calc_remaining_time", calculate_duration_mock)
220-
check_end_time_mock = Mock(side_effect=[None, 1500])
227+
check_end_time_mock = Mock(side_effect=end_time_mock)
221228
monkeypatch.setattr(timecheck, "check_end_time", check_end_time_mock)
222229
ct = ChargeTemplate()
223230
plan_mock_0 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=0, limit=Limit(selected="amount"))
224231
plan_mock_1 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=1, limit=Limit(selected="amount"))
225-
ct.data.chargemode.scheduled_charging.plans = {"0": plan_mock_0, "1": plan_mock_1}
232+
plan_mock_2 = Mock(spec=ScheduledChargingPlan, active=True, current=14, id=2, limit=Limit(selected="amount"))
233+
ct.data.chargemode.scheduled_charging.plans = {"0": plan_mock_0, "1": plan_mock_1, "2": plan_mock_2}
226234

227235
# execution
228236
selected_plan = ct.scheduled_charging_recent_plan(
229237
60, EvTemplate(), 3, 1200, 3, True, ChargingType.AC.value, 1652688000, Mock(spec=ControlParameter))
230238

231239
# evaluation
232240
if selected_plan:
233-
assert selected_plan.plan.id == 1
241+
assert selected_plan.plan.id == expected_plan_num
234242
else:
235-
selected_plan = None
243+
assert selected_plan is expected_plan_num
236244

237245

238246
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)