DMRGateway konfigurieren

Wer mit seinem Repeater oder Hotspot in mehr als einem DMR-Netzwerk arbeiten möchte, ohne laufendes umschalten, der kommt derzeit am DMRGateway von G4KLX nicht vorbei.

Der DMRGateway ist ein Frontend, welches den MMDVMHost um die Funktion erweitert, mehrere Netzwerke gleichzeitig, nebeneinander zu betreiben.

Der Gateway verbindet die Netze NICHT miteinander !!!


Aktuell kann der Gateway mit bis zu 4 Netzen arbeiten, 3 DMR-Netze und 1x XLX Multiprotokoll Netz, wobei im XLX Bereich eine Umschaltung zwischen den verschiedenen XLX Servern möglich ist.

Dafür müßen dann lediglich Talkgroups und Reflektoren, die in den Netzen gleichermaßen vorkommen, umgemappt werden.


Die hier genutzte Netzzuordnung dient lediglich als Beispiel.
Ihr könnt natürlich umsetzen wie es jedem selbst beliebt.
Der Fantasie sind dabei keine Grenzen gesetzt. Es sollte aber für die User übersichtlich bleiben.

So ist es auch möglich die Zuordnung der Netze anders zu setzen, und vom Brandmeister nur einige TG’s zu mappen und das DMRPlus Netz 1:1 durchzuleiten.
Oder nur ein DMR-Netzwerk zu nutzen und dafür ebend den XLX Zugang anzubieten.

Auch muß natürlich der Gerätecodeplug entsprechend angepasst werden.
Es ist auch möglich noch ein drittes DMR-Netzwerk (z.B. Phoenix) einzubinden, dann Rutscht das “Primäre” Netzwerk an die Stelle “DMR Network 3”.

Die Primär und Sekundär Bezeichnung dient übrigens NICHT der Bewertung der Netzwerke.
Ich nutze beide Netzwerke gleichermaßen gern.
Es dient lediglich zur simpleren Unterscheidung der Netze beim Mapping im Gateway.


Installation :

DMRGateway kann auf dem gleichen Rechner laufen, auf dem auch der MMDVMHost läuft.
Bei mir landet das ganze im Verzeichnis /opt.
cd /opt/
sudo git clone https://github.com/g4klx/DMRGateway(link is external)
cd DMRGateway
sudo make
Gestartet wird DMRGateway dann mit dem Kommando
./DMRGateway DMRGateway.ini
Wer will kann DMRGateway auch in einer Screen Session starten, um sich den Konsolen Output auch via SSH anzusehen :
/usr/bin/Screen -S DMRGateway -D -m /opt/DMRGateway/DMRGateway /opt/DMRGateway/DMRGateway.ini
Die Screen Session kann man sich dann mit sudo screen -r DMRGateway
wieder aufrufen.

Um DMRGateway automatisch zu starten, kann man sich eine Systemd-Unit anlegen:

[Unit]
Description=DMRGateway Service
After=syslog.target network.target

[Service]
User=root
#WorkingDirectory=/opt/DMRHost
ExecStart=/usr/bin/screen -S DMRGateway -D -m /opt/DMRGateway/DMRGateway /opt/.ini/DMRGateway.ini
ExecStop=/usr/bin/screen -S DMRGateway -X quit

[Install]
WantedBy=multi-user.target

Diese startet den Gateway automatisch. Ich hinterlege diese immer unter /lib/systemd/system als dmrgateway.service.

Um diese zu aktivieren sind dann folgende Kommandos nötig:

sudo systemctl daemon-reload
sudo systemctl enable dmrgateway.service

Anschließend startet der Gateway bei jedem Systemstart automatisch.

mit systemctl status dmrgateway.service kann man sich den aktuelle Status anschauen, ob der Gateway aktiv oder inaktiv ist.

systemctl stop dmrgateway.service stopt den Gateway von Hand, beim nächsten Neustart startet er aber wieder mit.

Systemctl start dmtgateway.service startet den DMRGateway von Hand.

Mit systemctl disable dmrgateway.service nehmt Ihr den Gateway aus dem Autostart und deaktiviert die Unit. systemctl enable dmrgateway.service aktiviert diese Unit für den Autostart.


