Uwaga: Ten wpis ma nowszą wersję – nowe wersje programów i znacznie ułatwiona instalacja: https://blog.jokielowie.com/en/2017/01/sledzimy-samoloty-cz-2-ads-b-i-mlat-najtanszy-odbiornik-dla-flightaware-oraz-flightradar-24
Poprzednio podzieliłem się z Wami hobbystycznym komputerem Raspberry Pi za przysłowiowe grosze. O ile sami jeszcze nie uczycie się na nim Pythona, albo nie gracie w Minecraft – albo nawet lepiej – już się tym znudziliście, mam dla was połączenie kilku innych hobby, a wszystko to dzięki doposażeniu naszego Pi w odbiornik/dongle DVB-T/DAB. Celem jest uzyskanie bardzo taniej platformy do odbioru i przekazywania informacji o przelatujących samolotach – dla siebie i dla FlightRadar24, za co dostaniemy darmowy dostęp do wersji premium. Zanim przejdziemy do techniki – o jakie hobby chodzi ?
Jak widać ma to wiele wspólnego z HAM Radio, krótkofalarstwem i „modelarstwem”. Przed erą Internetu popularne, potem zapomniane – dziś dzięki łatwemu dostępowi do elektroniki hobbystycznej – przeżywającej często drugą młodość. Niemniej pamiętajmy, że nie NADAJEMY, a więc nie potrzebujemy licencji krótkofalarskiej, nie musimy też stawiać nadajników. Czy potrzebujemy więc specjalistycznego sprzętu ? Nie! Dzięki pracom nad sterownikami do dongle z chipsetem Realtek’a (DVB-T, DAB czy FM) na USB Antti Palosaari, odkrył że pozwalają one przekazać dowolną transmisję radiową, tak aby ją odpowiednio zinterpretować na komputerze – innymi słowy pozwalają na demodulację odebranego z dowolnej częstotliwości sygnału przez oprogramowanie (aplikację).
Dongle DVB-T – możemy znaleźć wiele na Allegro, Ebay czy też stacjonarnych sklepach, ważne aby posiadał odpowiedni tuner. Najpierw upewniamy się, że nasz Raspbian pracuje z jądrem co najmniej 3.6.11+. Wydajemy komendę:
root@raspberrypi:~# uname -a
Powinna ona zwrócić: (6.x.yz też jest OK – po prostu powyżej 3.6.11+):
Linux raspberrypi 3.6.11+ #385 PREEMPT Fri Mar 1 21:53:22 GMT 2013 armv6l GNU/Linux.
Jeśli mamy starsze jądro systemu – w prosty sposób uaktualniamy je przez komednę:
root@raspberrypi:~# rpi-update
Po ponownym uruchomieniu powinniśmy już mieć najnowsze jądro
Włączamy naszego dongla do portu USB, i piszemy:
root@raspberrypi:~# dmesg | grep RTL
powinniśmy otrzymać:
[ 3.452787] usb 1-1.3: Product: RTL2838UHIDIR.
Oznacza to, że nasz dongle został rozpoznany. Nie zapomnijmy podłączyć owej małej anteny dostarczanej z urządzeniem i umieścić jej w pobliżu okna (jeśli możemy nawet na balkonie, podstawka anteny jest magnetyczna). Na załączonym „patyku” powinniśmy odebrać transmisję w granicach 50 do nawet 80km od naszej lokalizacji. Częstotliwość transponderów ADS-B 1090MHz jest dość mocno tłumiona, przy zachmurzeniu zasięg może zmniejszyć się do 30-40km. Na początek taka antena wystarczy, ale potem warto zagadnąć znajomego krótkofalowca – jak powinna wyglądać antena aby odbierać dane w promieniu do nawet 200km. Przygotujcie się na terminy takie jak impedancja oraz Ohm.
Instalujemy kilka pakietów potrzebnych do skompilowania programów służących do dekodowania wiadomości z ADS-B:
apt-get install cmake build-essential git libusb-1.0-0-dev pkg-config
Teraz pobieramy dzięki git pakiet rtl-sdr. Podobnie jeśli jest to Gentoo, Ubuntu czy ArchLinux. Dla Raspbian/Raspbery Pi OS wydajemy kolejno komendy::
sudo su -
git clone git://git.osmocom.org/rtl-sdr.git
mkdir rtl-sdr/build
cd rtl-sdr/build
cmake ../
make
make install
ldconfig
Spowoduje to pobranie niezbędnych plików i rozpoczęcie kompilacji (kompilacja, łączenie itp.). Jeśli to się nie powiedzie – wpisz swój błąd w komentarzach. Przetestujmy naszą bibliotekę rtl_sdr (najprawdopodobniej to się nie powiedzie, ale czytaj dalej):
pi@raspberrypi ~ $ rtl_test
Found 1 device(s):
0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
Reading samples in async mode...
Ponieważ większość nowych jąder posiada już sterowniki do popularnych dongli DVB-T prawie z pewnością trzeba będzie utworzyć plik, który zapobiegnie wczytaniu sterowników dla trybu odbioru DVB, ponieważ my chcemy użyć trybu bezpośredniej komunikacji z urządzeniem. W tym celu należy stworzyć plik:
/etc/modprobe.d/rtl_sdr-blacklist.conf
który informuje system o zablokowaniu ładowania następujących modułów przy uruchamianiu systemu:
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
Aby nie komplikować – sugeruję teraz ponowne uruchmienie Raspberry Pi.
eśli wreszcie działa – odkładamy rtl_sdr na półkę i pobieramy następny program służący do interpretowania i wyświetlania danych z przelatujących samolotów, autora Salvatore Sanfilippo – dump1090:
git clone git://github.com/antirez/dump1090.git
cd dump1090
make
Teraz wystarczy już tylko wydać:
./dump1090 --interactive --net
które - jeśli antena poprawnie odbiera sygnał - powinno pokazać podobną tabelę do poniższego przykładu:
Hex Flight Altitude Speed Lat Lon Track Messages Seen .
--------------------------------------------------------------------------------
47340d WZZ106 37000 458 50.794 16.537 103 184 0 sec
3c56ab CLS203 38025 449 49.975 17.407 274 303 2 sec
47340e WZZ52N 36000 446 50.651 17.662 340 1064 0 sec
Tak więc ciągu kilku minut można już uzyskać niezły efekt na dostarczonej do dongla antenie!
Yeah it works just using this little antenna! But how to display that in some fancy way ? Let’s choose a very nice and well maintained VirtualRadar, which works using .NET 3.5 in Windows or with mono on Linux
After instalaltion we should change the protocol to BaseStation, and in network options we set our IP address of Raspberry Pi running dum1090 (here it’s 10.0.0.212), with default port of 30003.
VirtualRadar shows the data using Google Maps and local webpage, so start your fav browser and enter: http://127.0.0.1:8080/VirtualRadar/GoogleMap.htm
Let’s share the data for fun and profit! Download always updated fr24feed_arm-le_225s and register on Flight Radar 24 webpage to get the key. Type it as HERETYPETHEKEY:
#export FR24AUTHIP=83.140.247.20
fr24feed_arm-le_225s --fr24key=HERETYPETHEKEY
If it’s correctly connecting – it will look like this:
[i]sent 1 planes in 1 packets
[n]pinging the server
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
[i]sent 1 planes in 1 packets
And after a short while you will get your premium access – confirm you’re feedeing the data. dump1090 works now both for our VirtualRadar and simultaneously for Flight Radar 24
Our software should be able to run during startup, and we should monitor if they are working, so let’s start by installing the screen program
sudo apt-get install screen
Then we will tell Pi to periodically check if our software is running – using the system scheduler – cron, while we can see how they are doing by using screen:
On the console:
crontab -e
type in the editor, and replace the values in caps:
#FR24AUTHIP=83.140.247.20
*/1 * * * * if [ `/bin/ps a | /bin/grep dump1090 | /bin/grep -v grep | wc -l` -gt 0 ]; then echo "dump1090 dziala"; else screen -dmS dump1090 dump1090 --interactive --net --interactive-rows 5; fi > /home/pi/dump1090.log 2>&1
*/1 * * * * if [ `/bin/ps a | /bin/grep fr24feed_arm-le_233 | /bin/grep -v grep | wc -l` -gt 0 ]; then echo "fr24feed_arm-le_233 dziala"; else screen -dmS fr24feed /usr/local/bin/fr24feed_arm-le_233 --fr24key=TYPEYOURKEYHERE ---lattitude=ENTER --longitude=ENTER; fi > /home/pi/fr24arm-le.log 2>&1
That’s it! It will start at latest in 30 minutes.