Fortgeschrittene Bedienung

Die folgenden Abschnitte beschreiben weitergehende Bedienungs- sowie Einstellmöglichkeiten der Software Memory Channels Processor.

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=' ')

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
# 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) }}

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
# 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 stellt folgende Variablen zur Verwendung bereit:

Verfügbare Variablen im Benennungs-Schema
Key Type

band

object

callsign

object

country

object

ctcss

bool

ctcss_rx

float64

ctcss_tx

float64

distance

float64

dmr

bool

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

simplex

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.

Beispiel-Datensatz
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 Variablen im Benennungs-Schema aufgelistet.

In unserem Beispiel sieht das Benennungs-Schema nun so aus:

Beispiel Benennungs-Schema
#  <1>        (2)                  (3)                 (4)              (5)    (6)              (7)            (8)              (9)
{{ 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:

Erweiterter Beispiel-Datensatz
Name Band Call Name (formatiert)

Sandl

70cm

OE3XSA

3XSA-7-Sandl▪▪▪▪

Grünberg

70cm

OE5XGL

5XGL-7-Gruenberg

St. Georgen am Längsee

70cm

OE8XWK

8XWK-7-St.George

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:

Anwendung des benutzerdefinierten Benennungs-Schemas
# 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, ' ') }}"