Naciśnij ESC, aby zamknąć

ADS-B: Instalacja i konfiguracja odbiornika na Raspberry Pi

Spis treści

Cześć!

Dzisiaj zajmiemy się instalacją oraz wstępną konfiguracją własnego zestawu do odbioru lokalizacji samolotów znajdujących się na niebie za pomocą Raspberry Pi oraz paru akcesoriów, które opiszę w poniżej.

Wstęp do naszego projektu

Poradnik podzielę na kilka etapów – od wstępnej konfiguracji, po przygotowanie systemu, instalację kontenerów Docker na Raspberry Pi, udostępnianie naszych danych do innych portali zajmujących się agregowaniem informacji o lotach.

Czym jest ADS-B?

Zasada Działania Ads-B

ADS-B (Automatic Dependent Surveillance–Broadcast) to system automatycznego nadzoru i przekazywania informacji używany w lotnictwie. Ta technologia umożliwia statkom powietrznym przesyłanie danych, takich jak położenie, prędkość, wysokość i identyfikacja, innym statkom oraz stacjom naziemnym. Opiera się ona na technologii GPS oraz transponderach zamontowanych na pokładzie statków powietrznych.

System ADS-B pracuje na dwóch głównych częstotliwościach: 1090 MHz oraz 978 MHz. Oba pasma są używane w zależności od regionu świata i zastosowania.

W rzeczywistości, większość dużych statków powietrznych jest wyposażona w transpondery ADS-B, pracujące na częstotliwości 1090 MHz, natomiast mniejsze statki powietrzne, szczególnie te operujące w Stanach Zjednoczonych, mogą korzystać z systemu UAT na częstotliwości 978 MHz. Współdziałanie obu pasm ma na celu zwiększenie skuteczności i elastyczności systemu ADS-B w zarządzaniu ruchem powietrznym.

Przygotowanie

Przed przystąpieniem do instalacji systemu odbioru ADS-B, warto solidnie się przygotować. Oto obszerniejszy opis, co było konieczne na podstawie mojej własnej konfiguracji.

Do stworzenia poradnika, będę korzystać z dokumentacji udostępnionej przez zespół SDR-Enthusiasts, który wykonał bardzo dobrą pracę. Serdecznie im dziękuję za udostępnienie tych informacji. W dalszej części poradnika będę także korzystać z ich kontenerów, co ułatwi proces instalacji i konfiguracji.

Lokalizacja

Przy zakładaniu systemu odbioru ADS-B z użyciem Raspberry Pi, pamiętaj o znaczeniu odpowiedniego miejsca do instalacji anteny. Oto kilka wskazówek, które mogą okazać się pomocne.

  • Lokalizacja anteny: Wybierz miejsce, które zapewnia swobodny dostęp antenie do otwartego nieba. Upewnij się, że antena nie będzie przysłonięta przez przeszkody – takie jak drzewa, budynki czy inne obiekty;
  • Unikaj zakłóceń: Umieść antenę z dala od urządzeń generujących zakłócenia elektromagnetyczne, co mogłoby wpłynąć na jakość odbieranych sygnałów;
  • Bezpieczeństwo okablowania: Zapewnij bezpieczne poprowadzenie przewodów od anteny do odbiornika, unikając potencjalnych źródeł uszkodzeń. Zabezpiecz okablowanie przed niekorzystnymi warunkami atmosferycznymi;
  • Optymalna wysokość: Postaraj się umieścić antenę na optymalnej wysokości, aby zminimalizować zakłócenia terenu i poprawić zasięg odbieranych sygnałów;

Biorąc pod uwagę te wskazówki, zdecydowałem się zainstalować antenę na dachu budynku, w którym mieszkam. Cieszę się, że już kilka lat temu przewidziałem, że będzie taka potrzeba i uwzględniłem to podczas budowy osiedla, rozmawiając z deweloperem w sprawie kilku zmian lokatorskich. Jedną z tych zmian było wyprowadzenie przewodu antenowego oraz przewodu sieciowego kat. 6 bezpośrednio z mojego mieszkania na dach.

Dzięki umiejscowieniu anteny na dachu, mam pewność, że zapewniłem jej swobodny dostęp do otwartego nieba. Wykorzystując tę optymalną wysokość, unikam również zakłóceń terenowych, co przyczynia się do poprawy zasięgu odbieranych sygnałów.

Formalności związane z wykorzystywaniem dachu

W przypadku planowania instalacji anteny na dachu budynku mieszkalnego, konieczne jest przestrzeganie formalności związanych z prawem budowlanym, zwłaszcza gdy mamy do czynienia z budynkiem objętym wspólnotą lub spółdzielnią. W związku z tym, aby postawić maszt oraz antenę na dachu, należy podjąć następujące kroki:

  • Zgoda Wspólnoty lub Spółdzielni: Przed przystąpieniem do instalacji, ważne jest uzyskanie zgody zarządu wspólnoty lub spółdzielni mieszkaniowej. Zazwyczaj dachy budynków mieszkalnych są uznawane za wspólne obszary, a decyzje dotyczące ich wykorzystania wymagają zgody wspólnoty mieszkaniowej.
  • Prawo Budowlane: Należy sprawdzić przepisy prawa budowlanego, aby dowiedzieć się, czy instalacja anteny na dachu wymaga uzyskania jakichkolwiek specjalnych pozwoleń czy zgód. W niektórych przypadkach, w zależności od rodzaju anteny i planowanej instalacji, mogą być wymagane dodatkowe formalności.
  • Umowa i Odpowiedzialność: Wspólnota lub spółdzielnia może również zażądać podpisania umowy, która określi warunki korzystania z dachu, prawa i obowiązki związane z instalacją anteny. Warto także omówić kwestie związane z ewentualnymi uszkodzeniami dachu lub innych elementów budynku podczas instalacji.
  • Bezpieczeństwo Konstrukcji: Niezależnie od celu instalacji anteny, maszt powinien być solidny i bezpieczny. Upewnij się, że spełnia wszelkie normy bezpieczeństwa, aby uniknąć ewentualnych szkód czy wypadków.
  • Zgłoszenie do Wspólnoty Mieszkaniowej: Przed przystąpieniem do prac, ważne jest poinformowanie sąsiadów i mieszkańców o planowanej instalacji, a także wysłuchanie ich ewentualnych obaw czy zastrzeżeń. Współpraca z mieszkańcami może przyczynić się do osiągnięcia porozumienia w sprawie instalacji anteny.

