Как приложение подключается к вашему мастеру
Для вашего HBlink, FreeDMR, XLX или MiniDMR приложение выглядит как обычный хотспот на протоколе Homebrew (MMDVM). Здесь расписано, что именно оно отправляет, как узнать его в логах и почему мастер может его не пустить.
- Кому
- админам HBlink, FreeDMR, XLX, MiniDMR и других мастеров
- Протоколы
- Homebrew/MMDVM (UDP, по умолчанию 62031, у XLX 62030), BrandMeister через Open DMR Terminal (UDP 54006), рефлекторы YSF, NXDN, P25 своими протоколами
- Как узнать в логах
- Software ID
DMRConnect, Package IDru.stackworks.dmr, описаниеDMRConnect client
Вход на мастер
Последовательность та же, что у MMDVMHost и Pi-Star, поэтому настраивать на сервере для приложения ничего особенного не нужно.
RPTLс ID узла. Мастер отвечаетRPTACKи четырьмя байтами соли.RPTKс SHA-256 от соли и пароля мастера. В ответRPTACK.RPTCс конфигурацией узла, 302 байта в каноническом формате MMDVM. В ответRPTACK, и узел подключён.- Только для серверов, где в настройках задана строка опций:
RPTOс этой строкой как есть. - Дальше
RPTPINGраз в 5 секунд, мастер отвечаетMSTPONG. По этой паре приложение показывает человеку задержку до сервера.
Если на первый RPTL пришёл MSTNAK, приложение отправляет RPTCL и пробует ещё раз. Так бывает, когда мастер ещё держит старую сессию того же ID, например после смены сети на телефоне. При отключении приложение тоже отправляет RPTCL, чтобы мастер сразу освободил узел, а не ждал тайм-аута.
Что лежит в RPTC
| Поле | Длина | Что шлёт DMRConnect |
|---|---|---|
| Callsign | 8 | позывной из настроек сервера, заглавными |
| RX и TX Freq | 9 + 9 | 000000000, то есть узел без радио. В режиме хотспота с рацией по USB - настоящая частота |
| TX Power | 2 | 01 |
| Color Code | 2 | из настроек сервера, по умолчанию 01 |
| Latitude, Longitude, Height | 8 + 9 + 3 | нули: координаты телефона приложение не передаёт |
| Location | 20 | DMRConnect |
| Description | 19 | DMRConnect client |
| Slots | 1 | 4 - симплекс на TS2. 3 - оба слота, если человек выбрал TS1 |
| URL | 124 | https://dmrconnect.ru |
| Software ID | 40 | DMRConnect |
| Package ID | 40 | ru.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 того человека, на кого заведён узел.
Обрывы и повторный вход
Телефон в отличие от хотспота часто меняет сеть и засыпает. Поэтому приложение само переподключается, человек при этом ничего не нажимает:
MSTCLот мастера (обычно перезапуск при обновлении) - пауза и вход заново, пауза растёт до 30 секунд.MSTNAKуже после входа значит, что мастер нас забыл: закрыл сессию по тайм-ауту или перезапустился. Приложение входит заново, как DMRGateway.- Нет
MSTPONGдольше 20 секунд, например телефон проснулся: проверочный пинг, и если за 4 секунды ответа нет, вход заново. Проверка включается, только если мастер вообще отвечает на пинги, иначе сервер безMSTPONGперелогинивал бы нас постоянно.
Голос, приватные вызовы, 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 ID | MSTNAK на RPTL и после повтора | списки разрешённых ID, бан, не занят ли узел другим устройством |
| Сервер не принял пароль | MSTNAK на RPTK | пароль мастера (PASSPHRASE), у MiniDMR - пароль конкретного устройства |
| Пароль принят, но сервер отклонил настройки станции | отказ на RPTC | сверяет ли мастер позывной с DMR ID по radioid.net, требования к частоте, фильтры по Software ID |
Как проверить свой сервер
Удобнее всего попугаем: группа, которая записывает передачу и проигрывает её обратно. Если он у вас есть, человек говорит в него и сразу слышит, что путь работает в обе стороны. Без попугая нужна вторая рация или дашборд, который показывает входящие потоки.
Своего сервера ещё нет? MiniDMR, наш бесплатный мастер, ставится одной командой, у него попугай на группе 9990 из коробки и QR-код для DMRConnect в кабинете. Инструкция на minidmr.ru.
Нашли неточность или не хватает функции? Напишите в группу DMRConnect, поправим справочник.