Benennungs-Schemata verwenden und anpassen
Der Memory Channels Processor
unterstützt auch die Anpassung der Benennung von Einträgen.
Diese Anpassung ist bei manchen Geräten wegen der limitierten Anzeigemöglichkeiten notwendig, aber auch aufgrund von persönlichen Präferenzen des Anwenders.
In den folgenden Abschnitten wird kurz beschrieben, welche Möglichkeiten es grundsätzlich zu Auswahl gibt und auch wie man sein ganz individuelles Benennungs-Schema zusammenstellen kann.
Beschreibung der Funktionen und Filter in Templates
Die folgenden Filter bzw. Funktionen können im Rahmen der Benennungs-Schemata aber auch in den Jinja2-Templates zusätzlich zu den in Jinja2 integrierten Filtern verwendet werden:
Name | Signature | Description |
---|---|---|
format_callsign_dstar |
format_callsign_dstar(callsign: str, port: str) → str |
Format a given callsign according to the D-STAR convention with port |
format_coordinate |
format_coordinate(coordinate: <built-in function any>, precision: int = None) → str |
Format a given coordinate and consider the precision if given |
format_ctcss |
format_ctcss(ctcss: <built-in function any>) → str |
Format a given ctcss value |
ljust |
ljust(content, width, fillchar=' ') |
|
lstrip |
lstrip(content, char=' ') |
|
remove_diacritic |
remove_diacritic(content: str) → str |
Remove accents (diacritics) from text |
remove_prefix |
remove_prefix(content: str, prefix: str) → str |
Removes a given prefix from text |
remove_spaces |
remove_spaces(content: str) → str |
Remove spaces from given text |
remove_suffix |
remove_suffix(content: str, suffix: str) → str |
Removes a given suffix from text |
removediacritic |
removediacritic(content: str) → str |
Remove accents (diacritics) from text |
removeprefix |
removeprefix(content: str, prefix: str) → str |
Removes a given prefix from text |
removespaces |
removespaces(content: str) → str |
Remove spaces from given text |
removesuffix |
removesuffix(content: str, suffix: str) → str |
Removes a given suffix from text |
replace_umlauts |
replace_umlauts(content: str) → str |
Replace special German umlauts (vowel mutations) from text |
replaceumlauts |
replaceumlauts(content: str) → str |
Replace special German umlauts (vowel mutations) from text |
rjust |
rjust(content, width, fillchar=' ') |
|
rstrip |
rstrip(content, char=' ') |
|
safe |
safe(content: str) → str |
Converts 'bad' characters in a string to underscores |
strip |
strip(content, char=' ') |
|
substring |
substring(content, start, end=None) |
|
swapcase |
swapcase(content) |
Auswahl des Benennungs-Schemas
Die Software bietet die Option die Benennung der Einträge anzupassen.
Zu diesem Zweck wird die Option --name-format
bereitgestellt.
# Auswahl des Benennungs-Schemas 'callsign-mode-name'
memory-channels-processor ... --name-format "callsign-mode-name"
Die folgenden Formate stehen zur Auswahl.
Die Spalte Template
gibt die zugrundeliegende Vorlage an.
Format | Template |
---|---|
callsign |
{{ callsign | default('', True) }} |
5-char |
{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) | ljust(4) }}{{ mode_short }} |
6-char |
{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) | ljust(4) }}-{{ mode_short }} |
7-char |
{{ callsign | default('', True) | removeprefix('OE') | substring(0,5) | ljust(5) }}-{{ mode_short }} |
callsign-mode-name |
{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) | ljust(4) }}-{{ mode_short }}{{ '-' if name is defined and name | length }}{{ name | default('', True) | replaceumlauts }} |
callsign-name |
{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) | ljust(4) }}{{ '-' if name is defined and name | length }}{{ name | default('', True) | replaceumlauts }} |
name |
{{ name | default('', True) }} |
name-5-char |
{{ name | default('', True) | replaceumlauts | removespaces | substring(0,4) | ljust(4) }}{{ mode_short }} |
name-6-char |
{{ name | default('', True) | replaceumlauts | removespaces | substring(0,4) | ljust(4) }}-{{ mode_short }} |
name-7-char |
{{ name | default('', True) | replaceumlauts | removespaces | substring(0,5) | ljust(4) }}-{{ mode_short }} |
name-callsign |
{{ name | default('', True) | replaceumlauts | removespaces | substring(0,7) | ljust(7) }}{{ '-' if callsign is defined and callsign | length }}{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) }} |
name-mode-callsign |
{{ name | default('', True) | replaceumlauts | removespaces | substring(0,5) | ljust(5) }}-{{ mode_short }}{{ '-' if callsign is defined and callsign | length }}{{ callsign | default('', True) | removeprefix('OE') | substring(0,4) }} |
Für mode
wird je nach Frequenzband und Betriebsart 2
für 2m, 7
für 70cm oder D
für eine digitale Betriebsart gesetzt.
Auswahl eines benutzerdefinierten Benennungs-Schemas
Die Software bietet auch die Verwendung einer benutzerdefinierten Vorlage zur Benennung der Einträge an.
Zu diesem Zweck wird die Option --name-format-custom
bereitgestellt.
Gleichzeitig muss die Option --name-format
auf custom
gesetzt sein.
# Auswahl des Benennungs-Schemas 'custom'
memory-channels-processor ... --name-format "custom" --name-format-custom "<Benutzerdefiniertes-Benennungs-Schema>"
Die Vorlagen werden mit Hilfe der Template-Engine Jinja2 gerendert.
Eine Übersicht über die verwendete Syntax findet man unter https://jinja.palletsprojects.com/en/3.1.x/templates/.
Der Memory Channels Processor
arbeitet intern mit den folgenden Datensatz-Spalten und stellt somit auch folgende Variablen zur Verfügung:
Key | Type |
---|---|
band |
object |
c4fm |
bool |
callsign |
object |
country |
object |
country_code |
object |
ctcss |
bool |
ctcss_rx |
float64 |
ctcss_tx |
float64 |
distance |
float64 |
dmr |
bool |
dmr_cc |
int64 |
dmr_id |
int64 |
dstar |
bool |
dstar_rpt1 |
object |
dstar_rpt2 |
object |
dup |
object |
fm |
bool |
freq_rx |
float64 |
freq_tx |
float64 |
heading |
int64 |
landmark |
object |
lat |
float64 |
loc_exact |
bool |
locator |
object |
long |
float64 |
multimode |
bool |
name |
object |
offset |
float64 |
scan_group |
int64 |
sea_level |
int64 |
simplex |
bool |
skip |
bool |
source_id |
object |
source_license |
object |
source_name |
object |
source_provider |
object |
source_type |
object |
source_url |
object |
split |
bool |
state |
object |
Weiters kann auch noch die Variable mode_short
verwendet werden.
Beispiel
Anhand des folgenden Beispiels soll die benötigte Konfiguration gezeigt werden.
Es soll für die Software OpenGD77 CPS
eine Repeater-Liste erstellt werden, bei der die Benennung der einzelnen Einträge genau 16 Zeichen lang ist und Callsign (gekürzt), Band und den Namen (gekürzt) enthält.
Name | Band | Call |
---|---|---|
Sandl |
70cm |
OE3XSA |
Grünberg |
70cm |
OE5XGL |
St. Georgen am Längsee |
70cm |
OE8XWK |
Die gewünschte Benennung sollte also am Beispiel des Repeaters Sandl
ein etwa so aussehen: 3XSA-7-Sandl▪▪▪▪
- das ▪
soll die Leerzeichen visualisieren.
Für Grünberg
will man eine Ausgabe wie 5XGL-7-Gruenberg
und St. Georgen am Längsee
soll zu 8XWK-7-St.George
werden.
Und wie bringt man das nun der Software bei?
Die Software erwartet ein Benennungs-Schema, dass sie befolgen kann und mit dem sie die gewünschten Namen "zusammenbauen" kann. Im Prinzip ist das eine Zeichenkette mit einer Syntax um Variablen einzusetzen. Die Variablen sind in der Tabelle Verfügbare Spalten bzw. Variablen im Benennungs-Schema aufgelistet.
In unserem Beispiel sieht das Benennungs-Schema nun so aus:
{{
callsign | (1)
removeprefix('OE') | (2)
ljust(4, ' ') (3)
}}-{{
mode_short (4)
}}-{{
name | (5)
replaceumlauts | (6)
removespaces | (7)
substring(0,9) | (8)
ljust(9, ' ') (9)
}}
# In einer Zeile:
{{ callsign | removeprefix('OE') | ljust(4, ' ') }}-{{ mode_short }}-{{ name | replaceumlauts | removespaces | substring(0,9) | ljust(9, ' ') }}
1 | Variable callsign (z.B. OE3XSA ) |
2 | Funktion zum Entfernen des Präfix OE |
3 | Funktion zum "Auffüllen" auf eine bestimmte Zeichenlänge (mit Leerzeichen; z.B. 4 Zeichen) |
4 | Variable mode_short (z.B. 2 , 7 oder D ) |
5 | Variable name (z.B. Sandl ) |
6 | Funktion zum Ersetzen der Umlaute (z.B. ä → ae , ü → ue ,…) |
7 | Funktion zum Entfernen von Leerzeichen |
8 | Funktion zum Kürzen des Namens auf eine bestimmte Zeichenlänge (z.B. 9 Zeichen) |
9 | Funktion zum "Auffüllen" auf 9 Zeichen (mit Leerzeichen) |
Für den Beispiel-Datensatz sieht das Ergebnis nun so aus:
Name | Band | Call | Name (formatiert) |
---|---|---|---|
Sandl |
70cm |
OE3XSA |
|
Grünberg |
70cm |
OE5XGL |
|
St. Georgen am Längsee |
70cm |
OE8XWK |
|
Um das Benennungs-Schema nun anzuwenden sind die Optionen --name-format "custom"
und --name-format-custom
zu setzen.
Ein Aufruf könnte zum Beispiel so aussehen:
# Auswahl des benutzerdefinierten Benennungs-Schemas
memory-channels-processor --source "oevsv-repeater-db" --band 70cm --type "fm" --type "dmr" --output-format "opengd77" --name-format "custom" --name-format-custom "{{ callsign | removeprefix('OE') | ljust(4, ' ') }}-{{ mode_short }}-{{ name | replaceumlauts | removespaces | substring(0,9) | ljust(9, ' ') }}"