Pamiętaj, że w przypadku każdego budynku i wspólnoty mogą obowiązywać różne zasady, dlatego też zawsze warto skonsultować się z zarządem wspólnoty lub spółdzielni oraz skonsultować się z Wydziałem Praw Lokatorów i Utrzymania Zasobów Mieszkaniowych Departamentu Mieszkalnictwa Ministerstwa Rozwoju i Technologii, aby upewnić się, że wszystkie formalności są spełnione.

Tworzenie anteny w prywatnym domostwie zazwyczaj jest bardziej bezproblemowe, ponieważ nie wymaga uzyskania zgody od innych mieszkańców czy instytucji.

Wymagane urządzenia i komponenty

W moim przypadku, abym mógł rozpocząć odbieranie dowolnych informacji przesyłanych przez statki powietrzne, konieczne było posiadanie:

  • Hardware:
    • Raspberry Pi 4B w wersji 2 lub 4 GB,
      • Obecnie możecie już skorzystać z dostępnego w sprzedaży Raspberry Pi 5, jednakże dostępność jego jest bardzo mała. Polecam skorzystać z rpilocator.com, aby zobaczyć gdzie możesz obecnie dostać w rozsądnej cenie urządzenie;
    • Raspberry Pi PoE HAT,
      • Z racji doprowadzenia na dach jednego przewodu sieciowego postanowiłem zasilić Raspberry Pi po PoE w standardzie 802.3af;
      • Zasilany jest z routera Mikrotik RB5009UPr+S+IN;
    • Odbiornik SDR, który zakresem obejmuje częstotliwość 1090 MHz,
      • Odbiornik USB od AirNav ma wbudowany filtr oraz wzmacniacz na wyżej wymienioną częstotliwość – stąd zakup jego był ekonomicznie uzasadniony;
    • Antena zoptymalizowana do pracy na częstotliwości 1090 MHz,
      • Antenę udało mi się kupić w okazyjnej cenie na Allegro, stąd też posłuży mi ona w opisaniu dalej instrukcji;
    • Karta pamięci WD Purple o pojemności 32GB.
      • Wybór karty od Western Digital ma na celu zapewnienie większej niezawodności oraz trwałości. W swoim rozwiązaniu możesz skorzystać z innych producentów kart pamięci przeznaczonych do monitoringu wideo – charakteryzują się one większą trwałością i wyższym TBW (Total Bytes Written);
  • Dodatkowe wyposażenie:

Kilka słów o kartach pamięci

W sekcji dotyczącej sprzętu, omawiam wykorzystywane komponenty. Jeden z ważnych aspektów jest karta pamięci, która jest istotna dla stabilnej pracy Raspberry Pi, szczególnie jeśli jest ono używane przez długi czas i pracuje 24/7.

Istnieje kilka powodów, dlaczego tania karta microSD może nie być odpowiednia dla Raspberry Pi pracującego przez długi czas. Oto kilka merytorycznych powodów:

  1. Trwałość: Tanie karty microSD zwykle nie są przeznaczone do intensywnego użytkowania ciągłego przez długi czas. Praca 24/7 może prowadzić do szybszego zużycia i awarii karty pamięci. W przeciwieństwie do tego, karty takie jak choćby WD Purple czy Kingston Industrial są specjalnie zaprojektowane z myślą o ciągłym użytkowaniu, które wskazują na ich wytrzymałość;

  2. Odporność na warunki atmosferyczne: Raspberry Pi, które pracuje przez całą dobę, może być narażone na różne warunki atmosferyczne, takie jak zmiany temperatury czy wilgotność. Tanie karty microSD mogą być mniej odporne na te warunki, co może prowadzić do wystąpienia awarii. Karty przemysłowe często posiadają lepsze parametry dotyczące odporności na warunki atmosferyczne, gwarantując niezawodność w różnych warunkach.

Oprogramowanie

Aby nasz odbiornik działał efektywnie, skorzystamy z systemu operacyjnego Raspberry Pi OS Lite, pozbawionego środowiska desktopowego. Natomiast polecenia będziemy mu podawać po SSH.

Na systemy operacyjne Microsoft Windows polecam PuTTY, z kolei na systemy operacyjne Apple MacOS polecam Termius.

Instalacja Systemu Operacyjnego

Skorzystaj z oficjalnego instalatora, aby zainstalować Raspberry Pi OS Lite na urządzeniu.

Raspberry Pi Os Website

