Три формата DMR-SMS: Motorola TMS, Hytera и ETSI UDT

Категория: Данные: SMS, GPSСложность: ~9 мин

Текстовые сообщения в DMR — одна из тех функций, где «работает у соседа, не работает у меня» встречается чаще всего. Причина не в настройках и не в сети: в эфире сосуществуют три несовместимых формата, и рации разных вендоров говорят на разных. Разберём, чем они отличаются и что из этого следует на практике.

Коротко: три мира

ФорматКто используетТранспорт
Motorola TMSMotorola и большинство любительских сетейIP/UDP внутри DMR, порт 4007
Hyteraрации Hyteraсобственный стек протоколов
ETSI UDTстандартный путь, встречается режештатные блоки данных DMR

Де-факто стандартом у радиолюбителей стал первый: сети, шлюзы и открытые прошивки ориентируются на него.

Motorola TMS: как устроено сообщение

Сообщение едет как обычный UDP-пакет на порт 4007 внутри радиоканала. Полезная нагрузка разбирается так:

СмещениеПолеСмысл
0–1Длинадва байта, старший первым
2Тип и флагимладшие пять бит — тип; бит 0x40 — «нужно подтверждение»
3Резервдля текста ноль
4Идентификатормладшие пять бит — номер, по нему сопоставляется подтверждение
5Длина префиксасколько байт пропустить до текста
6+ТекстUTF-16, младший байт первым

Тип 0x00 — обычный текст, 0x1F — подтверждение доставки. Само подтверждение короткое, пять байт: длина, тип и номер сообщения, на которое отвечаем.

Откуда берётся «крокозябра» Текст кодируется в UTF-16, а не в привычную однобайтовую кодировку. Отсюда две классические беды самодельных шлюзов: сообщение приходит с пробелами между буквами (прочитали UTF-16 как однобайтовую строку) или обрезается на первом же символе кириллицы. Русский текст в DMR-SMS вполне живёт, просто занимает вдвое больше места.
Тонкость с адресом отправителя В служебных полях есть признак того, кем отправлено сообщение — рацией или сервером. Некоторые модели строго проверяют этот признак и молча игнорируют ответ, пришедший «не от того класса адреса». Если ваш шлюз шлёт, а рация не показывает — проверьте это раньше, чем частоты и маршруты.

Подтверждения: почему «доставлено» не всегда правда

Флаг «нужно подтверждение» ставит отправитель. Если рация-получатель приняла сообщение, она отвечает коротким подтверждением с тем же номером. Но:

  • подтверждение означает «принято радиостанцией», а не «прочитано человеком»;
  • если получателя нет в эфире, сообщение просто не доходит: очереди в стандарте нет;
  • групповые сообщения не подтверждаются в принципе — некому.

Именно поэтому в DMRhub входящие складываются в диалоги в приложении и кабинете: даже если рация была выключена, текст не теряется и его видно позже.

ETSI UDT: стандартный путь

В стандарте для коротких данных предусмотрен механизм UDT, где четыре бита задают формат содержимого. Поддерживаются, в частности: двоичные данные, адрес абонента или группы, двоично-десятичный код, семибитная и восьмибитная кодировки, координаты в формате NMEA, IP-адрес, шестнадцатибитный Unicode и протокол определения местоположения.

Ограничения: заголовок занимает 10 октетов, к нему добавляется не более четырёх блоков данных. То есть одно UDT-сообщение — это сотни бит, а не килобайты: длинный текст всё равно придётся резать.

Hytera: свой стек

У Hytera собственная многоуровневая обвязка со своими протоколами регистрации, местоположения, телеметрии, управления радиостанцией и текстовых сообщений. С Motorola TMS она несовместима напрямую, и мосты между ними делаются отдельным преобразованием. Для владельца это означает простую вещь: Hytera и Anytone в одной сети могут прекрасно слышать друг друга голосом и при этом не обмениваться сообщениями.

Что делать на практике

  • Сообщения не уходят вообще. Проверьте, что в кодплаге прописан правильный контакт получателя и рация настроена на приватные сообщения, а не на групповые. Разбор ошибок кодплага — в отдельной статье.
  • Уходят, но не приходят адресату. Скорее всего, вы в разных форматах: сверьте вендоров и посмотрите, поддерживает ли сеть преобразование.
  • Приходит нечитаемое. Дело в кодировке UTF-16 на стороне шлюза, а не в рации.
  • Нужна гарантия доставки. В радиоканале её нет. Сети с серверной частью решают это хранением сообщений — как в DMRhub, где переписка живёт в кабинете и приложении.

Сообщения, которые не теряются

В DMRhub SMS с рации попадают в диалог и остаются там: их видно в приложении и в кабинете, даже если рация была выключена. Отвечать можно с телефона или из браузера — на рацию придёт обычное DMR-сообщение.

Источники

  1. Разбор формата Motorola TMS по полям и подтверждениям — wiki.ipsc3.net
  2. ETSI TS 102 361-4 V1.12.1, форматы UDT и структура заголовка — dmrassociation.org
  3. Реализация текстовых сообщений в OpenGD77 (порт 4007, двухбайтный текст) — opengd77.com
  4. ok-dmrlib: разбор Motorola TMS и стека Hytera — github.com/OK-DMR/ok-dmrlib
  5. Поддержка Motorola IP/UDP текстовых сообщений на порту 4007 в SDRTrunk — github.com/DSheirer/sdrtrunk
В сети DMRhub

Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.

Войти в портал