APRS iGate вместе с webSDR-приемником
В Николаеве работает webSDR-приемник 2метрового диапазона по адресу http://sdr.ur5zhf.com Запущен он на базе OpenWebRX приложения. Подробности настройки можно найти на сайте с исходным кодом https://github.com/simonyiszk/openwebrx
Нас же интересует возможность использования одного sdr-приемника для разных нужд одновременно с работой webSDR сайта. Сегодня попробуем сделать APRS iGate
К счатью ребята из OpenWebRX сделали все правильно и используют микросерверную архитекутру приложения. Если вкратце то софте запускается сервер который потсоединяется по usb к sdr-приемнику и отдает сырые данные по через адрес 127.0.0.1:4951
с помощью netcat
, а потом для каждого клиента создается новое соединение в котором декодируется поток в аудиосигнал.
Серверная часть состоит из 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 за конфигурацией. Я сохранил его в домашней папке
```config
#
# 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 пакетов.
