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
1 change: 0 additions & 1 deletion packages/control/chargepoint/chargepoint_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ class ConnectedConfig:
chargemode: Chargemode = Chargemode.STOP
current_plan: Optional[int] = 0
ev_template: int = 0
priority: bool = False
time_charging_in_use: bool = False


Expand Down
1 change: 0 additions & 1 deletion packages/control/ev/charge_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ def chargemode_factory() -> Chargemode:
class ChargeTemplateData:
id: int = 0
name: str = "Lade-Profil"
prio: bool = False # OBSOLET seit 2.3.0
load_default: bool = False
time_charging: TimeCharging = field(default_factory=time_charging_factory)
chargemode: Chargemode = field(default_factory=chargemode_factory)
Expand Down
2 changes: 1 addition & 1 deletion packages/control/ev/ev.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
""" EV-Logik
ermittelt, den Ladestrom, den das EV gerne zur Verfügung hätte.

In den control Parametern wird sich der Lademodus, Submodus, Priorität, Phasen und Stromstärke gemerkt,
In den control Parametern werden Lademodus, Submodus, Phasen und Stromstärke gemerkt,
mit denen das EV aktuell in der Regelung berücksichtigt wird. Bei der Ermittlung der benötigten Strom-
stärke wird auch geprüft, ob sich an diesen Parametern etwas geändert hat. Falls ja, muss das EV
in der Regelung neu priorisiert werden und eine neue Zuteilung des Stroms erhalten.
Expand Down
2 changes: 0 additions & 2 deletions packages/helpermodules/setdata.py
Original file line number Diff line number Diff line change
Expand Up @@ -548,8 +548,6 @@ def process_control_parameter_topics(self, msg):
self._validate_value(msg, str)
elif "/control_parameter/limit" in msg.topic:
self._validate_value(msg, "json")
elif "/control_parameter/prio" in msg.topic:
self._validate_value(msg, bool)
elif "/control_parameter/current_plan" in msg.topic:
self._validate_value(msg, int)
elif ("/control_parameter/min_current" in msg.topic or
Expand Down
20 changes: 19 additions & 1 deletion packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@

class UpdateConfig:

DATASTORE_VERSION = 154
DATASTORE_VERSION = 155

FILE_OPERATION_VERSION = 0

Expand Down Expand Up @@ -4173,3 +4173,21 @@ def upgrade(topic: str, payload) -> Optional[dict]:

self._loop_all_received_topics(upgrade)
self._append_datastore_version(154)

def upgrade_datastore_155(self) -> None:
"""Veraltete Prioritätsfelder auch aus bereits migrierten Konfigurationen entfernen."""
def upgrade(topic: str, payload) -> Optional[dict]:
if re.fullmatch(r"openWB/vehicle/template/charge_template/[0-9]+", topic):
field = "prio"
elif re.fullmatch(r"openWB/chargepoint/[0-9]+/get/connected_vehicle/config", topic):
field = "priority"
else:
return None
config = decode_payload(payload)
if field in config:
del config[field]
return {topic: config}
return None

self._loop_all_received_topics(upgrade)
self._append_datastore_version(155)
47 changes: 40 additions & 7 deletions packages/helpermodules/update_config_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,24 +373,25 @@ def test_upgrade_datastore_142_ev_chargemode_conversion(ev0_prio: bool,
ev0_charge_template = ChargeTemplate()
ev0_charge_template.data.id = 0
ev0_charge_template.data.chargemode.selected = ev0_chargemode
ev0_charge_template.data.prio = ev0_prio
ev1_charge_template = ChargeTemplate()
ev1_charge_template.data.id = 1
ev1_charge_template.data.chargemode.selected = ev1_chargemode
ev1_charge_template.data.prio = ev1_prio
ev2_charge_template = ChargeTemplate()
ev2_charge_template.data.id = 2
ev2_charge_template.data.chargemode.selected = ev2_chargemode
ev2_charge_template.data.prio = ev2_prio

uc = UpdateConfig()
uc.all_received_topics = {
"openWB/vehicle/0/charge_template": 0,
"openWB/vehicle/1/charge_template": 1,
"openWB/vehicle/2/charge_template": 2,
"openWB/vehicle/template/charge_template/0": dataclass_utils.asdict(ev0_charge_template.data),
"openWB/vehicle/template/charge_template/1": dataclass_utils.asdict(ev1_charge_template.data),
"openWB/vehicle/template/charge_template/2": dataclass_utils.asdict(ev2_charge_template.data),
# Historische Payloads behalten das damalige Prioritätsfeld unabhängig vom aktuellen Datenmodell.
"openWB/vehicle/template/charge_template/0": {
**dataclass_utils.asdict(ev0_charge_template.data), "prio": ev0_prio},
"openWB/vehicle/template/charge_template/1": {
**dataclass_utils.asdict(ev1_charge_template.data), "prio": ev1_prio},
"openWB/vehicle/template/charge_template/2": {
**dataclass_utils.asdict(ev2_charge_template.data), "prio": ev2_prio},
"openWB/system/datastore_version": [131, 132],
}

Expand All @@ -400,7 +401,39 @@ def test_upgrade_datastore_142_ev_chargemode_conversion(ev0_prio: bool,
# evaluation
assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == expected
assert uc.all_received_topics["openWB/system/datastore_version"] == [131, 132, 142]
assert mock_pub.pub.call_count == 2 # einmal publishen für Upgrade der Datastore-Version
assert mock_pub.pub.call_count == 2 # Rangfolge und Datastore-Version


def test_upgrade_datastore_155_removes_only_obsolete_template_prio(mock_pub: Mock):
uc = UpdateConfig()
priorities = [{"type": "vehicle", "id": 4}]
uc.all_received_topics = {
"openWB/vehicle/template/charge_template/0": b'{"prio": true, "name": "A"}',
"openWB/vehicle/template/charge_template/1": b'{"prio": false, "name": "B"}',
"openWB/vehicle/template/charge_template/2": {"name": "C"},
"openWB/chargepoint/0/set/log": {"prio": True},
"openWB/chargepoint/0/get/connected_vehicle/config": b'{"priority": true, "charge_template": 0}',
"openWB/chargepoint/1/get/connected_vehicle/config": b'{"priority": false, "charge_template": 1}',
"openWB/chargepoint/2/get/connected_vehicle/config": {"charge_template": 2},
"openWB/counter/get/loadmanagement_prios": priorities,
"openWB/system/datastore_version": list(range(155)),
}

uc.upgrade_datastore_155()

for template_id, name in enumerate(("A", "B", "C")):
assert uc.all_received_topics[f"openWB/vehicle/template/charge_template/{template_id}"] == {"name": name}
assert uc.all_received_topics["openWB/chargepoint/0/set/log"] == {"prio": True}
for cp_id in range(3):
assert uc.all_received_topics[f"openWB/chargepoint/{cp_id}/get/connected_vehicle/config"] == {
"charge_template": cp_id}
assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == priorities
assert uc.all_received_topics["openWB/system/datastore_version"] == list(range(156))
assert mock_pub.pub.call_count == 5

mock_pub.reset_mock()
uc.upgrade_datastore_155()
mock_pub.pub.assert_not_called()


def test_upgrade_datastore_149_removes_not_controlled_consumers(mock_pub: Mock):
Expand Down
Loading