diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index acc2c59fce..8111c3f860 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -9,6 +9,7 @@ from dataclasses import dataclass, field import logging from typing import List, Optional, Tuple +from fnmatch import fnmatch from control import data from control.ev.charge_template import ChargeTemplate @@ -466,12 +467,28 @@ def get_ev_to_rfid(rfid: str, vehicle_id: Optional[str] = None) -> Optional[int] for vehicle in data.data.ev_data: try: if "ev" in vehicle: - if vehicle_id is not None and vehicle_id in data.data.ev_data[vehicle].data.tag_id: + # exakte matches haben Priorität + # Vergleiche werden case-insensitive durchgeführt + # das vereinfacht die Eingabe, kann aber auch für falsche Treffer sorgen. + lowered_vehicle_tags = [tag.lower() for tag in data.data.ev_data[vehicle].data.tag_id] + if vehicle_id is not None and vehicle_id.lower() in lowered_vehicle_tags: log.debug(f"MAC {vehicle_id} wird EV {data.data.ev_data[vehicle].num} zugeordnet.") return data.data.ev_data[vehicle].num - if rfid in data.data.ev_data[vehicle].data.tag_id: + if rfid.lower() in lowered_vehicle_tags: log.debug(f"RFID {rfid} wird EV {data.data.ev_data[vehicle].num} zugeordnet.") return data.data.ev_data[vehicle].num + # Prüfung auf ein passendes Muster + # auch 'fnmatch()' ist case-insensitive + for tag_id in data.data.ev_data[vehicle].data.tag_id: + if vehicle_id is not None: + if fnmatch(vehicle_id, tag_id): + log.debug(f"MAC {vehicle_id} und gespeicherte Tag_ID {tag_id} stimmen überein. " + f"EV {data.data.ev_data[vehicle].num} zugeordnet.") + return data.data.ev_data[vehicle].num + if fnmatch(rfid, tag_id): + log.debug(f"RFID {rfid} und gespeicherte Tag_ID {tag_id} stimmen überein. " + f"EV {data.data.ev_data[vehicle].num} zugeordnet.") + return data.data.ev_data[vehicle].num except Exception: log.exception("Fehler im ev-Modul "+vehicle) return None