Auch die MMDVM.ini des MMDVMHost muss entsprechend angepasst werden.
MMDVM.ini :

# Type may be either 'Direct' or 'Gateway'. When Direct you must provide the Master's
# address as well as the Password, and for DMR+, Options also.
Type=Gateway
LocalAddress=127.0.0.1
LocalPort=62032
RemoteAddress=127.0.0.1
RemotePort=62031
# Password=P@ssw0rd1234
Jitter=0
Slot1=1
Slot2=1
# Options=
# ModeHang=3
Debug=0

Konfiguration und Mapping:

Im folgenden zeige Ich das mappen am Beispiel DMRPlus, Brandmeister und XLX518 :

Am besten definiert man ein Primäres Netz, ein Sekundäres Netz und den XLX Multiprotokoll Server.
(Bei 3 DMR-Netzwerken 2 sekundäre Netze und zuletzt das Primär Netz)

Am Hauptnetz wird nichts verändert, lediglich am sekundären Netz wird gemappt und eine freie Talkgroup wird für den XLX Multiprotokoll Server reserviert.

Syntax :

Gemappt wird nach dem Format :
TGRewrite=2,92620,2,2620,11
Hier werden jetzt die TG 2620-2630 von TS 2 auf TG 92620-92630 auf TS2 umgesetzt.

TGRewrite=[Timeslot Gateway],[Talkgroup Gateway],[Timeslot Netz],[Talkgroup Netz],[Summe der umgesetzten Ports]
Die ersten Zwei Parameter beschreiben also wo und wie Ihr die Talkgroups auf Eurem Funkgerät empfangt.
Die nächsten Zwei, wo der DMRGateway Sie sich aus dem DMR Netz holt.
Der letzte Parameter legt fest, wie viele Ports, ab dem angegebenen gemappt werden.

Zum Umsetzen/Mappen gibt es mehrere Varianten :

  • TGRewrite – Setzt Talkgroups auf einen anderen Timeslot und/oder auf eine andere Talkgroup um.
  • PCRewrite – Setzt PrivateCalls/Reflektoren um
  • SrcRewrite – Setzt einen PrivateCall/Reflektor aus dem Netz in eine Talkgroup am Gateway um.
  • TypeRewrite – Umgekehrt zu Source Rewrite, wird hier eine Talkgroup (GroupCall) am Gateway auf einen Reflektor (Private Call) im Netzwerk umgesetzt.
  • PassAllPC=1/2 – Lässt alle nicht vorher definierten PrivateCalls auf dem angegebenen Timeslot (1/2) durch.
    Achtung! Darf nur in einem der DMR Netze gesetzt werden !
  • PassAllTG=1/2 – Lässt alle nicht vorher definierten GroupCalls/Talkgroups auf dem angegebenen Timeslot (1/2) durch.
    Achtung! Darf nur in einem der DMR Netze gesetzt werden !

Im DMR+ Netz kann zusätzlich noch die, aus MMDVMHost bekannte, “Options” Option eingefügt werden, um Startreflektor/Talkgroup & Relink Time abweichend vom Master zu setzen, wenn er dieses zulässt.

XLX-Multiprotokoll-Server :

XLX Multiprotokoll Server sind am einfachsten einzurichten.

Da die XLX-Module (A-Z,Disconnect & Status) wie Reflektoren bedient werden, reicht hier eine Einzelne Talkgroup.
Hier im Beispiel die TG4. Dies wird auch die Basisnummer zur Modulumschaltung.
Auf dieser Talkgroup ist der XLX am Gateway erreichbar.

Die Module A-Z werden dann mit den Reflektornummern 44001-44026 geschaltet.
Modul E wäre also Ref 44005, Disconnect 44000 und Status 45000.


Dazu wird der entsprechende Abschnitt in der GATEWAY.ini angepasst :