Oprogramowanie Monitorujące i Udostępniające Dane

Jako oprogramowanie do monitorowania i udostępniania danych ADS-B innym agregatorom, użyjemy Ultrafeeder od SDR-Enthusiasts. Kroki instalacyjne opiszę poniżej, postępując zgodnie z instrukcjami dostarczonymi przez producenta.

Wprowadzenie tego oprogramowania umożliwi efektywne monitorowanie ruchu powietrznego oraz udostępnianie zebranych danych innym portalom działającym w obszarze ADS-B.

Dzięki udostępnieniu sygnału dla platform monitorujących ruch lotniczy, takich jak FlightRadar24, FlightAware czy RadarBox możemy oczekiwać korzyści w postaci bezpłatnych subskrypcji na tych portalach. To umożliwia pełniejsze korzystanie z zaawansowanych funkcji, śledzenie ruchu powietrznego w czasie rzeczywistym oraz dostęp do dodatkowych informacji i statystyk. Udostępnianie danych ADS-B staje się tym samym wymierną inwestycją w rozwijające się społeczności lotnicze, dając jednocześnie dostęp do bardziej zaawansowanych doświadczeń monitorowania ruchu powietrznego.Flightradar24 Add Ads-B Coverage

Zebranie parametrów lokalizacyjnych naszego odbiornika

Aby odpowiednio skonfigurować odbiornik, niezbędne jest zebranie precyzyjnych danych dotyczących jego lokalizacji. Oto kluczowe informacje, które musisz pozyskać:

Wysokość anteny (nad poziomem morza)
  • Aby uzyskać tę informację, odwiedź stronę https://www.freemaptools.com/elevation-finder.htm. Przybliż się pinezką do dokładnego miejsca anteny, a następnie uwzględnij odległość od poziomu gruntu, na którym jest zainstalowana antena.
Szerokość i długość geograficzna anteny (do co najmniej pięciu miejsc po przecinku)
  • Aby uzyskać tę informację, odwiedź https://www.gps-coordinates.net lub https://maps.google.com, przybliż się do dokładnego miejsca anteny i kliknij, aby uzyskać dokładne dane szerokości i długości geograficznej. Alternatywnie możesz skorzystać z podręcznego GPSa.

Podanie precyzyjnych danych lokalizacyjnych stanowi kluczowy krok w efektywnej konfiguracji odbiornika ADS-B. Pamiętaj, aby wprowadzać te informacje z najwyższą dokładnością, co zapewni skuteczne działanie systemu i dostarczy rzetelne dane o ruchu powietrznym.

Instalacja i konfiguracja systemu operacyjnego na Raspberry Pi

Raspberry Pi Imager 

  • Raspberry Pi Device: Wybierz Raspberry Pi 4 (lub Raspberry Pi 5 – w zależności co posiadasz),
  • Operating System: Wybierz Raspberry Pi OS (other), a następnie Raspberry Pi OS Lite (64-bit),
  • Storage: Wybierz swój nośnik pamięci, który podłączyłeś do komputera,
  • Następnie kliknij Next,

Raspberry Pi Imager

  • Po wyświetleniu monitu informacyjnego Use OS customisation, kliknij opcję Edit settings,
  • Dla komputerów z systemem MacOS – Po wyświetleniu następnego monitu z opisem Would you like to prefill the wifi password from the system keychain, wybierz opcję No.
  • Gdy otworzy się okno dostosowywania systemu operacyjnego, przejdź do zakładki General i uzupełnij je następującymi parametrami:
    • Zaznacz Set hostname i wpisz: rpi01
    • Zaznacz Set username and password i wpisz:
      • Username: pi
      • Password: Ustaw swoje własne hasło
    • Zaznacz Set locale settings, a nstępnie ustaw:
      • Time zone: Europe/Warsaw,
      • Keyboard layout: us.
  • Przejdź do kolejnej zakładki Services i zaznacz opcję Enable SSH, pozostawiając Use password authentication.
  • Aby zachować ustawienia, kliknij Save.
  • Następnie wróć do poprzedniego okna Use OS customisation i kliknij Yes, aby zastosować wprowadzone przez Ciebie modyfikacje. 
  • Wyskoczy okno ostrzegawcze informujące, że wszystkie dane na karcie pamięci zostaną bezpowrotnie usunięte. Potwierdź tę czynność. W tym momencie narzędzie Imager sformatuje kartę i zainstaluje na niej system operacyjny wraz z dokonanymi modyfikacjami.

Aby uzyskać informacje o zmianach wprowadzonych w systemie operacyjnym na platformę ARM64, kliknij tutaj.

Raspberry Pi OS

Po zakończeniu procesu instalacji, umieść kartę pamięci w urządzeniu Raspberry Pi. Następnie podłącz je do zasilania oraz do routera lub switcha za pomocą przewodu sieciowego zakończonego końcówką RJ45.

Aktualizacja systemu jest wystarczająca do kontynuowania procesu konfiguracji. Regularne aktualizacje nie tylko zapewniają bezpieczeństwo, lecz także umożliwiają korzystanie z najnowszych funkcji i poprawek, co przekłada się na płynność i efektywność działania urządzenia. Zanim przystąpisz do dalszej konfiguracji, warto zadbać o aktualność oprogramowania w Raspberry Pi OS.

Dodatkowo, w trakcie tego procesu, będziemy dezaktywować funkcje Wi-Fi i Bluetooth.

