APRS iGate разом із webSDR-приймачем

2 хв читання

Архівний запис.

Примітка (2026): webSDR-приймач sdr.ur5zhf.com давно відключений, адреса більше не відкривається. Пост лишаю як архів налаштування.

У Миколаєві тоді працював webSDR-приймач 2-метрового діапазону на sdr.ur5zhf.com. Він працював на застосунку OpenWebRX. Подробиці налаштування є на сайті з вихідним кодом: https://github.com/simonyiszk/openwebrx

Мене ж цікавить, як використати один SDR-приймач для різних задач і не зупиняти при цьому webSDR-сайт. Сьогодні спробуємо зробити APRS iGate.

На щастя, хлопці з OpenWebRX усе зробили правильно: застосунок має мікросервісну архітектуру. Якщо коротко, програма запускає сервер, який підключається до SDR-приймача через USB і за допомогою netcat віддає сирі дані на адресі 127.0.0.1:4951. Потім для кожного клієнта відкривається нове з’єднання, у якому потік декодується в аудіосигнал.

Серверна частина — це bash-команда, яка слухає порт 4951 на локальній адресі.

Клієнтська частина складніша:

nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc --fifo /tmp/openwebrx_pipe_140160755639360_shift_pipe | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr bandpass_fir_fft_cc --fifo /tmp/openwebrx_pipe_140160755639360_bpf_pipe 0.0289618970043 HAMMING | csdr squelch_and_smeter_cc --fifo /tmp/openwebrx_pipe_140160755639360_squelch_pipe --outfifo /tmp/openwebrx_pipe_140160755639360_smeter_pipe 5 1 | csdr fmdemod_quadri_cf | csdr limit_ff | csdr old_fractional_decimator_ff 1.00217687075 | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff 1024 | csdr convert_f_s16 | csdr encode_ima_adpcm_i16_u8

Але принцип простий: nc -v 127.0.0.1 4951 відкриває з’єднання з локальною адресою, а далі через pipe задаються фільтри для DSP-бібліотеки, яка декодує сирі дані. Подробиці про команди є за адресою https://github.com/simonyiszk/csdr

Нам залишається написати команду, яка так само підключиться до сервера з сирими даними, перетворить усе на NFM-аудіо і передасть далі програмі для роботи з APRS. У нашому випадку це DireWolf.

Але спершу треба створити файл sdr.conf, з якого direwolf братиме конфігурацію. Я зберіг його в домашній теці:

#
# Sample configuration for SDR read-only IGate. #
# We might not have an audio output device so set to null.
# We will override the input half on the command line. ADEVICE null null
ADEVICE stdin null
ADEVICE - null

CHANNEL 0

# Put your callsign in place of xxx below.
MYCALL YOUR_CALL

# Pick appropriate servers for your geographical region. #
#       noam.aprs2.net
#       soam.aprs2.net
#       euro.aprs2.net
#       asia.aprs2.net
#       aunz.aprs2.net
#

# Change the following line if you are not in North America.
IGSERVER euro.aprs2.net

# You also need to specify your login name and passcode.
# This is the same passcode you would use with any other IGate # application. Contact the author if you can't figure out
# how to generate the passcode.

IGLOGIN YOUR_CALL 123456

# That's all you need for a receive only IGate which relays
# messages from the local radio channel to the global servers.

А ось команда, яка слухатиме ефір і передаватиме APRS-трафік в інтернет:

nc -v 127.0.0.1 4951 | csdr convert_u8_f | csdr shift_addition_cc 0.1 | csdr fir_decimate_cc 181 0.000828675 HAMMING | csdr fmdemod_quadri_cf | csdr limit_ff | csdr deemphasis_nfm_ff 11025 | csdr fastagc_ff | csdr convert_f_s16 | direwolf -c sdr.conf -r 11025 -D 1 -

Запуск DireWolf

Тепер можна передавати APRS-маячок з радіостанції в машині на частоті 144.800 МГц і бачити таку картинку на http://aprs.fi або в будь-якому іншому сервісі моніторингу APRS-пакетів.

РадіоAPRSSDR