[XLX Network] 
Enabled=1 <– 1 Aktiviert das Netz/0 deaktiviert das Netz 
File=XLXHosts.txt <– File für die aktuellen XLX Server, wird regelmäßig aktualisiert 
Port=62030 
Password=passw0rd 
ReloadTime=60 <– Zeit nach der die XLXHosts.txt aktualisiert wird 
# Local=3351 
Slot=2 <– Timeslot auf dem XLX am Gateway läuft 
TG=4 <– Talkgroup auf der XLX am Gateway läuft 
Base=44000 <– Basis auf der die Module/Reflektoren des XLX umgeschaltet werden 
Startup=518 <– XLX-Server der zum Startup des Gateways eingestellt wird. Nummern stehen in der XLXHosts.txt 
Relink=10 <– Zeit in Minuten, nach der auf den Startup XLX zurück geschaltet wird 
#Override default module for startup reflector
Module=F <- Hier kann das Start-Modul für den Startup-Reflektor gewählt werden
Debug=0

Vorgegeben ist hier im Beispiel der XLX518, der beim Startup connected wird, und auf das, in der XLXHosts.txt hinterlegte, Standardmodul geschaltet wird.

Alternativ kann im Parameter Modul= auch ein abweichendes Start-Modul vorgegeben werden.

Will man z.B. lieber auf XLX950 starten, trägt man bei Startup= stattdessen die 950 ein.
Wechselt man das Modul, oder sogar den XLX-Server im laufenden Betrieb, fällt der Gateway nach der eingestellten Relink Zeit automatisch wieder auf den Vor eingestellten Server, und sein Standard Modul zurück.

Über einen Private Call lässt sich auch im Betrieb der XLX-Reflektor wechseln.

Dies geschieht über den Private Call <XLXTG>8<XLXReflektor>.

Wechseln Wir als Beispiel mal auf den XLX950:

Dann sende Ich einen Private Call an 48950.

Die 4 ist die von XLXGateway genutze Talkgroup im DMRGateway, die 8 sagt dem Gateway “Wechsel den Reflektor”und 950 ist die Refelktor Nummer aus der XLXHosts.txt.

Wenn Ihr eine Relink Zeit gesetzt habt, fällt das System nach der dort angegeben Zeit ohne Aktivität wieder auf den in der DMRGateway.ini hinterlegten Start-Reflektor zurück.

DMR Netzwerk 1: Das “sekundäre” DMR-Netz

Als nächstes wird das sekundäre DMR Netz bearbeitet, hier im Beispiel DMRplus.
Bei mir läuft das tatsächlich als sekundäres Netz, da für mir ein Mappen von DL, OE und TG9 reicht.
Das meiste läuft bei DMRplus über die Reflektoren, was das Handling im Gateway deutlich erleichtert, da Brandmeister keine Reflektoren mehr nutzt und die TG9 daher idR. frei ist.

Hier im Beispiel mappe Ich die TG’s 1,10,232 & 262 auf TimeSlot 1 und TG 9 auf TimeSlot 2 :
Bei TG1 & 10 wird es einfach,diese werden im Brandmeister Netz nicht genutzt und daher 1:1 durchgeleitet.
232 & 228 werden auf 9232 & 9228 umgemappt. Die 9 wird hier sozusagen zum “Präfix” für das sekundäre Netz gemacht.

Es geht natürlich auch jede andere Kombination.
Bei der 262 DL verzichte Ich auf den Präfix und mappe diese auf eine freie TG, z.B. 264.
So ist DMRPlus 262 auf meinen Gateways auf die 264 statt z.B. 9262 gemappt.

Da im Brandmeister mittlerweile keine Reflektoren mehr genutzt werden, können die Reflektoren von DMRplus direkt auf die TG 9 gemappt werden, ohne mit dem Brandmeister Netz zu kollidieren.
Dadurch ist ein (fast) gewohnter Betrieb für die meisten DMRplus Nutzer gegeben.
Lediglich Talkgroups, die in beiden Netzen vorkommen, müssen mit einem “Präfix” versehen werden.