Aktualizacja systemu i pakietów

  • Uruchom Putty (Windows OS) lub Termius (MacOS), a następnie połącz się ze swoim urządzeniem,
  • Wprowadź poniższą komendę, aby zaktualizować listę pakietów,
sudo apt update
  • Następnie użyj komendy i postępuj zgodnie z instrukcjami, aby zainstalować dostępne aktualizacje.
sudo apt upgrade

Dezaktywacja Wi-Fi oraz Bluetooth

Dezaktywacja modułu Wi-Fi oraz Bluetooth ma na celu zminimalizowanie ewentualnych zakłóceń w środowisku radiowym oraz oszczędność zasobów energetycznych. 

Aby wyłączyć Wi-Fi oraz Bluetooth, możemy to zrobić na dwa sposoby:

  • Sposób 1: Przez rfkill
    • Aby skorzystać z polecenia rfkill, upewnij się, że narzędzie jest zainstalowane. Jeśli nie, zainstaluj je poniższym poleceniem:
sudo apt-get update && sudo apt-get install rfkill
    • Następnie wykonaj poniższe komendy:
# Dezaktywacja Wi-Fi
sudo rfkill block wifi

# Dezaktywacja Bluetooth
sudo rfkill block bluetooth
  • Sposób 2: Przez edycję konfiguracji
    • W pliku konfiguracyjnym /boot/config.txt, dodaj odpowiednie linie, aby wyłączyć Wi-Fi i Bluetooth.
# Dezaktywacja Wi-Fi
sudo echo "dtoverlay=disable-wifi" | sudo tee -a /boot/config.txt

# Dezaktywacja Bluetooth
sudo echo "dtoverlay=disable-bt" | sudo tee -a /boot/config.txt

Po zainstalowaniu narzędzia lub wprowadzeniu zmian w pliku konfiguracyjnym, zaleca się ponowne uruchomienie Raspberry Pi:

sudo reboot

Stały adres IP w LAN poprzez DHCP Reservation

W przypadku home labów, gdzie skomplikowane struktury sieciowe nie są często konieczne, opcja DHCP Reservation dostarcza prostego i efektywnego narzędzia do zarządzania stałymi adresami IP dla kluczowych urządzeń.

Proces konfiguracji rezerwacji adresu IP w serwerze DHCP może się różnić w zależności od producenta routera. Poniżej przedstawiamy ogólny opis tego procesu, a dla potrzeb naszej konfiguracji przyjmujemy, że nasze urządzenie otrzymało rezerwację adresu IP o numerze 192.168.100.10.

  • Logowanie do interfejsu administracyjnego routera:
    • Wejdź w interfejs administracyjny routera poprzez przeglądarkę internetową,
    • Zaloguj się na konto administracyjne,
  • Znalezienie sekcji DHCP:
    • W interfejsie routera znajdź sekcję związaną z DHCP lub LAN Settings
  • Wybór opcji DHCP Reservation:
    • W sekcji DHCP, poszukaj opcji związanej z rezerwacją adresu IP,
  • Dodanie rezerwacji:
    • W przypadku TP-Link, Netgear czy Asus itp.:
      • Wybierz opcję DHCP Reservation lub podobną,
      • Dodaj nową rezerwację, podając adres MAC urządzenia i przypisany adres IP (np. 192.168.100.10)
    • W przypadku MikroTika:
      • Przejdź do sekcji IP > DHCP Server,
      • W zakładce Leases znajdź swoje urządzenie,
      • Kliknij dwukrotnie na wybrane urządzenie,
      • W oknie DHCP Lease wybranego urządzenia, kliknij opcję Copy,
      • W oknie New DHCP Lease ustaw pożądany przez Ciebie adres IP, a następnie zapisz konfigurację klikając Apply, a potem OK.
  • Zrestartuj urządzenie i poczekaj aż Raspberry Pi uzyska nowy adres IP.

Zmiana numeru seryjnego SDRa

Większość urządzeń RTL-SDR jest dostarczana z identycznymi numerami seryjnymi. W przypadku obecności więcej niż jednego urządzenia SDR na naszym systemie, może to prowadzić do potencjalnych nieporozumień. Aby uniknąć takiej sytuacji, zaleca się przypisanie numerów seryjnych SDR zgodnych z częstotliwościami, na których pracują te urządzenia i odbierają komunikaty.

Na potrzeby tego poradnika zakładamy, że SDR używany do odbioru ADS-B Mode-S (1090 MHz) będzie miało numer seryjny 1090.

Jeżeli posiadasz więcej niż jedno urządzenie SDR podłączone do Raspberry Pi – odepnij je i pozostaw tylko ten odpowiedzialny za odbiór 1090 MHz. Następnie wykonaj poniższą komendę.

docker run --rm -it --device /dev/bus/usb --entrypoint rtl_eeprom ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder -s 1090

Powinien zostać wyświetlony następujący komunikat (Twoje dane mogą się nieznacznie różnić, jednak upewnij się, że nowy numer seryjny urządzenia to 1090):

Found 1 device(s):
  0:  Generic RTL2832U
​
Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
​
Current configuration:
__________________________________________
Vendor ID:              0x0bda
Product ID:             0x2832
Manufacturer:           Realtek
Product:                RTL2832U
Serial number:          00001000
Serial number enabled:  yes
IR endpoint enabled:    no
Remote wakeup enabled:  no
__________________________________________
​
New configuration:
__________________________________________
Vendor ID:              0x0bda
Product ID:             0x2832
Manufacturer:           Realtek
Product:                RTL2832U
Serial number:          1090
Serial number enabled:  yes
IR endpoint enabled:    no
Remote wakeup enabled:  no
__________________________________________
Write new configuration to device [y/n]? y
​
Configuration successfully written.
Please replug the device for changes to take effect.

