DMRConnectDMRConnect
Главная · Для разработчиков · Владельцам серверов

Как приложение подключается к вашему мастеру

Для вашего HBlink, FreeDMR, XLX или MiniDMR приложение выглядит как обычный хотспот на протоколе Homebrew (MMDVM). Здесь расписано, что именно оно отправляет, как узнать его в логах и почему мастер может его не пустить.

Обновлено 19.10.2026

Кому
админам HBlink, FreeDMR, XLX, MiniDMR и других мастеров
Протоколы
Homebrew/MMDVM (UDP, по умолчанию 62031, у XLX 62030), BrandMeister через Open DMR Terminal (UDP 54006), рефлекторы YSF, NXDN, P25 своими протоколами
Как узнать в логах
Software ID DMRConnect, Package ID ru.stackworks.dmr, описание DMRConnect client

Вход на мастер

Последовательность та же, что у MMDVMHost и Pi-Star, поэтому настраивать на сервере для приложения ничего особенного не нужно.

  1. RPTL с ID узла. Мастер отвечает RPTACK и четырьмя байтами соли.
  2. RPTK с SHA-256 от соли и пароля мастера. В ответ RPTACK.
  3. RPTC с конфигурацией узла, 302 байта в каноническом формате MMDVM. В ответ RPTACK, и узел подключён.
  4. Только для серверов, где в настройках задана строка опций: RPTO с этой строкой как есть.
  5. Дальше RPTPING раз в 5 секунд, мастер отвечает MSTPONG. По этой паре приложение показывает человеку задержку до сервера.

Если на первый RPTL пришёл MSTNAK, приложение отправляет RPTCL и пробует ещё раз. Так бывает, когда мастер ещё держит старую сессию того же ID, например после смены сети на телефоне. При отключении приложение тоже отправляет RPTCL, чтобы мастер сразу освободил узел, а не ждал тайм-аута.

Что лежит в RPTC

ПолеДлинаЧто шлёт DMRConnect
Callsign8позывной из настроек сервера, заглавными
RX и TX Freq9 + 9000000000, то есть узел без радио. В режиме хотспота с рацией по USB - настоящая частота
TX Power201
Color Code2из настроек сервера, по умолчанию 01
Latitude, Longitude, Height8 + 9 + 3нули: координаты телефона приложение не передаёт
Location20DMRConnect
Description19DMRConnect client
Slots14 - симплекс на TS2. 3 - оба слота, если человек выбрал TS1
URL124https://dmrconnect.ru
Software ID40DMRConnect
Package ID40ru.stackworks.dmr

По Software ID и Package ID на дашборде легко отличить приложение от настоящих хотспотов, если вам это нужно, например чтобы вывести значок телефона.

ID узла, DMR ID и ESSID

Если человек указал ESSID, ID узла считается как в Pi-Star: DMR ID × 100 + ESSID, девять цифр. Девятизначный ID из QR-ссылки приложение раскладывает обратно на DMR ID и ESSID. Девять цифр уходят только туда, где нужен номер узла: в RPTL, RPTC и поле узла в DMRD. Источником в голосе и SMS всегда идёт семизначный DMR ID, потому что девять цифр не помещаются в три байта поля src.

Если ваш мастер разрешает говорить только владельцу хотспота (так делает MiniDMR), в настройках сервера в приложении должен стоять DMR ID того человека, на кого заведён узел.

Обрывы и повторный вход

Телефон в отличие от хотспота часто меняет сеть и засыпает. Поэтому приложение само переподключается, человек при этом ничего не нажимает:

Голос, приватные вызовы, Talker Alias

Голос идёт обычными кадрами DMRD: суперкадр A-F, в каждом кадре три кадра AMBE+2 по 20 мс. В суперкадре передаётся embedded LC. Кроме голосового LC (группа или приватный вызов) в нём крутится Talker Alias: заголовок и блоки по ETSI, позывной или текст, который человек задал для этого сервера. TA видят рации на той же группе и дашборды, которые разбирают embedded LC.

SMS для HBlink уходят кадрами данных в формате Motorola TMS. Приватный вызов - обычный DMRD с типом вызова «приват» и номером абонента в dst.

Какие группы слышит человек на HBlink или FreeDMR, решают правила вашего сервера. Приложение передаёт в выбранную группу на выбранном слоте и показывает всё, что мастер ему присылает.

XLX

К XLX приложение входит через его DMR-интерфейс тем же Homebrew, порт по умолчанию 62030, пароль не нужен. Модуль выбирается приватным вызовом на 4000 + номер модуля: 4001 - модуль A, 4002 - B и так далее, 4000 - отвязка. Разговор идёт в группу 6. Какие модули показывать в приложении, админ может задать в QR-ссылке ключом m.

Отладка с xlxd показала тонкость, полезную всем, кто пишет свой клиент. xlxd хранит идентификатор потока как 16 бит и при разборе берёт старшие байты нашего 32-битного stream_id. Если они нулевые, поток молча не открывается. DMRConnect кладёт меняющийся счётчик именно в старшие байты.

BrandMeister

BrandMeister с 2021 года пускает по Homebrew только устройства с радиомодулем. Программа без радио получает MSTNAK на RPTC, даже если пароль верный. Поэтому с версии 2.0.7 DMRConnect ходит к BrandMeister по Open DMR Terminal Protocol (Rewind), UDP 54006, с паролем Hotspot Security из профиля BrandMeister. Подменять поля RPTC под хотспот, как делают некоторые клиенты, мы не стали: правила BrandMeister это запрещают.

Приватные вызовы BrandMeister по этому протоколу молча игнорирует, поэтому попугая на BrandMeister вызывают группой 9990.

Почему мастер не пускает

Приложение различает причины и говорит человеку, что именно не так. Админу полезно знать, что стоит за каждой.

Что видит человекЧто произошлоЧто проверить на сервере
Сервер не отвечаетна RPTL нет ответаоткрыт ли UDP-порт снаружи, слушает ли мастер этот порт, не режет ли файрвол адреса мобильных операторов
Сервер отказал этому DMR IDMSTNAK на RPTL и после повторасписки разрешённых ID, бан, не занят ли узел другим устройством
Сервер не принял парольMSTNAK на RPTKпароль мастера (PASSPHRASE), у MiniDMR - пароль конкретного устройства
Пароль принят, но сервер отклонил настройки станцииотказ на RPTCсверяет ли мастер позывной с DMR ID по radioid.net, требования к частоте, фильтры по Software ID

Как проверить свой сервер

Удобнее всего попугаем: группа, которая записывает передачу и проигрывает её обратно. Если он у вас есть, человек говорит в него и сразу слышит, что путь работает в обе стороны. Без попугая нужна вторая рация или дашборд, который показывает входящие потоки.

Своего сервера ещё нет? MiniDMR, наш бесплатный мастер, ставится одной командой, у него попугай на группе 9990 из коробки и QR-код для DMRConnect в кабинете. Инструкция на minidmr.ru.

Нашли неточность или не хватает функции? Напишите в группу DMRConnect, поправим справочник.