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.
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:
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.
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.
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.
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/