Продолжаю рассказывать про мой любимый APRS. В прошлой статье я кратко упоминал APRS-IS и интернет-шлюзы, а в этой статье я расскажу как настроить свой такой шлюз.
Зачем?
Интернет шлюзы увеличивают покрытие сети APRS, а также позволяют взаимодействовать с сервисами в интернете. Например, через ближайший APRS IGate можно отправить email со своей радиостанции, или же можно управлять умным домом. И все это по радио и без мобильного интернета.
А еще интернет-шлюзы пересылают маяки с координатами в APRS-IS, после чего получаются вот такие GPS-треки на карте:
Но все эти плюшки доступны, только если рядом с вами есть хоть один APRS IGate. А если нет, то просто следуйте рецепту ниже 🙂
Из чего сделать APRS IGate
Самый простой и дешевый шлюз можно собрать из SDR-приемника и любого компьютера. Я использую Raspberry Pi Model B — самая первая версия, по сути уже ретротехника 🙂 Вместо Raspberry Pi можно взять какой-нибудь Orange Pi, но вообще подойдет любой старый системник или ноутбук, лишь бы на него можно было накатить какой-нибудь Linux.
SDR я взял на Али, но комплектная антенна оказалась совсем грустной. Вместо нее я взял недорогую ТВ антенну, которая на удивление неплохо работает:
Такой шлюз работает только на прием (RX only IGate), то есть пакеты из APRS-IS не будут ретранслироваться по радио. Да, было бы лучше сделать двусторонний шлюз, но это сложнее и дороже. При этом приемный шлюз лучше, чем вообще никакого.
В итоге, если вы собираете APRS IGate с нуля, то вам понадобятся:
- Raspberry Pi или любой другой одноплатник. В этой инструкции я описываю настройку на базе дистрибутива DietPi, поэтому если вы не уверены, какой одноплатник подойдет, то можно просто посмотреть какие устройства поддерживаются DietPi.
- Блок питания (телефонная зарядка на 2-3 ампера).
- SD-карта.
- SDR-приемник.
- Антенна, если комплектная не очень (а они обычно не очень).
Если раздобудете оригинальный RTL-SDR, то в комплекте с ним идут неплохие «усы» с присоской. Хотя примерно то же самое можно получить и из ТВ «усов». - Переходники, разъемы для антенны.
Установка DietPi
Я здесь не буду подробно описывать процесс установки DietPi, потому что на официальном сайте уже есть детальная инструкция. Но если кратко, то вам понадобится:
- Скачать подходящий образ DietPi для вашего одноплатника. Есть также образы для виртуалок.
- Далее загруженный образ нужно записать на SD-карту и вставить ее в компьютер.
- После загрузки операционной системы нужно настроить доступ в интернет. Если одноплатник подключен к роутеру кабелем, а не по Wi-Fi, то интернет и так должен работать из коробки.
- Так же нужно разобраться с удаленным доступом и залогиниться в консоли.
Настройка 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
— произвольный комментарий.
Тестирование
Запустим все вместе, чтобы проверить работоспособность шлюза:
rtl_fm -f 144.800M | direwolf -t 0 -c /etc/direwolf.conf -r 24000 -
Через несколько секунд координаты вашего шлюза должны появиться на карте — значит Direwolf подключился к серверу APRS-IS и работает:
А для проверки приемника, отправьте маяк с любой доступной радиостанции. В логах должно появиться что-то типа такого:
Так же вы можете отправить любое сообщение на 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
В конце остается только выполнить:
Приватность в APRS
Если вы не хотите, чтобы ваш домашний адрес стал известен всему интернету, то здесь есть пара вариантов.
В PBEACON
можно указать дополнительный параметр ambiguity
, который немного округлит координаты шлюза:
В итоге вместо конкретной точки в сеть будет передаваться только информация о секторе, где находится ваш шлюз.
Но это замаскирует только координаты самого шлюза. Если вы регулярно используете APRS, то на карте будут видны GPS-треки, которые начинаются и заканчиваются прямо у вашего дома 🙂
Можно было бы выключать радиостанцию рядом с домом, только об этом нужно постоянно помнить. Поэтому вместо выключения рации имеет смысл задать фильтр, чтобы Direwolf игнорировал любые маяки рядом с вашим домом и не ретранслировал их в APRS-IS:
Правда такой фильтр будет работать только на вашем шлюзе и сосед-радиолюбитель все равно сможет узнать, где вы живете, но хотя бы эта информация не будет ретранслироваться в интернет.
Заключение
Так как это канал про аниме блог про умный дом, то я бы еще хотел рассказать про интеграцию APRS в Home Assistant и про управление умным домом по APRS, но размер статьи уже вышел из-под контроля 🙂 Поэтому про это в другой раз.
P.S. Про выбор частоты
Везде в примерах я использовал 144.800МГц — это частота APRS в двухметровом диапазоне для первого региона IARU, но сам я использую APRS на 70-ке. В диапазоне 70 см для APRS выделена частота 432.500 МГц, которая менее популярна по сравнению с 144.800 МГц, но в плотной застройке на 70-ке больше дальность.
Так же на 70 см можно использовать антенну покороче, что актуально для носимых радеек.