BW3-Core/docu/docs/modul/descriptor.md
KoenigMjr 475e4bc5b3 CSV-Cleaning, new matching strategy, new Debug-message, updating docu
- csv-data sets will now be corrected, no matter if the "for"-value is: 1234567, "1234567" or '1234567'
- depending on "isregex" value in csv first exact matches, second regex matches. So it is safe that if double matches occur, exact matches always wins.
- debug for CSV row read implemented
- updating readme to newest development
2025-12-03 22:28:08 +01:00

4.6 KiB

Descriptor


Beschreibung

Mit diesem Modul können einem Alarmpaket beliebige Beschreibungen in Abhängigkeit der enthaltenen Informationen hinzugefügt werden.

Unterstützte Alarmtypen

  • Fms
  • Pocsag
  • Zvei
  • Msg

Resource

descriptor

Konfiguration

Informationen zum Aufbau eines BOSWatch Pakets

Achtung: Zahlen, die führende Nullen enthalten, müssen in der YAML-Konfiguration in Anführungszeichen gesetzt werden, z.B. '0012345'. In CSV-Dateien ist dies nicht zwingend erforderlich.

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 Wert im scanField, der geprüft werden soll
add Beschreibungstext, der im descrField hinterlegt werden soll
isRegex Muss explizit auf true gesetzt werden, wenn 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
^3456[0-9]$,FF Grossdorf,true

Hinweis: In CSV-Dateien müssen Werte mit führenden Nullen nicht in Anführungszeichen gesetzt werden (können aber, falls gewünscht). Die Spalte isRegex gibt an, ob der Wert in for als regulärer Ausdruck interpretiert werden soll (true/false). Falls kein Wert angegeben ist, ist die Paarung standardmäßig false, wie z.B. beim Eintrag der FF B-Dorf im obigen Beispiel.

Kombination von YAML- und CSV-Konfiguration

Beide Varianten können parallel genutzt werden. In diesem Fall werden die Beschreibungen aus der YAML-Konfiguration und aus der angegebenen CSV-Datei in einer gemeinsamen Datenbank zusammengeführt.

Matching-Reihenfolge und Priorität

Das Modul wendet folgende Prioritäten beim Matching an:

  1. Exakte Matches (aus YAML und CSV) werden zuerst geprüft
  2. Regex-Matches (aus YAML und CSV) werden nur geprüft, wenn kein exakter Match gefunden wurde

Beispiel für Kombination:

- type: module
  res: descriptor
  config:
    - scanField: tone
      descrField: description
      wildcard: "{DESCR}"
      descriptions:
        - for: 12345
          add: FF YAML-Test (exakt)
        - for: '123.*'
          add: FF YAML-Regex
          isRegex: true
      csvPath: "config/descriptions_tone.csv"

Bei einem scanField-Wert von 12345 wird immer "FF YAML-Test (exakt)" verwendet, auch wenn der Regex ebenfalls zutreffen würde. Regex-Matches werden nur verwendet, wenn kein exakter Match gefunden wurde - unabhängig davon, ob die Einträge aus YAML oder CSV stammen.


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