Naciśnij y, aby kontynuować.

Instalacja i konfiguracja oprogramowania na Raspberry Pi

Docker – skrypt od SDR Enthusiasts

Aby ułatwić sobie instalację oraz konfigurację, posłużymy się przygotowanym już wcześniej skryptem docker-install.sh. Skrypt automatycznie sprawdzi i zainstaluje niezbędne komponenty oraz dokona konfiguracji.

Lista wszystkich czynności, które zostaną wykonane możesz przeczytać klikając w link.

  • Aby skorzystać ze skryptu, wprowadź następującą komendę:
bash <(curl -s https://raw.githubusercontent.com/sdr-enthusiasts/docker-install/main/docker-install.sh)
  • W trakcie instalacji skryptu, będziesz otrzymywać informacje na bieżąco dotyczące wykonywanych czynności.
  • Po zakończeniu instalacji, otrzymasz podsumowanie procesu.
  • Następnie, zaleca się zrestartowanie urządzenia.
  • Po restarcie, będziemy kontynuować instalację agenta Portainera.
sudo reboot

Portainer Agent – Zdalne zarządzanie kontenerami

Agent Portainera to narzędzie, które pełni rolę interfejsu pomiędzy Portainerem (platformą do zarządzania kontenerami Docker) a hostem, na którym uruchamiane są kontenery Docker. Agent umożliwia zdalne zarządzanie kontenerami Docker na hostach przez Portainer.

Główne zadania agenta Portainera to:

  • Zarządzanie Kontenerami: Agent pozwala Portainerowi na zdalne uruchamianie, zatrzymywanie, usuwanie i monitorowanie kontenerów Docker na danym hoście.
  • Przesyłanie Informacji o Systemie: Agent zbiera informacje o systemie, takie jak zużycie zasobów, dostępność sieci i inne parametry, a następnie przekazuje je do Portainera, aby użytkownik mógł śledzić stan swoich kontenerów.
  • Aktualizacje Kontenerów: Portainer przy użyciu agenta umożliwia aktualizacje obrazów i kontenerów Docker na wszystkich podłączonych hostach.
  • Bezpieczeństwo: Agent współpracuje z Portainerem w sposób zabezpieczony, umożliwiając bezpieczne zdalne zarządzanie kontenerami bez konieczności otwierania dodatkowych portów na hoście.

Korzystanie z agenta Portainera ułatwia centralizowane i zautomatyzowane zarządzanie kontenerami Docker na wielu hostach z poziomu jednego interfejsu użytkownika.

Aby zainstalować Portainer Agent na Raspberry Pi, wykonaj następujące czynności:

  • Zaloguj się na swoje konto i przejdź do interfejsu administracyjnego.
    • Czy używasz systemu jednokrotnego logowania Authentik? Ułatw sobie proces logowania, integrując Portainera z Authentikiem za pomocą tej instrukcji.

Ekran Logowania Do Portainera

  • W dolnej części lewej strony sekcji Settings, wybierz i kliknij Environments,
  • Kliknij Add environment,

Portainer Add Environment

  • Z listy proponowanych środowisk, wybierz opcję podłączenia Docker Standalone. Następnie kliknij Start Wizzard,

Portainer Environment Wizard

  • Pozostaw zaznaczoną opcję Agent, a następnie skopiuj komendę instalacji agenta na zdalnym urządzeniu,
  • Zaloguj się do Raspberry Pi i wpisz poniższą komendę:
docker run -d \
  -p 9001:9001 \
  --name portainer_agent \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /var/lib/docker/volumes:/var/lib/docker/volumes \
  portainer/agent:2.19.4
  • Poczekaj aż Agent zostanie zainstalowany na zdalnym urządzeniu.
  • Powróć do edycji Quick Setup w Portainerze,
  • W miejscu Name wpisz nazwę hostname zdalnego urządzenia: rpi01
  • Environment address: 192.168.100.10:9001
  • Zatwierdź konfigurację przyciskiem Connect. Po pomyślnym połączeniu ze zdalnym urządzeniem powrócisz do głównego ekranu wyboru środowiska w którym chcesz pracować. 

Przygotowanie środowiska dla ADS-B

Utwórz katalog

Potrzebujemy katalogu, aby umieścić naszą aplikację. Nazwa tego katalogu będzie nazwą naszej aplikacji. W związku z tym proponuję użycie /opt/adsb,:

sudo mkdir -p -m 777 /opt/adsb
cd /opt/adsb

Wygeneruj UUID Twojego odbiornika

UUID (Universally Unique Identifier) to unikalny identyfikator używany do rozpoznawania na różnych serwerach przekazywania danych. W przypadku braku UUID możesz utworzyć nowe, logując się na swoje urządzenie, a następnie wykonaj poniższą komendę:

cat  /proc/sys/kernel/random/uuid

Możesz użyć wynikowego ciągu znaków tej komendy (w formacie 00000000-0000-0000-0000-000000000000) jako swojego UUID. W dalszych konfiguracjach będziesz używać tego samego UUID dla każdego feeder-a swojej stacji.

Utwórz identyfikator panoramy heywhatsthat

Heywhatsthat to strona internetowa, która może generować nakładkę na mapie, pokazując teoretyczny zasięg na podstawie przeszkód i krzywizny ziemi. W lewym górnym rogu strony z panoramą znajdziesz adres URL, który będzie wyglądać tak: https://www.heywhatsthat.com/?view=CW5KV545. Ten kod będzie używany później w instrukcjach konfiguracji.

Aby utworzyć panoramę, wykonaj poniższe czynności:

  • Odwiedź stronę https://heywhatsthat.com/,
  • Kliknij New Panorama,
  • Ustaw dokładną lokalizację swojej anteny,
  • Wprowadź tytuł swojej lokalizacji / anteny,
  • Prześlij żądanie i poczekaj, aż przetwarzanie zostanie ukończone,

Instalacja Ultrafeeder za pomocą Docker Compose w Portainer

Kontener Ultrafeeder stanowi serce naszego odbiornika ADS-B. Odbiera sygnały na częstotliwości 1090 MHz z Twojego SDR-a, demoduluje komunikaty, udostępniając je dla wszystkich innych kontenerów. Utworzymy teraz plik konfiguracyjny w Docker Compose za pomocą Portainera.

  • Z ekranu głównego Portainera, wybierz swoje urządzenie które wcześniej podłączyliśmy agentem.

Portainer Environment

  • Przejdź do sekcji Stacks, następnie Add stack.
    • Name: adsb-feeder
    • Web editor: Wklej poniższą zawartość kodu
version: '3.8'

services:
  ultrafeeder:
  # ultrafeeder combines a number of functions:
  # - it retrieves and decodes 1090MHz Mode A/C/S data from the SDR(s) using Wiedehopf's branch of readsb
  # - it implements a `tar1090` based map on port 80 (mapped to port 8080 on the host)
  # - it includes graph1090 (system statistics website) on http://xxxxx/graphs1090
  # - it sends ADSB data directly (without the need of additional containers) to the
  #   "new" aggregators, and, if desired, also to AdsbExchange
  # - it includes mlat-client to send MLAT data to these aggregators
  # - it includes an MLAT Hub to consolidate MLAT results and make them available to the built-in map and other services

    image: ghcr.io/sdr-enthusiasts/docker-adsb-ultrafeeder
    tty: true
    container_name: ultrafeeder
    hostname: ultrafeeder
    restart: unless-stopped
    device_cgroup_rules:
      - 'c 189:* rwm'
    ports:
      - 8080:80               # to expose the web interface
    environment:
      # --------------------------------------------------
      # general parameters:
      - LOGLEVEL=error
      - TZ=${FEEDER_TZ}
      # --------------------------------------------------
      # SDR related parameters:
      - READSB_DEVICE_TYPE=rtlsdr
      - READSB_RTLSDR_DEVICE=${ADSB_SDR_SERIAL}
      - READSB_RTLSDR_PPM=${ADSB_SDR_PPM}
      #
      # --------------------------------------------------
      # readsb/decoder parameters:
      - READSB_LAT=${FEEDER_LAT}
      - READSB_LON=${FEEDER_LONG}
      - READSB_ALT=${FEEDER_ALT_M}m
      - READSB_GAIN=${ADSB_SDR_GAIN}
      - READSB_RX_LOCATION_ACCURACY=2
      - READSB_STATS_RANGE=true
      #
      # --------------------------------------------------
      # Sources and Aggregator connections:
      # Note - remove the ones you are not using / feeding
      #  Make sure that each line ends with a semicolon ";",  with the
      #  exception of the last line which shouldn't have a ";"
      - ULTRAFEEDER_CONFIG=
          adsb,dump978,30978,uat_in;
          adsb,feed.adsb.fi,30004,beast_reduce_plus_out;
          adsb,in.adsb.lol,30004,beast_reduce_plus_out;
          adsb,feed.airplanes.live,30004,beast_reduce_plus_out;
          adsb,feed.planespotters.net,30004,beast_reduce_plus_out;
          adsb,feed.theairtraffic.com,30004,beast_reduce_plus_out;
          adsb,data.avdelphi.com,24999,beast_reduce_plus_out;
          adsb,skyfeed.hpradar.com,30004,beast_reduce_plus_out;
          adsb,feed.radarplane.com,30001,beast_reduce_plus_out;
          adsb,dati.flyitalyadsb.com,4905,beast_reduce_plus_out;
          mlat,feed.adsb.fi,31090,39000;
          mlat,in.adsb.lol,31090,39001;
          mlat,feed.airplanes.live,31090,39002;
          mlat,mlat.planespotters.net,31090,39003;
          mlat,feed.theairtraffic.com,31090,39004;
          mlat,skyfeed.hpradar.com,31090,39005;
          mlat,feed.radarplane.com,31090,39006;
          mlat,dati.flyitalyadsb.com,30100,39007;
          mlathub,piaware,30105,beast_in;
          mlathub,rbfeeder,30105,beast_in;
          mlathub,radarvirtuel,30105,beast_in;
          mlathub,planewatch,30105,beast_in
      # --------------------------------------------------
      - UUID=${ULTRAFEEDER_UUID}
      - MLAT_USER=${FEEDER_NAME}
      - READSB_FORWARD_MLAT_SBS=true
      #
      # --------------------------------------------------
      # TAR1090 (Map Web Page) parameters:
      - UPDATE_TAR1090=true
      - TAR1090_DEFAULTCENTERLAT=${FEEDER_LAT}
      - TAR1090_DEFAULTCENTERLON=${FEEDER_LONG}
      - TAR1090_MESSAGERATEINTITLE=true
      - TAR1090_PAGETITLE=${FEEDER_NAME}
      - TAR1090_PLANECOUNTINTITLE=true
      - TAR1090_ENABLE_AC_DB=true
      - TAR1090_FLIGHTAWARELINKS=true
      - HEYWHATSTHAT_PANORAMA_ID=${FEEDER_HEYWHATSTHAT_ID}
      - HEYWHATSTHAT_ALTS=${FEEDER_HEYWHATSTHAT_ALTS}
      - TAR1090_SITESHOW=true
      - TAR1090_RANGE_OUTLINE_COLORED_BY_ALTITUDE=true
      - TAR1090_RANGE_OUTLINE_WIDTH=2.0
      - TAR1090_RANGERINGSDISTANCES=50,100,150,200
      - TAR1090_RANGERINGSCOLORS='#1A237E','#0D47A1','#42A5F5','#64B5F6'
      - TAR1090_USEROUTEAPI=true
      #
      # --------------------------------------------------
      # GRAPHS1090 (Decoder and System Status Web Page) parameters:
      - GRAPHS1090_DARKMODE=true
      #
      # --------------------------------------------------
    volumes:
      - /opt/adsb/ultrafeeder/globe_history:/var/globe_history
      - /opt/adsb/ultrafeeder/graphs1090:/var/lib/collectd
      - /proc/diskstats:/proc/diskstats:ro
      - /dev:/dev:ro
    tmpfs:
      - /run:exec,size=256M
      - /tmp:size=128M
      - /var/log:size=32M

Zmienne środowiskowe w Portainerze

  • W powyższym pliku znajduje się kilka parametrów, które mają wartości oznaczone jako ${PARAMETR}. Wartości te są odczytywane z sekcji zmiennych środowiskowych – które opisane są poniżej.
  • Pod edytorem kodu, w sekcji zmiennych środowiskowych (eng: Environment variables), przejdź do Zaawansowanego trybu (eng: Advanced mode).

Advanced Environment Portainer

  • Wklej poniższą zawartość, a podpowiedzi które znajdują się w nawiasach <TEKST> zastąp wartościami według legendy opisanej poniżej:
FEEDER_ALT_FT=<wysokość anteny w stopach>
FEEDER_ALT_M=<wysokość anteny w metrach>
FEEDER_LONG=<szerokość geograficzna>
FEEDER_TZ=<strefa czasowa>
FEEDER_NAME=<nazwa lokalizacji>
ADSB_SDR_SERIAL=1090
ADSB_SDR_GAIN=autogain
ULTRAFEEDER_UUID=<Twój UUID z wcześniejszego kroku>
FEEDER_HEYWHATSTHAT_ID=<Twój ID z heywhatsthat z wcześniejszego kroku>
FEEDER_HEYWHATSTHAT_ALTS=<pożądane altitudy zasięgu teoretycznego>

Legenda:

  • FEEDER_ALT_FT to wysokość anteny nad poziomem morza w stopach,
  • FEEDER_ALT_M to wysokość anteny nad poziomem morza w metrach,
  • FEEDER_LAT to szerokość geograficzna anteny (dostępna również pod powyższym linkiem),
  • FEEDER_LONG to długość geograficzna anteny (dostępna również pod powyższym linkiem),
  • FEEDER_TZ to strefa czasowa w formacie TZ database name,
  • FEEDER_NAME to nazwa lokalizacji. Jest używana tylko w tytule strony internetowej mapy,
  • ADSB_SDR_SERIAL to numer seryjny dongla ADS-B; poprzednie kroki ustawiają to domyślnie na 1090, ale jeśli używasz innego numeru seryjnego, wprowadź go tutaj,
  • ADSB_SDR_GAIN to pożądane wzmocnienie dongla w dB lub autogain, jeśli chcesz, aby oprogramowanie określiło optymalne wzmocnienie,
  • ULTRAFEEDER_UUID to wcześniej wygenerowany UUID,
  • FEEDER_HEYWHATSTHAT_ID to kod z adresu URL wygenerowanego wcześniej,
  • FEEDER_HEYWHATSTHAT_ALTS to lista wysokości w metrach, dla których mapa będzie wyświetlać teoretyczny maksymalny zasięg; powszechnym punktem początkowym są 3000 metrów i 12000 metrów.

Dla przykładu:

FEEDER_ALT_FT=50.524
FEEDER_ALT_M=15.4
FEEDER_LAT=52.16547
FEEDER_LONG=20.96719
FEEDER_TZ=Europe/Warsaw
ADSB_SDR_SERIAL=1090
ADSB_SDR_GAIN=autogain
ADSB_SDR_PPM=1
ULTRAFEEDER_UUID=00000000-0000-0000-0000-000000000000
FEEDER_HEYWHATSTHAT_ID=CW5KV545
FEEDER_HEYWHATSTHAT_ALTS=3000,12000

Aby powrócić do poprzedniego widoku, wybierz opcję Simple mode w Portainerze. W trybie tym Portainer automatycznie przypisze wprowadzone zmienne środowiskowe do kategorii name i value. Jeśli planujesz dodawać kolejne agregatory danych ADS-B do konfiguracji, ułatwi to proces, gdyż będziesz mógł dodawać zmienne, które będą potrzebne w przyszłości.

Wdrożenie Docker Compose do produkcji

Ostatnim krokiem pozostało nam utworzenia środowiska i uruchomienie instalacji. Aby to uczynić, pod sekcją Actions kliknij na Deploy the stack i poczekaj chwilę, aż obrazy kontenerów Docker zostaną pobrane do pamięci urządzenia. 

Jeśli wszystko przebiegnie pomyślnie, w prawym górnym rogu ekranu pojawi się komunikat Success: Stack successfully deployed, a nastepnie w liście kontenerów pojawią się dwa nowo utworzone kontenery.

Na moim Raspberry Pi obecnie znajdują się obecnie aż 12 kontenery odpowiedzialne za udostępnianie danych do agregatorów komunikatów. 🚀

Ultrafeeder po wdrożeniu

Dostęp do danych przez przeglądarkę

Po skonfigurowaniu i uruchomieniu przy użyciu powyższego przykładu, kontener udostępni stronę internetową na porcie 8080 hosta. Oto kilka wygenerowanych stron internetowych:

  • http://IP-ADRES-RPI:8080/ : Mapa tar1090 oraz tabela wszystkich samolotów, które antena wykryła i zdekodowała,
  • http://IP-ADRES-RPI:8080/graphs1090/ : Strona z wykresami i statystykami działania naszego odbiornika.

W jakie miejsca są przekazywane dane ADS-B z mojej stacji?

Jeżeli chcesz dowiedzieć się więcej na temat konkretnych informacji oraz jakim protokołem wysyłane są dane z odbiornika, zajrzyj tutaj do linku. Autorzy SDR-Enthusiasts opisują bardzo precyzyjnie to pytanie wraz z definicją kto jest komercyjnym, a kto non-profitowym agregatorem danych.

Dodatkowe źródła i informacje

Dziękuję, że dotrwałeś do tego miejsca. W celu dalszego zgłębienia tematu i uzyskania szczegółowych informacji, polecam sprawdzenie poniższych linków. Są one wartościowymi źródłami, które zostały wykorzystane podczas opracowywania tego poradnika.

Filip Chochół

Filip Chochol runs two blogs: personal “chochol.io” and together with his girlfriend “Warsaw Travelers” about travel. He specializes in IT resource management and technical support, and has been active in the field of cyber security awareness for almost two years. A proponent of open-source technologies, he previously worked in the film and television industry in the camera division (2013-2021). After hours, he develops interests in smart homes and networking.

Komentarze (6)

  • SpeXsays:

    21/10/2024 at 02:18

    Pytanie, czy jakoś prezentacji danych w serwisach typu flyradar zależy od bezpośredniej widoczności statku z anteną? Pytam, bo w mojej okolicy (Kraków) widuję dziwne problemy z lokalizacją nisko latających statków np. ratownik 6.

    • Filip Chochółsays:

      21/10/2024 at 13:21

      Hejo. Przede wszystkim w ustawieniu anteny zależy wysokość i widoczność nieba. Jak testowałem ustawienie anteny na balkonie – zasięg był dużo gorszy, przez gęstą zabudowę i niskie położenie anteny. A jakie dokładnie problemy masz ze swoją instalacją?

      • SpeXsays:

        06/11/2024 at 21:03

        Ja jeszcze nie mam instalacji, ale z tego co sobie nie raz patrzę to w mojej okolicy jest kłopot z śladami helikopterów. Stąd się zastanawiam, czy sobie nie zrobić odbiornika depesz ADS-B.

  • Gravatar

    Pawelsays:

    26/04/2024 at 11:12

    Ahoj. Mam pytanie, a właściwie kilka odnośnie Twojej instalacji, bo wg podanych przez Ciebie informacji – o ile dobrze rozumiem – to masz jedną antenę na pasmo 118-136 MHz, a kilka odbiorników RTL-SDR, m.in. do ACARS i Airband VHF. Jak zatem dzielisz ten sygnał z jednej anteny na kilka odbiorników? Pozatym jestem ciekawy, dlaczego zdecydowałeś się na odbiornik ADS-B od RadarBoxa, a nie granatowy od FlightAware (jest bardziej chwalony przez użytkowników)? Czy do odbiorników RTL-SDR stosujesz lub planujesz stosować jakieś filtry, wzmacniacze sygnału, rdzenie ferrytowe itd.? Napisz coś o tych dodatkach.

    • Filip Chochółsays:

      26/04/2024 at 13:28

      Cześć! 🙂 Odpowiadając po kolei: Tak, zgodnie z danymi które umieściłem na podstronie o moich feedach – obecnie jest jedna antena od ADS-B, Airband oraz 868 MHz. Sygnał dzielę prostym splitterem, zakupiłem go na aliexpress za jakieś grosze. Może za dwa miesiące wymienię to na aktywny wzmacniacz. W kolejce także są do wymiany średniej jakości dongle SDR.
      Co do odbiornika do ADS-B, decyzja została podyktowana prostym argumentem – był w promocji, wraz z anteną na Amazonie. Cena była na tyle atrakcyjna, że nie zastanawiałem się długo 😉

      Jak przyjdzie czas na wymianę SDRów – opiszę to wszystko w osobnym wpisie. Dodatkowo na razie jeszcze nasłuch ATC warszawskiego lotniska nie został uruchomiony z ograniczeń obciążenia portu PoE Mikrotika. Przy pięciu uruchomionych SDRach przekraczałem dozwolone obciążenie portu.

      Dzieki!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


Ta strona używa Akismet do redukcji spamu. Dowiedz się, w jaki sposób przetwarzane są dane Twoich komentarzy.