APRS IGate — домашняя станция для приема APRS пакетов

APRS IGate — домашняя станция для приема APRS пакетов

Продолжаю рассказывать про мой любимый APRS. В прошлой статье я кратко упоминал APRS-IS и интернет-шлюзы, а в этой статье я расскажу как настроить свой такой шлюз.

Немного про APRS
Обзор технологии APRS: интеграция APRS с умным домом Home Assistant, шлюз в Telegram и чат-бот поверх APRS. Настройка APRSDroid и PocketPacket.

Зачем?

Интернет шлюзы увеличивают покрытие сети APRS, а также позволяют взаимодействовать с сервисами в интернете. Например, через ближайший APRS IGate можно отправить email со своей радиостанции, или же можно управлять умным домом. И все это по радио и без мобильного интернета.

ℹ️
Статья про управление умным домом по APRS будет чуточку позже.

А еще интернет-шлюзы пересылают маяки с координатами в APRS-IS, после чего получаются вот такие GPS-треки на карте:

Карта APRS
aprs.radiorubka.org

Но все эти плюшки доступны, только если рядом с вами есть хоть один APRS IGate. А если нет, то просто следуйте рецепту ниже 🙂

Из чего сделать APRS IGate

Самый простой и дешевый шлюз можно собрать из SDR-приемника и любого компьютера. Я использую Raspberry Pi Model B — самая первая версия, по сути уже ретротехника 🙂 Вместо Raspberry Pi можно взять какой-нибудь Orange Pi, но вообще подойдет любой старый системник или ноутбук, лишь бы на него можно было накатить какой-нибудь Linux.

APRS IGate из SDR приемника и Raspberry Pi

SDR я взял на Али, но комплектная антенна оказалась совсем грустной. Вместо нее я взял недорогую ТВ антенну, которая на удивление неплохо работает:

ТВ антенна
Примерзла к окну. Закреплена на окне присосками.

Такой шлюз работает только на прием (RX only IGate), то есть пакеты из APRS-IS не будут ретранслироваться по радио. Да, было бы лучше сделать двусторонний шлюз, но это сложнее и дороже. При этом приемный шлюз лучше, чем вообще никакого.

В итоге, если вы собираете APRS IGate с нуля, то вам понадобятся:

  1. Raspberry Pi или любой другой одноплатник. В этой инструкции я описываю настройку на базе дистрибутива DietPi, поэтому если вы не уверены, какой одноплатник подойдет, то можно просто посмотреть какие устройства поддерживаются DietPi.
  2. Блок питания (телефонная зарядка на 2-3 ампера).
  3. SD-карта.
  4. SDR-приемник.
  5. Антенна, если комплектная не очень (а они обычно не очень).
    Если раздобудете оригинальный RTL-SDR, то в комплекте с ним идут неплохие «усы» с присоской. Хотя примерно то же самое можно получить и из ТВ «усов».
  6. Переходники, разъемы для антенны.
⚠️
Так же вам понадобится официальный радиолюбительский позывной.

Установка DietPi

Я здесь не буду подробно описывать процесс установки DietPi, потому что на официальном сайте уже есть детальная инструкция. Но если кратко, то вам понадобится:

  1. Скачать подходящий образ DietPi для вашего одноплатника. Есть также образы для виртуалок.
  2. Далее загруженный образ нужно записать на SD-карту и вставить ее в компьютер.
  3. После загрузки операционной системы нужно настроить доступ в интернет. Если одноплатник подключен к роутеру кабелем, а не по Wi-Fi, то интернет и так должен работать из коробки.
  4. Так же нужно разобраться с удаленным доступом и залогиниться в консоли.

Настройка APRS IGate

Для работы шлюза понадобится установить rtl-sdr и Direwolf:

apt install rtl-sdr direwolf

rtl-sdr это набор утилит для работы с SDR-приемниками, но в контексте APRS нас интересует только rtl_fm. А точнее нас интересует то, что rtl_fm умеет демодулировать FM-сигнал и выдавать аудиопоток на выходе.

Direwolf в свою очередь обрабатывает аудио, декодирует пакеты и пересылает их на один из серверов APRS-IS.

Конфигурация Direwolf

Начнем настройку шлюза с редактирования /etc/direwolf.conf, который нужно заменить вот таким конфигом:

ADEVICE stdin null
ACHANNELS 1
CHANNEL 0

# Вместо N0CALL нужно подставить ваш позывной
MYCALL N0CALL-10
MODEM 1200

AGWPORT 8000
KISSPORT 8001

# Здесь N0CALL так же нужно заменить на позывной — он выступает в роли логина для авторизации на сервере APRS-IS.
# Вместо 00000 нужно подставить пароль, который можно сгенерировать тут:
# https://apps.magicbug.co.uk/passcode/
IGLOGIN N0CALL-10 00000
# Сервер APRS-IS. rotate.aprs2.ru указывает на один из российских серверов.
# Другие региональные серверы можно посмотреть здесь:
# https://www.aprs2.net/
IGSERVER rotate.aprs2.ru

IGTXLIMIT 6 10

# Так как у нас приемный IGate, то сообщаем серверу APRS-IS, чтобы он не ретранслировал нам пакеты от станций в округе.
IGFILTER ""
# Отключаем пересылку пакетов из APRS-IS по радио (передатчика все равно нет).
IGTXVIA 0

