Мост из Meshtastic в APRS

Мост из Meshtastic в APRS

Если вы нашли эту статью, то, скорее всего, вы уже знаете что такое APRS. А если нет, то у меня есть обзорная статья. С Meshtastic вы тоже, скорее всего, знакомы, а если нет, то... в моем блоге ничего про Meshtastic нет 🙃

А если ОБРУШЕНИЕ? Управление умным домом через радиочат #meshtastic #радио #lora #shorts
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, подключенная к Raspberry Pi

Маппинг данных из Meshtastic в APRS

Прежде чем засесть за написание плагина, нужно было разобраться с радиолюбительскими позывными. Meshtastic работает на безлицензионных частотах и в качестве имени ноды может быть прописано все что угодно, но все что угодно в APRS передавать нельзя — только официальные позывные. Плюс не понятно как сделать настраиваемые значок и комментарий, которые нужны для APRS, но отсутствуют в Meshtastic.

Можно было бы сделать все так же, как и в плагине для Owntracks: в конфиге прописываем ID ноды Meshtastic и соответствующие ей настройки APRS. Но тогда этим мостом смогут пользоваться только я и те радиолюбители, кого я вручную внесу в конфиг. Не круто.

В мире цифровой радиосвязи существует децентрализованная сеть под названием BrandMeister. Там для включения пересылки координат в APRS-IS достаточно вбить настройки в панели управления BrandMeister:

SelfCare в BraindMeister
Источник: qsy.by

Но реализовывать что-то такое же мне было лень. В итоге я решил, что позывной вместе с настройками APRS можно запихнуть прям в имя ноды.

И так сойдет

Длинные имена криво отображаются в приложении, а еще имена ограничены по длине, но чего-то получше я так и не придумал.

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

N0CALL-12 +APRS/[Comment
N0CALL-12 это позывной и SSID; +APRS — просто маркер (так шлюз определяет какие ноды пересылать в APRS-IS); /[ — APRS значок, Comment — опциональный комментарий.

APRS плагин для Meshtastic Bridge

С маппингом данных схема понятна, осталось только это все воплотить в жизнь. Не мудрствуя лукаво, я форкнул Meshtastic Bridge и дописал плагин для APRS. Код сыроват, но для прототипа сойдет. И вообще я блогер, а не программист 😉

Принцип работы плагина такой:

  1. Стационарная нода принимает пакеты с координатами от других нод в сети (трекеров);
  2. Если это координаты от трекера, у которого в имени есть позывной, +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/>

Карта в XASTIR

Дополнительно можно указать комментарий. Обычно в комментарии указывают свою вызывную частоту (это если у вас с собой есть еще и рация):

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 в апстрим, но это не точно. Скорее всего, в ближайшее время переключусь на другие проекты. Кстати, за другими проектами можно следить в моем Телеграме 🙂

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.