# DMR+ 
[DMR Network 1] 
Enabled=1 
Name=DMRPlus <– Interner Name des Netzes, zur späteren Auswertung in Dashboards etc. 
Address=90.187.72.177 <– IP-Adresse/URL des Masterservers 
Port=55555 
Options=StartRef=4010;RelinkTime=15; !!! Nur für DMRPlus !!! Setzt Startreflektor und Talkgroups etc. 
# Local=3352 
#Mapping DMRPlus TS1 Talkgroups to TS2 
TGRewrite=1,1,1,1,2 <– Mappt TS1,TG1&2 nach TS1, TG 1&2 
TGRewrite=1,10,1,10,1 <– Mappt TS1, TG10 nach TS1, TG10 
TGRewrite=1,264,1,262,1 <— Mappt TS1, TG262 nach TS1, TG264 
TGRewrite=1,9232,1,232,1 <– Mappt TS1, TG232 nach TS1, TG9232 
TGRewrite=1,9228,1,228,1 <– Mappt TS1, TG228 nach TS1, TG9228 
# Reflector TG on to slot 2 TG9 
TGRewrite=2,9,2,9,1 <– Mappt TS2, Ref. TG9 nach TS2 # Echo on slot 2 TG9990 
TGRewrite=2,9990,2,9990,1 <– Mappt die DMRPlus Echo TG 1:1 durch 
# Reflector control command slot 2 4000->4000 to 5001->5000 
PCRewrite=2,4000,2,4000,1002 <– TS2 Reflektor Kommandos 4000-5001 werden auf TS2 4000-5001 umgesetzt. 
Password=passw0rd 
Debug=0 
Location=1 <– 1/0 Schaltet die Übermittlung der Standortdaten an den Masterserver Ein/Aus

Mit weiteren “sekundären” Netzen kann man wie beim ersten DMR-Netz verfahren.

Ich nutze Beispielsweise [DMR Network 2] dazu ein zweites mal DMRplus zu connecten um parallel 2 verschiedene Reflektoren zu Empfangen. Oder man fügt noch FreeDMR oder das TGIF-DMR Netz hinzu. Diese werden dann ebenfalls als sekundäre Netze betrachtet und nicht komplett 1:1 gemappt.

DMR-Netzwerk 2: Das primäre Netz

Als letztes kommt das Primäre DMR-Netz, also das Netz was man hauptsächlich und unverändert nutzen möchte.

In meinem Fall ist dies das Brandmeister Netz.

Gleichzeitig ist dies auch das Netz, welches am einfachsten einzurichten ist.

Hier leitet man mehr oder weniger alles durch, was nicht in den sekundären Netzen davor explizit gemappt worden ist.

# Brandmeister
[DMR Network 2] 
Enabled=1 
Name=Brandmeister 
Id=euredmrid 
Address=master1.bm262.de 
Port=62031
# Local=3352 Pass all private traffic on slot 1 and slot 2
PassAllPC=1 <-- Leitet alle Private Calls auf Slot 1 durch
PassAllPC=2 <-- Leitet alle Private Calls auf Slot 2 durch
# Pass all not mapped talk group traffic on slot 1 and slot 2
PassAllTG=1 <-- Leitet alle auf TG1 nicht durch eine Regel erfassten Talkgroups 1:1 auf Slot 1 durch
PassAllTG=2 <-- Leitet alle auf TG2 nicht durch eine Regel erfassten Talkgroups 1:1 auf Slot 2 durch
Password=euerhotspotsecuritypassword 
Debug=0
Location=1

Hier noch ein kleiner Tip zum Parameter PassAllPC. Wer auch Private Calls aus einem der sekundären Netze nutzen möchte, kann hier tricksen.

Hier legt man für sich dann fest, das z.B. auf TS1 alle DMRplus Private Calls laufen sollen und alle Brandmeister Private Calls auf TS2.

Dazu setzt man dann im DMRplus mapping Teil, hier im Beispiel [DMR Network 1] zusätzlich den Parameter PassAllPC=1 und streicht diesen im Brandmeister Teil [DMR Network 2]. Dort steht dann nur noch PassAllPC=2.


DMRGateway bietet noch einige Sondermöglichkeiten, auf die Ich hier aber nicht weiter eingehe.

Um diese kurz zumindest anzureißen, man kann aus einer Talkgroup einen Reflektor machen und umgekehrt. Damit lassen sich dann noch ganz andere Mapping Formen gestalten, was dann aber mehr Arbeit macht, als für die meisten Notwendig ist.

Loading