commit 8b220c19f6
Author: KoenigMjr <135820716+KoenigMjr@users.noreply.github.com>
Date: Wed Jul 30 13:00:51 2025 +0200
enh: CSV + Regex für descriptor-Modul
- Füge CSV-Import über csvPath-Konfiguration hinzu
- Implementiere Regex-Matching mit isRegex-Flag (YAML & CSV)
- Erstelle unified cache für YAML- und CSV-Einträge
- Wildcard-Replacement mit dynamische Beschreibungen
- Erweitere Logging für bessere Debugging-Möglichkeiten
Neue Features:
* CSV-Dateien können parallel zu YAML-Beschreibungen verwendet werden
* Regex-Unterstützung ermöglicht Pattern-basiertes Matching
* Wildcards wie {TONE} werden in Beschreibungen ("add"-Werte) ersetzt
* Vollständige Abwärtskompatibilität zu bestehenden Konfigurationen
Technische Verbesserungen:
* Unified cache-System für bessere Performance
* Korrekte Iteration über Config-Objekte mit default-Parametern
* Robuste Fehlerbehandlung für CSV-Import
* continue statt break bei fehlenden scanFields
Einschränkungen / known limitations:
* Keine explizite Behandlung von Duplikaten
* Standardverhalten ist „last one wins“, d. h. das zuletzt passende Descriptor-Objekt überschreibt den Wert
* Wenn mehrere CSV/YAML denselben Schlüssel liefern, hängt das Ergebnis von Lade- bzw. Listen-Reihenfolge ab
3.9 KiB
Descriptor
Beschreibung
Mit diesem Modul können einem Alarmpaket beliebige Beschreibungen in Abhänigkeit der enthaltenen Informationen hinzugefügt werden.
Unterstütze Alarmtypen
- Fms
- Pocsag
- Zvei
- Msg
Resource
descriptor
Konfiguration
Informationen zum Aufbau eines BOSWatch Pakets
Achtung: Zahlen welche führende Nullen entahlten müssen in Anführungszeichen gesetzt werden Bsp. '0012345'
| Feld | Beschreibung | Default |
|---|---|---|
| scanField | Feld des BW Pakets welches geprüft werden soll | |
| descrField | Name des Feldes im BW Paket in welchem die Beschreibung gespeichert werden soll | |
| wildcard | Optional: Es kann für das angelegte descrField automatisch ein Wildcard registriert werden |
None |
| descriptions | Liste der Beschreibungen | |
| csvPath | Pfad der CSV-Datei (relativ zum Projektverzeichnis) |
descriptions:
| Feld | Beschreibung | Default |
|---|---|---|
| for | Inhalt im scanField auf welchem geprüft werden soll |
|
| add | Beschreibungstext welcher im descrField hinterlegt werden soll |
|
| isRegex | Muss explizit auf true gesetzt werden, falls RegEx verwendet wird |
false |
Beispiel:
- type: module
res: descriptor
config:
- scanField: tone
descrField: description
wildcard: "{DESCR}"
descriptions:
- for: 12345
add: FF DescriptorTest
- for: '05678' # führende Nullen in '' !
add: FF TestDescription
- for: '890(1[1-9]|2[0-9])' # Regex-Pattern in '' !
add: Feuerwehr Wache \\1 (BF)
isRegex: true
- scanField: status
descrField: fmsStatDescr
wildcard: "{STATUSTEXT}"
descriptions:
- for: 1
add: Frei (Funk)
- for: 2
add: Frei (Wache)
- ...
Wichtige Punkte für YAML-Regex:
- Apostroph: Regex-Pattern sollten in
'stehen, um YAML-Parsing-Probleme zu vermeiden - isRegex-Flag: Muss explizit auf
truegesetzt werden - Escaping: Backslashes müssen in YAML doppelt escaped werden (
\\1statt\1) - Regex-Gruppen: Mit
\\1,\\2etc. können Teile des Matches in der Beschreibung verwendet werden
csvPath:
Beispiel:
- type: module
res: descriptor
config:
- scanField: tone
descrField: description
wildcard: "{DESCR}"
csvPath: "config/descriptions_tone.csv"
csvPath gibt den Pfad zu einer CSV-Datei an, relativ zum Projektverzeichnis (z. B. "config/descriptions_tone.csv").
Eine neue CSV-Datei (z. B. descriptions_tone.csv) hat folgendes Format:
Beispiel
for,add,isRegex
11111,KBI Landkreis Z,false
12345,FF A-Dorf,false
23456,FF B-Dorf,false
^3456[0-9]$,FF Grossdorf, true
In der Spalte isRegex kann zusätzlich angegeben werden, ob der Wert in for als regulärer Ausdruck interpretiert werden soll (true/false). Standardmäßig ist false.
Wenn isRegex auf true gesetzt ist, wird der Wert aus for als regulärer Ausdruck ausgewertet.
Kombination von YAML- und CSV-Konfiguration
Beide Varianten können parallel genutzt werden. In diesem Fall werden zuerst die Beschreibungen aus der YAML-Konfiguration und zusätzlich die Beschreibungen aus der angegebenen CSV-Datei geladen.
Beispiel
- type: module
res: descriptor
config:
- scanField: tone
descrField: description
wildcard: "{DESCR}"
descriptions:
- for: 12345
add: FF YAML-Test
- for: '05678' # führende Nullen in '' !
add: FF YAML-Nullen
csvPath: "config/descriptions_tone.csv"
Modul Abhängigkeiten
- keine
Externe Abhängigkeiten
- keine
Paket Modifikationen
- Wenn im Paket das Feld
scanFieldvorhanden ist, wird das FelddescrFielddem Paket hinzugefügt - Wenn keine Beschreibung vorhanden ist, wird im Feld
descrFieldder Inhalt des FeldesscanFieldhinterlegt
Zusätzliche Wildcards
- Von der Konfiguration abhängig