In order to learn more about how DMR works, I set about trying to implement my own server. I first looked at Brandmeister and Phoenix, could I download and run my own? No, they are closed systems.

Searching around I came across HBLink3. I found lots of references to it and even a few forks.

I quickly set up a simple bridge in a docker container, and was able to handle a conversation. I invited a few other people on play as well, and quickly discovered that all traffic was sent to all peers (Pi-stars) registered. This turns out to be by design.


In the end I found the hblink code while very nice and complete would become a limiting factor in with the direction I was heading. So in decided to start from scratch. Having made that decision I was then free to pick a different language. I wanted to fast and preferable a compiled language. I came across golang from google. Building from scratch

After further looking around I decided that I might be better off writing my own system. I had a few basic requirements

  • Small

  • compiled code for performance

  • minimum additional packages required

  • Run in docker containers

  • carry multiple concurrent calls directing traffic to required hotspots only

  • Authenticated hotspots only

  • Only pass traffic for known DMRIDs

  • Unlimited Talkgroups

  • ACL (Access Control List) to manage access to Talkgroups

I chose to use “Golang”. I Read through the tutorial in the morning and started writing the server in the afternoon. In all it took 2.5 days to write the basic DMR handling service and hook it into the management portal.

For more details about the system please have a look at the help pages https://raynet.m0guy.com/help