0DMRMaster
Private DMR master server. Version 0.4.
Copyright ©2025 Alexander Mokrov, UR6LKW.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Overview
There is a few parts:
- An implementation of homebrew dmr protocol (which is used by brandmeister and hblink). Not yet complete, but sufficient for #2 and #3.
- Decoding UDP proxy
- Basic private dmr master server
Installation
- Check basic requirements:
- Linux or Windows
- Python 3.13+
- Clone/download the repo.
- Execute (linux example):
$ python -m venv venv
$ . venv/bin/activate
$ python -m pip install --upgrade pip
$ pip install -r requirements.txt
Configuration
Copy localmaster_EXAMPLE.py to localmaster.py and edit.
Run
$ . venv/bin/activate
$ python localmaster.py
Ctrl+C to break and stop.
The running server listens for 62031/udp as DMR service (may be changed with --port command line argument)
and exposes http API/dashboard on 8000/tcp (may be changed with --web-port command line argument):
- API: http://YOUR-SERVER-IP:8000/api/dashboard
- Web dashboard: http://YOUR-SERVER-IP:8000/dashboard/index.html
Roadmap
What is this for (general TODO)
- Private dmr network (own registration, admintool, dashboard, voice apps, etc)
- Other dmr networks bridge (configurable group/unit routing rules, ID replacements, etc)
- Bridge/proxy with packet modification (substitute IDs, add TA, etc..)
- Voice robots interface at packet level (parrot for group and unit cals, recording/playback as prewritten packets by events)
- Encoding and decoding of AMBE (allows to build advanced voice services, like voice time, agenda, etc)
- Voice call history dump (ambe files or decoded)
Features & TODO
- ✔️ basic apps support
- ✔️ parrot
- ✔️ password check
- ✔️ fastapi api
- ✔️ web dashboard
- ✔️ unit call routing
- ✔️ allow single peer id check
- ✔️ TA support (DMRA packet)
- 🥕 routing entity (1 timeslot == 1 routing entity)
- 🥕 only one call per ts for peer (per routing entity)
- 🥕 apps unit call routing (routing entity for app)
- 🥕 configuration
- 🥕 users configuration (allowed id and passes per id)
- 🥕 resolve id to callsigns
- 🥕 routing 2: group subscriptions
- 🥕 data calls (messages)
- 🥕 dmr internal burst structure decoding (to fix rf fields and get ambe)
- 🥕 ambe decode/encode
- 🥕 log voice calls as files
- 🥕 TA support 2 (inside DMRD packets)
- 🥕 registration
- 🥕 update radiod list and resolve
Sources
-
ETSI TS 102 361-1 V1.2.1 (2006-01) Technical Specification Electromagnetic compatibility and Radio spectrum Matters (ERM); Digital Mobile Radio (DMR) Systems; Part 1: DMR Air Interface (AI) protocol https://www.etsi.org/deliver/etsi_ts/102300_102399/10236101/01.02.01_60/ts_10236101v010201p.pdf
-
MMDVMHost by Jonathan Naylor, G4KLX https://github.com/g4klx/MMDVMHost
-
HBLink3 by Cortney T. Buffington, N0MJS https://github.com/n0mjs710/hblink3
-
IPSC Protocol Specs for homebrew DMR repeater by DL5DI, G4KLX, DG1HT 2015 (partially obsolete) https://wiki.brandmeister.network/images/5/54/DMRplus_IPSC_Protocol_for_HB_repeater.pdf