View on GitHub


HBlink for Python3 with APRS, DMR SMS, and email features

GPS/Data Application

This repository contains everything needed to decode DMR GPS packets and SMS for HBLink3. This application can act as a master or peer and receive data as a group call or private call. It is designed to work in a multi system/user network.

Files modified from original master branch of HBLink3:

Required modules

Optional Modules

This should work for DMR radios that send location data as a UTF-8 NMEA sentence. I am hopping to add support for more radios in the future.

Differences in branches

Confirmed working:

Actually tested

Anytone D878 YES YES
Anytone D578 YES YES
BTech DMR-6x2 YES Most likely
MD-380 (MD380tools, no GPS) - YES
MD-380 (stock firmware, GPS) YES Most likely
MD-390 (stock firmware) YES YES
Retevis RT73* YES YES
Ailunce HD1 YES YES

*RT73 must have unconfirmed data setting enabled.

Highly suspected to work:

Not tested yet, but will most likely work.

Anytone D868 Most likely Most likely
TYT MD-2017 Most likely Likely
TYT MD-9600 Most likely Likely
Retevis RT8 Most likely Likely

Tested, but with issues.

Tested, but with bugs present.

Alinco DJ-MD5TGP WIP Most likely
Motorola DP3601 WIP WIP

Would like to test:

Connect Systems GPS enabled radios


How it works

A user should configure their radio for the DMR ID of the application and private or group call. When a position is received by the application, it will extract the coordinates and create an APRS position packet. The application will find the callsign of the user based on the sending radio’s DMR ID. It is essential to have an up to date subscriber_ids file for this to work. A predefined APRS SSID is appended to the callsign. The APRS location packet is then uploaded to APRS-IS. No setup is required beforehand on the part of the user. This is pretty much “plug and play.”

For example, N0CALL has a DMR ID of 1234567. N0CALL’s radio sends a position to the application. The application will query the subscriber_ids file for DMR ID 1234567. The result will be N0CALL. An APRS location pack is created and uploaded to APRS-IS.

Individual user/DMR ID APRS settings

By default, all APRS positions will have an SSID of 15, a default comment, and the callsign of the DMR user. These default settings can be changed.

The comment, SSID, and icon can be set for each individual user/DMR ID the application sees. The application stores all the setting in a file. You may have different SSIDs, icons, and comments for different DMR IDs. This is done via DMR SMS using the following commands:

Command Description Example
@SSID Change SSID of user callsign. @SSID 7
@ICON Change the icon of the APRS position. *See for icon list. @icon /p
@COM Change the comment of the APRS. @COM This is a test comment.
@MH Set you location by maidenhead grid square. Designed for radios with no GPS or that are not compatable yet. @MH DN97uk
@BB Post a bulliten to the web dashboard. @BB This is a test bulletin.
@[CALLSIGN W/ SSID] A-[MESSAGE] Send a message to another station via APRS. @N0CALL-15 A-This is a test.
[EMAIL ADDRESS] E-[MESSAGE] Send an email to an email address. E-This is a test.
@SOS Any SMS with @SOS in it will trigger an EMERGENCY notice on the dashboard @SOS THIS IS ONLY A TEST
@NOTICE Any SMS with @NOTICE in it will trigger a notice on the dashboard, can be used to test EMERGENCY function. @NOTICE THIS IS ONLY A TEST
@REM SOS Removes EMERGENCY or general notice from dashboard. @REM SOS

Send a DMR SMS to the configured dmr_data_id in the application with the desired command followed by the value. For example, to change your icon to a dog, the command would be @ICON /p (see the icon table for values). Changing your SSID is as simple as @SSID 7, and @COM Testing 123 will change the comment.

Sending @BB Test will result in a post to the bulletin board with the messaage of “Test”.

To remove any of the stored values, just send the appropriate command without any input. @COM will remove the stored comment, @ICON will remove the stored icon, and @COM will remove the strored comment. Any position now reports sent will have the default settings.

Web Dashboard

The web dashboard is completely optional. Python module flask is required for this to work. The web dashboard will display the last 15 positions of radios sent to APRS-IS. The dashboard will also sh user bulletin. A bulletin is a message sent via SMS that will display on the web dashboard. There are several uses for this, including: testing SMS functionality of radio, announcements, and moire. It is a novel feature. The page will automatically reload every 2 minutes. Setup is rather simple. Just modify the example config in the dashboard directory and rename it to Then start

Dashboard Features

Dashboard Screenshots

Main Page



APRS messaging

At this time, only sending of messages from DMR SMS to APRS-IS is supported. I find this feature very pointless because it will only go one way, but someone else may find it important. Messages from sent from APRS-IS to DMR SMS will not work. I have not written the code for this yet. It will likley be a long time before this is a possibility.


The project was granted a tocall of APHBLx by Bob Bruniga, WB4APR. This will identify that your APRS position came from HBLink. The x on the end can be any letter/number. Here are the current designations of APHBLx:


See hblink_SAMPLE.cfg,, and gps_data_SAMPLE.cfg for examples.

Special thanks to:

N0MJS - For creating HBLink and dmr_utils. This project not possible without him.

IU7IGU - For creating APRS position beaconing for PEER connections.

IV3JDV - For helping debug SMS in Anytone radios.

KD7LMN - For pointing out a critical bug.

KB5PBM - For helping implement support for MD-380 type radios.

EI7IG - For writing the page explaining MD-380 type GPS packets.

M0GLJ - For assisting with Motorola testing.

Resources for DMR data

I spent many hours looking at the following for this project. You may find these links useful.

All of the ETSI DMR documents (ETSI 102 361-1 through 361-4).

The Shark RF forums.