Stacja Domowa i DIGI Pomocnicze na APRX, DireWolf i APRSIS32

By | Kwiecień 10, 2021

Po przetestowaniu, skuteczności działania oprogramowania DireWolf. Zachęcony tym jak fajnie to działa. Postanowiłem przygotować krótki opis konfiguracji stacji domowej z funkcjonalnością digipitera pomocniczego, który będzie oparty o to programowe  TNC. Jednocześnie będzie możliwość pracy z tej stacji za pomocą APRSIS32


Do uruchomienia będziemy potrzebować dodatkowej karty muzycznej na USB, w innych opisach w sieci znalazłem polecany model za niecałe 6 dolarów (https://www.amazon.com/external-Adapter-Windows-Microphone-SD-CM-UAUD/dp/B001MSS6CS). Ja użyłem czegoś przypadkowego z allegro.

Karta muzyczna na USB

Karta muzyczna na USB

Na początku rozpoczynamy prace od przygotowania karty SD z obrazem RaspberyPi.
Użyjemy obrazu Raspbian Jessi Lite, a do wgrania obrazu na kartę SD, posłuży program: Win32DiskImager. Procedura jest prosta z menu programu wybieramy plik obrazu, wkładamy kartę SD w czytnik komputera. Gdy karta się wykryje wybieramy odpowiednią literkę napędu karty i klikamy zapisz.

Pierwsze logowanie do RaspberryPi robimy po podłączeniu malinki do monitora, używając zewnętrznej klawiatury. Po zalogowaniu się warto najpierw uruchamić serwer ssh tak by mieć dostęp zdalny do naszego digi, robimy to za pomocą konfiguratora raspberry pi. Łatwiej nam wtedy będzie wklejać komendy kopiowane bezpośrednio z tej strony.

sudo raspi-config

Po uruchomieniu konfiguratora postępujemy tak jak na zrzutach poniżej:

raspi-config-0

Wybieramy interfacing options

 

raspi-config-2

Następnie P2 SSH

raspi-config-3

Zatwierdzamy włączenie serwera ssh

raspi-config-4

Serwer włączony

Po opuszczeniu konfiguratora musimy uaktualnić system, komendy poniżej:

sudo apt-get update
sudo apt-get upgrade

Po wykonaniu  aktualizacji przystępujemy do instalacji direwolfa, na początek instalujemy niezbędne pakiety:

sudo apt-get install libasound2-dev
sudo apt-get install git

Ważne też jest usunięcie pakietów pulseaudio który według opinii twórców DireWolfa może powodować komplikacje, w świeżej instalacji tych pakietów być nie powinno ale dla pewności wykonujemy komendy:

sudo apt-get remove --purge pulseaudio
sudo apt-get autoremove
rm -rf /home/pi/.pulse

Następnie ściągamy i instalujemy pakiet cmake

sudo apt install cmake

Ściągamy źródła DireWolfa do katalogu domowego użytkownika pi:

cd
git clone https://www.github.com/wb2osz/direwolf

Następnie wchodzimy do katalogu (utworzył się pod nazwą direwolf w katalogu /home/pi) ze źródłami i rozpoczynamy kompilację, wydając po kolei następujące komendy:

cd direwolf
mkdir build && cd build
cmake ..
make -j4
sudo make install
make install-conf

Po zakończeniu procesu kompilowania, instalacji i instalacji pliku konfiguracjyjnego, który trwa dość długo, w katalogu domowym użytkownika „pi” pojawi się plik konfiguracyjny direwolf.conf.
Zanim przystąpimy do jego edycji warto sprawdzić czy karta dźwiękowa jest widoczna w systemie:

aplay -l

Powinniśmy zobaczyć mniej więcej coś takiego:

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@raspberrypi:~ $

Używamy karty muzycznej podłączonej do portu USB. I to tę kartę należy skonfigurować w pliku konfiguracyjnym który po instalacji DireWolfa znajduje się w /home/pi/direwolf.conf. Konfigurujemy także pin GPIO który będzie naciskał PTT w radiu za pomocą dodatkowego układu wykonawczego, wydajemy komendę:

sudo pico /home/pi/direwolf.conf

Następnie wewnątrz pliku powinniśmy odnaleźć poniższe wpisy i ustawić je tak jak w przykładzie:

ADEVICE plughw:1,0
ACHANNELS 1
CHANNEL 0
MYCALL SQ9MDD
MODEM 1200
PTT GPIO 25
AGWPORT 8000
KISSPORT 8001
FIX_BITS 0

Resztę wpisów należy wykomentować wstawiając znak „#” na początku linii.

Dzięki takiej konfiguracji DireWolf będzie korzystał z urządzenia 0 na karcie 1.
Wydając polecenie direwolf możemy uruchomić TNC i przetestować dekodowane ramek. Jednocześnie na porcie 8001 jest aktywna usługa TNC w trybie KISS, a na porcie 8000 znajduje się port AGW do którego będziemy mogli podłączyć równolegle aplikację APRSIS32. Podczas dekodowania DireWolf podaje także siłę sygnału audio i ostrzeżenia o przesterowaniu jest to dobry moment by ustawić sobie odpowiedni poziom sygnału audio.

Pracujący soundmodem DireWolf

Pracujący sound modem DireWolf

Konfiguracja DireWolfa jest zasadniczo ukończona, gdyż w naszym scenariuszu wykorzystujemy ten pakiet tylko jako TNC w trybie KISS dla APRX-a oraz AGW dla APRSIS32.

Przechodzimy do instalacji i konfiguracji APRX-a.
Na początek musimy ściągnąć paczkę instalacyjną najnowszej wersji APRX-a którą znajdziemy na stronie:
http://thelifeofkenneth.com/aprx/debs/

Dla ułatwienia robimy to z poziomu raspberrypi :

wget http://thelifeofkenneth.com/aprx/debs/aprx_2.9.0_raspi.deb

Następnie uruchamiamy instalatora:

sudo dpkg -i aprx_2.9.0_raspi.deb

Po pomyślnej instalacji w katalogu /etc znajdziemy plik konfiguracyjny aprx.conf, który powinniśmy edytować.
Na początek wykonamy jego kopię (będzie do czego wracać w razie problemów)

sudo cp /etc/aprx.conf /etc/aprx.conf.oryg

A następnie używając prostego i przyjaznego edytora „pico” rozpoczynamy edycję pliku konfiguracyjnego.
W oknie putty lub bezpośrednio w terminalu raspberrypi wpisujemy:

sudo pico /etc/aprx.conf

By uzyskać przejrzystość pliku wykasowałem z niego wszystkie informacje i skonfigurowałem wszystko po kolei.
Na początek mój znak podstawowy i koordynaty. Znak podstawowy można później używać jak zmiennej w innych miejscach w pliku a koordynaty podane w konfiguracji służą podczas używania fitrów odległości.

mycall  SQ9MDD-3
myloc lat 5215.02N lon 02055.59E

Następnie konfiguruję interface do sieci APRSIS tak by przekazywać automatycznie do niej wszystkie usłyszane ramki. Interfejsu tego będę mógł także użyć jako źródła danych w sekcji digi, ale o tym później.

<aprsis>
  login     $mycall
  passcode  29666
  server    sp.aprs2.net          14580
  filter m/5
</aprsis>

Następna sekcja dotyczy logowania, w moim przypadku normalnie podczas pracy używam tylko pliku aprx-rf.log
w którym mogę na bieżąco podglądać stan pracy stacji. Logujemy do pliku w katalogu tmp gdyż po przełączeniu systemu plików w tryb read-only ten katalog będzie znajdował się w ramdysku.

<logging>
  #pidfile /var/run/aprx.pid
  rflog /tmp/aprx-rf.log
  #aprxlog /var/log/aprx/aprx.log
</logging>

Następnie konfigurujemy interface radiowy czyli w naszym przypadku połączenie z DireWolfem:

<interface>
  tcp-device 127.0.0.1 8001 KISS
  callsign    $mycall
  tx-ok       true
  telem-to-is false
  alias         WIDE,WM,SP
</interface>

We wpisie alias wpisujemy obsługiwane ścieżki dla naszej lokalizacji czyli WIDE,SP oraz lokalny alias powiatowy w moim przypadku WM. Konfigurujemy własny beacon, mile widziane jest poprawne skalkulowanie w nim parametru PHG oraz wpisanie częstotliwości lokalnej dla naszego rejonu tak by podróżujący koledzy wiedzieli gdzie mogą nawiązać łączność.

<beacon>
  beaconmode radio
  cycle-size 30m
  beacon interface $mycall via WIDE2-1 symbol "/-" lat "5215.02N" lon "02055.59E" comment "PHG1004 145.575MHz Rysiek"
</beacon>

Ostatnia sekcja, to konfiguracja digipitera który będzie obsługiwał tylko ramki usłyszane bezpośrednio i nie powtórzone przez regularne digipitery dzięki czemu tak skonfigurowana stacja domowa będzie bardzo dobrym wypełnieniem na mapie białych plam. Wewnątrz sekcji digipitera należy zwrócić uwagę na wpis: viscous-delay 5.
Oznacza to ze nasze digi będzie przetrzymywać usłyszane ramki przez 5 sekund i jeśli w tym czasie ramka nie zostanie powtórzona przez inne digi pomocnicze to zostanie ona nadana.  Jest to szczególnie przydatne dla obsługi ruchu stacji ręcznych pracujących małą mocą. W sekcjach „<wide>” i  „<trace>” wpisujemy odpowiednio aliasy nie trasowane i trasowane.
Kompletna sekcja DIGI wygląda jak poniżej:

<digipeater>
 transmitter   $mycall

  <wide>
   maxreq 3
   maxdone 3
   keys WM,SP
  </wide>

  <trace>
   maxreq 3
   maxdone 3
   keys WIDE
  </trace>

  <source>
   source         $mycall
   relay-type     directonly
   viscous-delay  5
   ratelimit      60 120
   filter m/5
  </source>

</digipeater>

Ostatnia czynność konfiguracyjna to dopisanie do pliku /etc/rc.local (na samym końcu ale powyżej „exit 0”) kilku komend które zapewnią nam automatyczny start usług DireWolf i APRX, otwieramy plik:

sudo pico /etc/rc.local

I wpisujemy to co poniżej:

su -l pi -c direwolf > /dev/null &
aprx

Tak skonfigurowane RaspberryPi należy podłączyć do radia za pomocą interfejsu który opisywałem już tutaj na stronie. Ale zanim to zrobimy musimy przestawić system plików raspberry pi w tryb read-only.  Jest to konieczne gdyż normalna praca w trybie read-write jest podatna na uszkodzenia karty SD. W tym celu skorzystamy z gotowego skryptu. Skrypt ten ściągamy ze gitlaba, znajduje się pod tym adresem: https://gitlab.com/larsfp/rpi-readonly W razie niedostępności tego pliku w oficjalnym repozytorium można go znaleźć także u mnie: http://hamspirit.pl/SQ9MDD/pliki/setup.sh

Wykonujemy po kolei kolejne komendy:

cd
wget -t0 -c https://gitlab.com/larsfp/rpi-readonly/raw/master/setup.sh
sudo chmod 755 setup.sh
sudo ./setup.sh

Gdy skrypt zakonczy pracę restartujemy RaspberryPi i po ponownym zalogowaniu musimy zmodyfikować kilka plików. Najpierw jednak musimy przełączyć system plików w tryb read-write:

sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot

Następnie edytujemy plik : /etc/bash.bashrc

sudo pico /etc/bash.bashrc

I na samym końcu dopisujemy:

# set variable identifying the filesystem you work in (used in the prompt below)
set_bash_prompt(){
    fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p")
    PS1='\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
}
 
alias ro='sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot'
alias rw='sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot'
 
# setup fancy prompt"
PROMPT_COMMAND=set_bash_prompt

Dzięki temu będziemy widzieli czy system plików jest w trybie read-write, czy read-only i za pomocą komendy „ro” lub „rw” będziemy mogli łatwo zmieniać tryb pracy.

Kolejny plik wymagający edycji to /etc/bash.bash_logout który otwieramy:

sudo pico /etc/bash.bash_logout

A nastepnie do środka wklejamy następującą zawartość:

sudo mount -o remount,rw /
history -a
sudo fake-hwclock save
sudo mount -o remount,ro /
sudo mount -o remount,ro /boot

Restartujemy RaspberryPi i po zalogowaniu sprawdzamy czy wszystko działa.

systemready

Uruchomione usługi direwolf i aprx

 

Stacja domowa z funkcją digi pomocniczego jest już gotowa, i będzie działać automatycznie po uruchomieniu. Wskazując naszą lokalizację, dając innym kolegom informacje na temat lokalnej częstotliwości. możemy też wystawiać jakieś przydatne obiekty, na przykład podczas imprez z naszym udziałem itd. Jednakże terminal linuksowy nie jest atrakcyjnym interfejsem do podglądania ruchu w sieci, obserwowania przejeżdżających stacji mobilnych czy też do wysyłania wiadomości. Dlatego użyjemy oprogramowania APRSIS32 jako interfejsu użytkownika. DireWolf w takiej konfiguracji jaką zrobiliśmy udostępnia dwa porty komunikacyjne. Jeden już wykorzystaliśmy do komunikacji z APRX-em a drugi port typu AGW możemy użyć do połączenia z oprogramowaniem APRSIS32, które możemy mieć zainstalowane na innym komputerze, laptopie albo tablecie. Konfiguracja sprowadza się do ustawienia po stronie APRSIS32 nowego portu typ AGW i wpisaniu adresu IP oraz portu: 8000.

Konfigurujemy nowy port

Konfigurujemy nowy port

 

konfiguracja portu agw

konfiguracja portu agw

konfiguracja ip/port

konfiguracja ip/port

APRSIS32 podłączony do DireWolf

APRSIS32 podłączony do DireWolf

 

Na koniec jeszcze spostrzeżenie. Testy porównawcze na specjalnym pliku testowym WA8LMF, które wykonałem, mocno mnie zaskoczyły. Wynik testu nie jest referencyjny gdyż moje źródło sygnału to kiepski laptop jednakże w porównaniu do wyników uzyskanych w tym samym środowisku DireWolf okazał się skuteczniejszy niż inne przetestowane przeze mnie rozwiązania.

Arduino TNC 450 zdekodowanych poprawnie pakietów
Arduino TNC+ 710 zdekodowanych poprawnie pakietów
DireWolf 1005 zdekodowanych poprawnie pakietów

Oznacza to że taka konfiguracja to nie jest produkt zastępczy ale całkiem fajne, dobre i stabilne rozwiązanie.

Przydatne linki:

https://www.raspberrypi.org/downloads/raspbian/
https://sourceforge.net/projects/win32diskimager/
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
https://github.com/wb2osz/direwolf
http://aprsisce.wikidot.com/