Files
2026-08-20 04:18:28 +09:00

4.3 KiB

0DMRMaster

Private DMR master server. Version 0.5. Copyright ©2025 Alexander Mokrov, UR6LKW.

This project is currently in public alpha and is under active development. Don't use it in production environment, interfaces may change.

License

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

This project contains:

  1. An implementation of homebrew dmr protocol (which is used by brandmeister and hblink). Not yet complete, but sufficient for #2 and #3.
  2. Decoding UDP proxy
  3. Basic private dmr master server

Installation

  1. Check basic requirements:
    • Linux or Windows
    • Python 3.11+
  2. Clone/download the repo.
  3. Create environment and install requirements (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):

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)
  • ✔️ dmr internal structure decoding (get LC, voice data)
  • 🥕 routing (1 timeslot == 1 routing entity)
  • 🥕 only one call per ts for peer (per routing entity)
  • 🥕 dmr internal structure encoding (set LC, generate voice data)
  • 🥕 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)
  • 🥕 ambe decode/encode
  • 🥕 log voice calls as files
  • 🥕 TA support 2 (inside DMRD packets)
  • 🥕 registration
  • 🥕 update radiod list and resolve

Sources