Skip to content

Commit

Permalink
fix hierarchy validation (openWB#1629)
Browse files Browse the repository at this point in the history
* fix hierarchy validation

* reuse text
  • Loading branch information
LKuemmel authored Jun 13, 2024
1 parent d7649a9 commit 1f42246
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 33 deletions.
42 changes: 27 additions & 15 deletions packages/control/counter_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ class CounterAllData:


class CounterAll:
"""
"""
MISSING_EVU_COUNTER = "Bitte erst einen EVU-Zähler konfigurieren."

def __init__(self):
self.data = CounterAllData()
Expand Down Expand Up @@ -332,6 +331,22 @@ def _remove_item(self, child: Dict, current_entry: Dict, id: str, keep_children:
else:
return False

def hierarchy_add_item_below_evu(self, new_id: int, new_type: ComponentType) -> None:
try:
self.hierarchy_add_item_below(new_id, new_type, self.get_id_evu_counter())
except (TypeError, IndexError):
if new_type == ComponentType.COUNTER:
# es gibt noch keinen EVU-Zähler
hierarchy = [{
"id": new_id,
"type": ComponentType.COUNTER.value,
"children": self.data.get.hierarchy
}]
Pub().pub("openWB/set/counter/get/hierarchy", hierarchy)
self.data.get.hierarchy = hierarchy
else:
raise ValueError(self.MISSING_EVU_COUNTER)

def hierarchy_add_item_below(self, new_id: int, new_type: ComponentType, id_to_find: int) -> None:
"""ruft die rekursive Funktion zum Hinzufügen eines Elements als Kind des angegebenen Elements.
"""
Expand Down Expand Up @@ -419,24 +434,21 @@ def check_and_add(type_name: ComponentType, data_structure):
break
else:
try:
self.hierarchy_add_item_below(entry_num, type_name, self.get_evu_counter().num)
except (TypeError, IndexError):
# es gibt noch keinen EVU-Zähler
hierarchy = [{
"id": entry_num,
"type": ComponentType.COUNTER.value,
"children": data.data.counter_all_data.data.get.hierarchy
}]
Pub().pub("openWB/set/counter/get/hierarchy", hierarchy)
data.data.counter_all_data.data.get.hierarchy = hierarchy
self.hierarchy_add_item_below_evu(entry_num, type_name)
except ValueError:
pub_system_message({}, "Die Struktur des Lastmanagements ist nicht plausibel. Bitte prüfe die "
"Konfiguration und Anordnung der Komponenten in der Hierarchie.",
MessageType.WARNING)

pub_system_message({}, f"{component_type_to_readable_text(type_name)} mit ID {element['id']} wurde"
" in der Hierarchie hinzugefügt, da kein Eintrag in der Hierarchie gefunden "
"wurde. Bitte prüfe die Anordnung der Komponenten in der Hierarchie.",
" in der Struktur des Lastmanagements hinzugefügt, da kein Eintrag in der "
"Struktur gefunden wurde. Bitte prüfe die Anordnung der Komponenten in der "
"Struktur.",
MessageType.WARNING)

check_and_add(ComponentType.BAT, data.data.bat_data)
# Falls EVU-Zähler fehlt, zuerst hinzufügen.
check_and_add(ComponentType.COUNTER, data.data.counter_data)
check_and_add(ComponentType.BAT, data.data.bat_data)
check_and_add(ComponentType.CHARGEPOINT, data.data.cp_data)
check_and_add(ComponentType.INVERTER, data.data.pv_data)

Expand Down
18 changes: 17 additions & 1 deletion packages/control/hierarchy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,23 @@ def test_delete_obsolete_entries(hierarchy, data_):
{"id": 5, "type": "cp", "children": []}]},
{"id": 2, "type": "bat", "children": []},
{"id": 1, "type": "inverter", "children": []}
]}], id="add inverter 1")
]}], id="add inverter 1"),
pytest.param([{"id": 3, "type": "cp", "children": []},
{"id": 6, "type": "counter",
"children": [
{"id": 4, "type": "cp", "children": []},
{"id": 5, "type": "cp", "children": []}]},
{"id": 2, "type": "bat", "children": []}],
[{"id": 0, "type": "counter",
"children": [
{"id": 3, "type": "cp", "children": []},
{"id": 6, "type": "counter",
"children": [
{"id": 4, "type": "cp", "children": []},
{"id": 5, "type": "cp", "children": []}]},
{"id": 2, "type": "bat", "children": []},
{"id": 1, "type": "inverter", "children": []}
]}], id="add evu counter 0")
]
)
def test_add_missing_entries(hierarchy, expected_hierarchy, data_, monkeypatch):
Expand Down
20 changes: 4 additions & 16 deletions packages/helpermodules/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -434,22 +434,10 @@ def set_default(topic: str, defaults: dict):
component_default["id"] = new_id
general_type = special_to_general_type_mapping(payload["data"]["type"])
try:
data.data.counter_all_data.hierarchy_add_item_below(
new_id, general_type, data.data.counter_all_data.get_id_evu_counter())
except (TypeError, IndexError):
if general_type == ComponentType.COUNTER:
# es gibt noch keinen EVU-Zähler
hierarchy = [{
"id": new_id,
"type": ComponentType.COUNTER.value,
"children": data.data.counter_all_data.data.get.hierarchy
}]
Pub().pub("openWB/set/counter/get/hierarchy", hierarchy)
data.data.counter_all_data.data.get.hierarchy = hierarchy
else:
pub_user_message(payload, connection_id,
"Bitte erst einen EVU-Zähler konfigurieren!", MessageType.ERROR)
return
data.data.counter_all_data.hierarchy_add_item_below_evu(new_id, general_type)
except ValueError:
pub_user_message(payload, connection_id, counter_all.CounterAll.MISSING_EVU_COUNTER, MessageType.ERROR)
return
# Bei Zählern müssen noch Standardwerte veröffentlicht werden.
if general_type == ComponentType.BAT:
topic = f"openWB/set/bat/{new_id}"
Expand Down
1 change: 0 additions & 1 deletion packages/helpermodules/update_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,6 @@ class UpdateConfig:
"^openWB/system/device/module_update_completed$",
"^openWB/system/ip_address$",
"^openWB/system/lastlivevaluesJson$",
"^openWB/system/messages/[0-9]+$",
"^openWB/system/mqtt/bridge/[0-9]+$",
"^openWB/system/mqtt/valid_partner_ids$",
"^openWB/system/release_train$",
Expand Down

0 comments on commit 1f42246

Please sign in to comment.