# Маяк вашей станции, который будет отображаться на aprs.radiorubka.org и других фронтендах.
PBEACON sendto=IG delay=0:30 every=30:00 symbol="igate" overlay=R lat=59.976543 long=30.320808 freq=144.8 comment="1200bps RX only IGate"

В PBEACON указывается сразу несколько параметров:

  • lat и long это широта и долгота места установки вашего шлюза. Вопрос приватности обсудим чуть ниже.
  • freq показывает другим радиолюбителям на какой частоте работает ваш IGate. В наших краях обычно используется 144.800 МГц.
  • comment — произвольный комментарий.
ℹ️
Частоты APRS для разных регионов можно посмотреть здесь.

Тестирование

Запустим все вместе, чтобы проверить работоспособность шлюза:

rtl_fm -f 144.800M | direwolf -t 0 -c /etc/direwolf.conf -r 24000 -

Через несколько секунд координаты вашего шлюза должны появиться на карте — значит Direwolf подключился к серверу APRS-IS и работает:

APRS IGate на карте

А для проверки приемника, отправьте маяк с любой доступной радиостанции. В логах должно появиться что-то типа такого:

Логи Direwolf

Так же вы можете отправить любое сообщение на UB0JBX-2 и оно отобразится в Telegram-канале @mansmarthome_aprs 🙂

Автозапуск

Но это еще не все, осталось настроить автозапуск. Определим сервис для rtl_fm в файле /etc/systemd/system/rtl-aprs.service:

[Unit]
Description=rtl_fm listening on APRS frequency
Requires=rtl-aprs.socket
After=rtl-aprs.socket

[Service]
User=direwolf
SupplementaryGroups=plugdev
ExecStart=/usr/bin/rtl_fm -f 144.800M
Sockets=rtl-aprs.socket
StandardOutput=fd:rtl-aprs.socket
StandardError=journal

[Install]
WantedBy=multi-user.target

Этот сервис отправляет аудиопоток в сокет, который нужно прописать в /etc/systemd/system/rtl-aprs.socket:

[Unit]
Description=rtl-aprs audio socket
PartOf=rtl-aprs.service

[Socket]
ListenFIFO=%t/rtl-aprs.socket
SocketUser=direwolf
SocketGroup=direwolf
SocketMode=0600
RemoveOnStop=on

Так же нужно немного кастомизировать Direwolf, чтобы он мог читать аудио из нашего сокета. Создадим директорию:

mkdir /etc/systemd/system/direwolf.service.d

И затем в ней добавим файл /etc/systemd/system/direwolf.service.d/override.conf:

[Unit]
Requires=rtl-aprs.socket rtl-aprs.service
After=rtl-aprs.socket rtl-aprs.service

[Service]
ExecStart=
ExecStart=/usr/bin/direwolf -c /etc/direwolf.conf -r 24000 -
Sockets=rtl-aprs.socket
StandardInput=fd:rtl-aprs.socket
StandardOutput=journal
StandardError=journal

В конце остается только выполнить:

systemctl daemon-reload
systemctl enable --now rtl-aprs.service direwolf.service

Чтобы запустить все сервисы и добавить их в автозагрузку.

Приватность в APRS

Если вы не хотите, чтобы ваш домашний адрес стал известен всему интернету, то здесь есть пара вариантов.

В PBEACON можно указать дополнительный параметр ambiguity, который немного округлит координаты шлюза:

PBEACON lat=59.976543 long=30.320808 ambiguity=1 …

Значение параметра указывает на то, сколько цифр после запятой нужно «срезать».

В итоге вместо конкретной точки в сеть будет передаваться только информация о секторе, где находится ваш шлюз.

Но это замаскирует только координаты самого шлюза. Если вы регулярно используете APRS, то на карте будут видны GPS-треки, которые начинаются и заканчиваются прямо у вашего дома 🙂

Можно было бы выключать радиостанцию рядом с домом, только об этом нужно постоянно помнить. Поэтому вместо выключения рации имеет смысл задать фильтр, чтобы Direwolf игнорировал любые маяки рядом с вашим домом и не ретранслировал их в APRS-IS:

FILTER 0 IG ( ! r/59.976543/30.320808/0.1 )

Фильтр маяков в радиусе 0.1 км рядом с заданной точкой.

Правда такой фильтр будет работать только на вашем шлюзе и сосед-радиолюбитель все равно сможет узнать, где вы живете, но хотя бы эта информация не будет ретранслироваться в интернет.

Заключение

Так как это канал про аниме блог про умный дом, то я бы еще хотел рассказать про интеграцию APRS в Home Assistant и про управление умным домом по APRS, но размер статьи уже вышел из-под контроля 🙂 Поэтому про это в другой раз.

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

Оповещения о новых статьях я публикую в Telegram.

P.S. Про выбор частоты

Везде в примерах я использовал 144.800МГц — это частота APRS в двухметровом диапазоне для первого региона IARU, но сам я использую APRS на 70-ке. В диапазоне 70 см для APRS выделена частота 432.500 МГц, которая менее популярна по сравнению с 144.800 МГц, но в плотной застройке на 70-ке больше дальность.

⚠️
Прежде чем что-то передавать на 432.500, ознакомьтесь с требованиями местного законодательства. Например, передача на этой частоте запрещена в радиусе 350 км от центра Москвы (решение ГКРЧ от 15 июля 2010 г.).

Так же на 70 см можно использовать антенну покороче, что актуально для носимых радеек.

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

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

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

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

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