APRX
APRX to wyspecjalizowane oprogramowanie infrastrukturalne dla APRS, przeznaczone przede wszystkim do pracy jako iGate, digipeater albo połączenie obu tych funkcji.
Program działa jako daemon na systemach zgodnych z POSIX, przede wszystkim Linux, BSD i innych systemach uniksowych.
Oficjalne repozytorium:
https://github.com/PhirePhly/aprx/
Strona projektu:
https://thelifeofkenneth.com/aprx/
APRX został napisany w języku C i od początku projektowano go jako lekkie oprogramowanie przeznaczone do ciągłej pracy infrastrukturalnej.
Nie jest modemem dźwiękowym.
Do komunikacji z radiem wykorzystuje zewnętrzny TNC, modem KISS, interfejs AX.25 systemu operacyjnego lub inne obsługiwane źródło ramek.
Typowa instalacja może wyglądać tak:
Radio |TNC / modem KISS |APRX |APRS-ISalbo jako digipeater:
Radio |TNC / modem |APRX |RadioW bardziej rozbudowanych instalacjach APRX może jednocześnie obsługiwać wiele odbiorników, nadajników i kanałów.
Autorzy i historia projektu
Autorem pierwszej i drugiej generacji APRX był Matti Aarnio OH2MQK.
Kod rozwijany przez Mattiego pochodzi z okresu:
2007-2014W nagłówkach źródeł APRX opisany jest jako:
2nd generation APRS iGate and digiOd 2014 roku opiekę nad projektem i dalszy rozwój przejął Kenneth W. Finnegan W6KWF.
Obecne repozytorium projektu:
https://github.com/PhirePhly/aprx/
zawiera kod obu etapów rozwoju.
APRX jest projektem dojrzałym. Tempo zmian jest obecnie znacznie mniejsze niż w przypadku nowych projektów, ale oprogramowanie nadal znajduje się w dystrybucjach Linuksa i jest wykorzystywane w działających instalacjach APRS.
Pakiet APRX 2.9.1 znajduje się między innymi w Debianie.
Filozofia APRX
Jednym z podstawowych założeń APRX było stworzenie programu infrastrukturalnego o małych wymaganiach.
Kod źródłowy opisuje projekt jako rozwiązanie mające możliwie niewiele zależności poza standardową biblioteką systemową UNIX.
Dzięki temu APRX dobrze nadaje się do pracy na:
- niewielkich komputerach,
- routerach,
- urządzeniach embedded z Linuxem,
- Raspberry Pi,
- starszych komputerach PC,
- serwerach działających całodobowo.
Program nie wymaga środowiska graficznego.
Typowa praca wygląda po prostu tak:
system |aprx daemon |/etc/aprx.confAPRX nie jest modemem
To ważne rozróżnienie.
APRX nie dekoduje AFSK z karty dźwiękowej.
Potrzebuje źródła gotowych ramek AX.25.
Może nim być na przykład:
Radio |VP-Digi |KISS |APRXalbo:
Radio |Dire Wolf |KISS |APRXlub klasyczny sprzętowy TNC.
APRX odpowiada za:
- routing ramek,
- digipeating,
- iGate,
- APRS-IS,
- filtrowanie,
- beacony,
- telemetrię,
- logikę wielu interfejsów.
Modem odpowiada natomiast za warstwę radiową.
RX iGate
Jednym z najczęstszych zastosowań APRX jest receive-only iGate.
W takim układzie:
RF |Radio |TNC |APRX |APRS-ISramki odebrane drogą radiową są przekazywane do APRS-IS.
Minimalna konfiguracja wymaga przede wszystkim:
- własnego znaku,
- passcode APRS-IS,
- serwera APRS-IS,
- interfejsu radiowego.
Przykładowy blok APRS-IS:
<aprsis> passcode 12345 server rotate.aprs2.net</aprsis>APRX może więc realizować prosty iGate bez funkcji nadawania na RF.
TX iGate
APRX obsługuje również transmisję z APRS-IS na RF.
Pozwala to zbudować pełny, dwukierunkowy iGate.
Schemat:
APRS-IS | v APRX | v RFTX-iGate nie powinien jednak retransmitować na radio całego ruchu z APRS-IS.
APRX umożliwia ograniczanie i filtrowanie takiego ruchu.
Źródło APRSIS może być zdefiniowane w sekcji digipeatera jako osobne źródło z typem:
relay-type third-partyMożna na nim zastosować również:
- filtrowanie,
- rate limiting,
- viscous delay.
To pozwala bardziej precyzyjnie kontrolować ruch kierowany z Internetu na kanał radiowy.
Digipeater
APRX posiada wbudowany rozbudowany digipeater.
Obsługuje między innymi klasyczny mechanizm:
WIDEn-Noraz zwykłe aliasy AX.25.
Jedna sekcja digipeatera posiada jeden nadajnik, ale może przyjmować pakiety z wielu źródeł.
Przykład architektury:
RX1 ----\ \RX2 ------> APRX ---> TX /RX3 ----/Pozwala to budować systemy z:
- kilkoma odbiornikami,
- receiver diversity,
- osobnymi antenami kierunkowymi,
- różnymi kanałami,
- wspólnym nadajnikiem.
New-N
APRX obsługuje współczesny mechanizm APRS New-N.
Może realizować między innymi ścieżki:
WIDE1-1WIDE2-1WIDE2-2Konfiguracja pozwala określić maksymalną liczbę żądanych oraz wykonanych przeskoków.
Można również definiować własne klucze aliasów.
Viscous digipeating
Jedną z bardziej charakterystycznych funkcji APRX jest viscous digipeating.
Digipeater nie musi retransmitować pakietu natychmiast. Najpierw czeka przez krótki czas.
Jeżeli w tym czasie usłyszy, że pakiet został już retransmitowany przez inną stację, może anulować własną transmisję.
odbiór pakietu | vkrótkie oczekiwanie | +---- pakiet usłyszany ponownie ---> DROP | +---- brak powtórzenia -----------> TXPozwala to ograniczyć liczbę duplikatów w obszarach, gdzie zasięgi kilku digipeaterów nakładają się na siebie.
Wiele odbiorników
APRX został zaprojektowany również z myślą o rozbudowanych węzłach.
Może odbierać ramki jednocześnie z wielu interfejsów.
Radio RX North ---> TNC ---\ \Radio RX South ---> TNC ----> APRX ---> Radio TX /Radio RX Local ---> TNC ---/W konfiguracji można również grupować interfejsy za pomocą:
igate-groupWiele kanałów
APRX nie jest ograniczony do jednego kanału radiowego.
Można skonfigurować wiele interfejsów i wiele sekcji digipeatera.
Przykładowo:
144.800 MHz ---> APRS432 MHz ---> Packet / APRSinne RF ---> lokalny kanałInterfejsy KISS
APRX może współpracować z klasycznymi TNC po portach szeregowych.
Obsługiwany jest standardowy:
KISSoraz kilka rozszerzeń:
KISSXORSUM / BPQCRCSMACK / CRC16FLEXNETTNC2 monitor mode
APRX może również odbierać dane w formacie:
TNC2czyli tekstowym formacie monitorowym znanym z klasycznych TNC.
Linux AX.25
Na systemach Linux APRX potrafi również korzystać bezpośrednio z interfejsów AX.25 jądra systemu.
Konfiguracja może używać:
ax25-deviceDPRS
APRX posiada również obsługę D-PRS.
Może odbierać dane DPRS i przekształcać je do APRS:
D-PRS -> APRSAPRS-IS
APRX posiada własnego klienta APRS-IS.
Może łączyć się z serwerami Tier2 i obsługiwać wiele definicji serwerów.
Przykładowo:
server rotate.aprs2.netMożliwe jest również używanie filtrów APRS-IS.
filter "m/100"czyli ruch w promieniu 100 km od pozycji stacji.
Filtrowanie ruchu
APRX posiada rozbudowane mechanizmy filtrowania.
Można filtrować między innymi:
- źródło,
- destination,
- ścieżkę,
- payload,
- obszar geograficzny.
Przykład:
filter -b/CALLRate limiting
APRX posiada mechanizmy ograniczania liczby retransmitowanych ramek.
Globalny limit:
ratelimitlimit dla poszczególnych znaków źródłowych:
srcratelimitBeacony
APRX posiada własny generator beaconów.
Może generować między innymi:
- pozycje,
- itemy,
- obiekty,
- surowe ramki APRS,
- dane wczytywane z pliku.
Przykład:
beacon symbol "I&" $myloc comment "Tx-iGate"APRX celowo rozkłada czas transmisji beaconów i lekko losuje interwały, aby zmniejszyć prawdopodobieństwo kolizji.
Telemetria
APRX posiada własny system telemetrii infrastruktury.
Monitorowane są między innymi:
RXDROPTXoraz liczba pakietów i bajtów.
Dane mogą być publikowane jako telemetria APRS.
Erlang monitor
Ciekawym elementem APRX jest wbudowany erlang monitor.
APRX mierzy rzeczywisty ruch na interfejsach i zbiera statystyki w przedziałach:
1 minuta10 minut20 minutDzięki temu można obserwować obciążenie kanału radiowego.
Logowanie
APRX może prowadzić osobne logi między innymi dla:
- odebranych ramek RF,
- połączeń APRS-IS,
- DPRS,
- statystyk erlang.
Przykładowe pliki:
aprx-rf.logaprx.logerlang.logKonfiguracja
Głównym plikiem konfiguracji jest zwykle:
/etc/aprx.confSkładnia przypomina strukturę konfiguracji Apache.
Przykład:
mycall SQ9ABC-1
<aprsis> passcode 12345 server rotate.aprs2.net</aprsis>
<interface> serial-device /dev/ttyUSB0 9600 8n1 KISS</interface>Sekcje konfiguracji obejmują między innymi:
<aprsis><logging><interface><beacon><telemetry><digipeater>APRX z Dire Wolf
Bardzo praktycznym połączeniem jest użycie APRX jako logiki infrastruktury, a zewnętrznego modemu jako warstwy radiowej.
Radio |Dire Wolf |KISS |APRX |APRS-ISDire Wolf zajmuje się demodulacją i modulacją AFSK.
APRX odpowiada za:
- digipeating,
- iGate,
- filtry,
- wiele źródeł,
- telemetrię,
- routing.
APRX ze sprzętowym TNC
Analogicznie można wykorzystać sprzętowe urządzenie KISS:
Radio |VP-Digi / TNC-X / inne TNC |KISS |APRXNiewielkie wymagania
APRX napisany jest w C i nie posiada interfejsu graficznego.
Dobrze nadaje się do pracy:
- na Raspberry Pi,
- na małych komputerach x86,
- na starszym sprzęcie,
- na urządzeniach embedded z Linuxem,
- w maszynach wirtualnych.
Stabilność i dojrzałość
APRX jest projektem o długiej historii.
Obecna linia 2.9.1 znajduje się nadal w pakietach Debiana.
Projekt należy obecnie traktować przede wszystkim jako dojrzałe oprogramowanie infrastrukturalne, a nie szybko rozwijającą się aplikację.
Czego APRX nie robi?
APRX nie jest:
- modemem dźwiękowym,
- graficznym klientem APRS,
- mapą APRS,
- programem do śledzenia stacji,
- aplikacją operatorską do codziennej obsługi wiadomości.
Jego miejsce jest przede wszystkim w infrastrukturze.
radio |modem / TNC |APRX |logika infrastruktury APRS |APRS-IS / RFDla kogo jest APRX?
APRX dobrze sprawdzi się, gdy potrzebny jest:
- RX iGate,
- TX iGate,
- digipeater,
- połączony digi + iGate,
- węzeł z wieloma odbiornikami,
- instalacja z kilkoma interfejsami radiowymi,
- routing pomiędzy portami,
- filtrowanie ruchu,
- telemetria infrastruktury,
- bardzo lekki daemon działający 24/7.
Licencja
APRX jest oprogramowaniem open source.
Repozytorium projektu udostępniane jest na licencji:
BSD 3-ClausePodsumowanie
APRX jest jednym z klasycznych programów infrastrukturalnych świata APRS.
Jego największą siłą jest możliwość zbudowania z jednego procesu całego węzła:
wiele odbiorników | v APRX / \ digi iGate \ / RF / APRS-ISProgram łączy:
- RX iGate,
- TX iGate,
- New-N digipeating,
- viscous digipeating,
- wiele interfejsów,
- KISS i Linux AX.25,
- filtrowanie,
- rate limiting,
- beacony,
- telemetrię,
- monitoring obciążenia kanału,
- DPRS,
- APRS-IS.
Do tego pozostaje niewielkim daemonem napisanym w C, który nie wymaga środowiska graficznego ani rozbudowanego systemu.
Dokumentacja
Najważniejsze źródła:
- repozytorium: https://github.com/PhirePhly/aprx/
- strona projektu: https://thelifeofkenneth.com/aprx/
- przykładowa konfiguracja: https://github.com/PhirePhly/aprx/blob/master/aprx.conf.in
- rozbudowana konfiguracja: https://github.com/PhirePhly/aprx/blob/master/aprx-complex.conf.in
- Debian Sources: https://sources.debian.org/src/aprx/
