BW3-Core/docu/docs/modul/descriptor.md
KoenigMjr dca8d9106c 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
2025-10-22 09:59:11 +02:00

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 true gesetzt werden
  • Escaping: Backslashes müssen in YAML doppelt escaped werden (\\1 statt \1)
  • Regex-Gruppen: Mit \\1, \\2 etc. 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 scanField vorhanden ist, wird das Feld descrField dem Paket hinzugefügt
  • Wenn keine Beschreibung vorhanden ist, wird im Feld descrField der Inhalt des Feldes scanField hinterlegt

Zusätzliche Wildcards

  • Von der Konfiguration abhängig