Если вы нашли эту статью, то, скорее всего, вы уже знаете что такое APRS. А если нет, то у меня есть обзорная статья. С Meshtastic вы тоже, скорее всего, знакомы, а если нет, то... в моем блоге ничего про Meshtastic нет 🙃
Но за пределами моего блога есть хорошая серия статей про Meshtastic на Хабре.
Короче, недавно я решил заморочиться и сделать пересылку своего текущего местоположения из Meshtastic в APRS-IS. Сейчас расскажу, что в итоге получилось.
Предыстория
В радиолюбительство я попал через постель пакетное радио. Изначально заинтересовался компьютерными сетями поверх радио, а затем увлекся APRS.
Но там, где я живу, маловато инфраструктуры для APRS, зато очень хорошо развит Meshtastic. Так и появилась идея моста из Meshtastic в APRS, тем более, технологии по своему замыслу похожие.
Те же модули, которые я использую под Meshtastic, можно было бы перепрошить на LoRa APRS, но у APRS поверх LoRa та же проблема, что и у классического — нет инфраструктуры.
Поэтому я начал искать способ, как объединить Meshtastic и APRS.
Meshtastic Bridge
Чего-то готового найти не удалось, но зато на GitHub я наткнулся на Meshtastic Bridge. Изначально этот проект создавался для связывания отдельных сетей через интернет, а затем Meshtastic Bridge оброс плагинами. Например, с помощью плагинов можно пересылать пакеты из Meshtastic по MQTT, в OwnTracks или в вебхук, а для APRS я решил запилить свой плагин.
Для работы моста потребуется подключить ноду Meshtastic к какому-нибудь компьютеру с Linux по USB. В моем случае это все тот же одноплатник, который я использую для APRS IGate:
Маппинг данных из Meshtastic в APRS
Прежде чем засесть за написание плагина, нужно было разобраться с радиолюбительскими позывными. Meshtastic работает на безлицензионных частотах и в качестве имени ноды может быть прописано все что угодно, но все что угодно в APRS передавать нельзя — только официальные позывные. Плюс не понятно как сделать настраиваемые значок и комментарий, которые нужны для APRS, но отсутствуют в Meshtastic.
Можно было бы сделать все так же, как и в плагине для Owntracks: в конфиге прописываем ID ноды Meshtastic и соответствующие ей настройки APRS. Но тогда этим мостом смогут пользоваться только я и те радиолюбители, кого я вручную внесу в конфиг. Не круто.
В мире цифровой радиосвязи существует децентрализованная сеть под названием BrandMeister. Там для включения пересылки координат в APRS-IS достаточно вбить настройки в панели управления BrandMeister:
Но реализовывать что-то такое же мне было лень. В итоге я решил, что позывной вместе с настройками APRS можно запихнуть прям в имя ноды.
Длинные имена криво отображаются в приложении, а еще имена ограничены по длине, но чего-то получше я так и не придумал.
По итоговому замыслу, в сети Meshtastic должен быть хотя бы один мост, которым радиолюбители смогут воспользоваться, если переименуют свою ноду вот в таком формате:
N0CALL-12 +APRS/[Comment
N0CALL-12
это позывной и SSID; +APRS
— просто маркер (так шлюз определяет какие ноды пересылать в APRS-IS); /[
— APRS значок, Comment
— опциональный комментарий.
APRS плагин для Meshtastic Bridge
С маппингом данных схема понятна, осталось только это все воплотить в жизнь. Не мудрствуя лукаво, я форкнул Meshtastic Bridge и дописал плагин для APRS. Код сыроват, но для прототипа сойдет. И вообще я блогер, а не программист 😉
Принцип работы плагина такой:
- Стационарная нода принимает пакеты с координатами от других нод в сети (трекеров);
- Если это координаты от трекера, у которого в имени есть позывной,
+APRS
и значок, то пересылаем эти координаты в APRS-IS.
Настройка моста в APRS
Если захотите поднять свой мост, то, по идее, достаточно одного такого экземпляра, чтобы покрыть всю сеть — все-таки «mesh» в слове «Meshtastic» не просто так. Но сервера APRS-IS умеют отфильтровывать дубликаты, так что дополнительные мосты не должны навредить.
Для разворачивания своего шлюза, для начала нужно подключить мештастиковую ноду к компьютеру, а затем установить Meshtastic Bridge на этот самый компьютер:
$ git clone https://github.com/black-roland/meshtastic-bridge
$ python3 -m venv meshtastic-bridge
$ cd meshtastic-bridge
$ source bin/activate
$ pip install -r requirements.txt
Далее в config.yaml
потребуется прописать настройки шлюза:
devices:
- name: aprs_igate
serial: /dev/ttyACM0
pipelines:
radio_to_aprs:
- aprs_plugin:
log_level: debug
callsign: N0CALL-15 # ваш радиолюбительский позывной
igate:
comment: Meshtastic to APRS bridge http://ub0jbx.ru/meshtastic/
aprs_is:
password: '00000' # пароль для подключения к APRS-IS
server: rotate.aprs2.ru # сервер APRS-IS
port: 14580
device_name_format: '{CALLSIGN} +APRS{SYMBOL}{COMMENT}'
И в конце можно запускать:
$ source bin/activate
$ python main.py
Через некоторое время шлюз анонсирует свои координаты, если в настройках ноды задано фиксированное местоположение или если у вашей ноды есть GPS.
Настройка трекера
После добавления моста в сеть можно настраивать трекеры.
В качестве трекеров лучше использовать что-нибудь с GPS (T-Beam/T-Echo), но не обязательно. В моем случае у трекера нет GPS и он просто берет текущее местоположение с телефона, подключенного по Bluetooth.
Чтобы пересылка координат в APRS заработала, в настройках ноды нужно изменить Long name. В самом простом варианте достаточно указать позывной и значок вот в таком формате:
N0CALL-12 +APRS/[
N0CALL
— ваш радиолюбительский позывной, а /[
— значок человечка.
Человечка можно заменить, например, на машину: N0CALL-12 +APRS/>
Дополнительно можно указать комментарий. Обычно в комментарии указывают свою вызывную частоту (это если у вас с собой есть еще и рация):
N0CALL-12 +APRS/>145.500MHz op. Roland
Еще имеет смысл поменять в настройках роль на TRACKER
. Подробнее про роли можно почитать в документации.
Итоговый трек на карте
Пока у меня не было возможности нормально потестировать мост в APRS, но на прогулку по парку время было. С собой я захватил носимую радиостанцию на 5 ватт с «классическим» APRS и ноду Meshtastic. При этом вторая нода Meshtastic и приемный IGate установлены на одном балконе. В итоге получилось два GPS трека: левый построен по точкам «классического» APRS, а правый получился благодаря мосту из Meshtastic в APRS.
Через Meshtastic много пакетов просто потерялось, причем связь заметно ухудшилась в самом парке. В принципе не удивительно — ноды Meshtastic работают на 868МГц, а для такого высокочастотного сигнала лес это большое препятствие.
Но зато в моем городе у сети Meshtastic хорошая связность и поэтому пакеты с координатами доходят до моста практически из любой точки города (кроме лесов 🙂).
Дальнейшие планы
Хотелось бы допилить нормальную поддержку CBAPRS. Все-таки Meshtastic работает на безлицензионных частотах и логично было бы поддерживать безлицензионный APRS.
Если будет не лень, то может быть даже оформлю PR в апстрим, но это не точно. Скорее всего, в ближайшее время переключусь на другие проекты. Кстати, за другими проектами можно следить в моем Телеграме 🙂