Vliegtuigen spotten met je Raspberry Pi
- May 16, 2024
- 0
Ontvang ADS-B-signalen met dump1090 en een RTL-SDR-stick
Met een Raspberry Pi, een RTL-SDR-stick en een antenne kun je de radiosignalen van vliegtuigen die over je huis heen vliegen oppikken. In deze workshop ga je met de software dump1090 aan de slag en stuur je de signalen ook door naar FlightAware en Flightradar24, zodat je toegang krijgt tot wereldwijde vluchtgegevens.
Koen Vervloesem
Vliegtuigen sturen elke seconde een kort radiosignaal uit met hun positie en andere informatie zoals hun registratienummer, vluchtnummer, snelheid, hoogte en koers. Dat systeem heet Automatic Dependent Surveillance-Broadcast (ADS-B) en is bedoeld om luchtverkeersleiders te helpen. Maar ook jij kunt zelf een grondstation bouwen om ADS-B-signalen te ontvangen en dus informatie verkrijgen over de vliegtuigen die over je huis vliegen. Met de juiste antenne kun je zelfs vliegtuigen spotten van honderden kilometers ver.
Antenne
ADS-B zendt signalen uit op een frequentie van 1090 MHz. In het ideale geval heb je een verticaal gepolariseerde antenne voor deze frequentie en plaats je deze buiten, zo hoog mogelijk. Daarmee kun je gemakkelijk vliegtuigen op het hele grondgebied van Nederland spotten. Maar als je gewoon wilt weten welke vliegtuigen er in je buurt rondvliegen, kan een goedkopere antenne ook, zelfs binnenshuis.
De golflengte van radiosignalen is de lichtsnelheid gedeeld door de frequentie, maar dat is in de lucht. Voor koper en aluminium moet je dat nog vermenigvuldigen met een factor 0,95. Voor 1090 MHz levert dat dus een golflengte van 261,3 mm. Voor een antenne wordt doorgaans een optimale lengte aangeraden van de helft of een kwart van de golflengte. Dat is dus 130,6 mm of 65,3 mm. Je kunt zelf een antenne maken met deze afmetingen, of een bestaande antenne nemen en afknippen op deze lengte.
Ontvanger
Naast een antenne heb je ook een ontvanger nodig. De RTL-SDR (https://www.rtl-sdr.com) is een populaire en veelzijdige dongel die je in een USB-poort steekt en waarop je een antenne aansluit. De RTL-SDR heeft de grootte van een uit de kluiten gewassen USB-stick, en steek je bijvoorbeeld in een USB-poort van een Raspberry Pi. Let wel op: de aluminium behuizing wordt tijdens de werking heet.
De RTL-SDR is ook te koop in een kit samen met een telescopische dipoolantenneset. Om ADS-B te ontvangen, kun je elk van de polen uitschuiven tot 6,6 cm. Positioneer ze in elkaars verlengde, en plaats ze dan verticaal, bijvoorbeeld in het bolscharnier van de meegeleverde driepoot. Het resultaat is niet optimaal voor ADS-B op lange afstand, maar je kunt er zeker in je buurt vliegtuigen mee spotten.
De RTL-SDR is een veelzijdige dongel om radiosignalen op te vangen.
Raspberry Pi
Tot slot heb je nog een Raspberry Pi nodig. Dat hoeft niet het nieuwste model te zijn, want de software is niet zwaar. Installeer hierop Raspberry Pi OS Lite (https://www.raspberrypi.org/software/operating-systems/) door het image op een micro SD-kaartje te schrijven, bijvoorbeeld met Raspberry Pi Imager. Zorg dat je via ssh kunt inloggen door een leeg bestand ssh aan te maken in de bootpartitie van de micro SD-kaart. De eerste keer dat je ingelogd bent, update je de software naar de nieuwste versie:
sudo apt update sudo apt upgrade
Sluit de antenne op de RTL-SDR aan, en sluit daarna de RTL-SDR op een USB-poort aan. Je bent nu klaar om vliegtuigen te spotten.
Installeer dump1090
Een eenvoudig programma om vliegtuigen te spotten met je RTL-SDR is dump1090, waarvan er meerdere forks bestaan. Een van die forks is beschikbaar in de standaardrepository van Raspberry Pi OS en installeer je dan ook eenvoudig:
sudo apt install dump1090-mutability
Je krijgt de vraag om het programma automatisch te starten bij het opstarten van Raspberry Pi OS. Bevestig als je dat wil. Je kunt dit later altijd nog aanpassen met
sudo dpkg-reconfigure dump1090-mutability.
Toegang tot het apparaatbestand
Standaard zal dump1090 waarschijnlijk geen toegang hebben tot het apparaatbestand van je RTL-SDR. Dat kun je nagaan door het logbestand te bekijken:
cat /var/log/dump1090-mutability.log
De foutmelding geeft al de suggestie om een udev-regel aan te maken.
Bekijk eerst eens het configuratiebestand /etc/default/dump1090-mutability. Daarin zie je dat het programma opstart als de gebruiker dump1090. Het is deze gebruiker die we dus toegang moeten geven. Maar toegang tot welk apparaat? Dat kun je bekijken met lsusb. In ons geval zien we dan: Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T Maak dan een bestand /etc/udev/rules.d/20.rtl-sdr.rules met de volgende inhoud aan: SUBSYSTEM==”usb”, ATTRS{idVendor}==”0bda”, ATTRS{idProduct}==”2838″, OWNER=”dump1090″, MODE=”0660″ Dit geeft de gebruiker dump1090 lees- en schrijftoegang tot het USB-apparaat met vendor ID 0bda en product ID 2838. Pas de ID’s aan als lsusb bij jou andere waardes geeft. Ontkoppel de RTL-SDR nu en steek hem weer in de USB-poort. Open daarna het bestand /etc/default/dump1090-mutability nog eens en commentarieer de regel NET_BIND_ADDRESS=”127.0.0.1″ uit door er een hekje # vooraan te plaatsen. Dan luistert dump1090 naar alle interfaces en is de webinterface ook vanaf andere computers bereikbaar. Herstart tot slot dump1090:
sudo systemctl restart dump1090-mutability.service.
Vliegtuigen op de kaart
Surf dan naar http://raspberry.local/dump1090 of het IP-adres dat je aan je Raspberry Pi hebt toegekend. Als alles goed gaat, krijg je nu een kaart te zien met de positie van vliegtuigen in je buurt en rechts een tabel met gedetecteerde vliegtuigen. Zo niet, kijk dan nog eens in het logbestand voor foutmeldingen. Vind je geen foutmeldingen in het logbestand maar toont de webinterface van dump1090 geen vliegtuigen? Dan moet je wellicht een betere antenne aansluiten. Maar wij konden met onze suboptimale antenne binnenshuis gewoon signalen ontvangen van vliegtuigen tot 8 kilometer ver en bij sommige grote vliegtuigen zelfs veel verder.
Als je op een vliegtuig op de kaart klikt, krijg je ook het traject te zien sinds dump1090 de signalen detecteerde. Rechts krijg je dan bovendien meer informatie. Vaak staan er ook een of meerdere links bij naar websites zoals FlightAware (https://flightaware.com), Flightradar24 (https://www.flightradar24.com), FlightStats (https://www.flightstats.com) of PlaneFinder (https://planefinder.net). Daarop krijg je gedetailleerde vluchtinformatie te zien, met de vertrekplaats, bestemming, verwachte aankomsttijd, type vliegtuig enzovoort.
Als je puur geïnteresseerd bent in de vliegtuigen die je boven je ziet vliegen, kun je hier stoppen. Maar je kunt de signalen die dump1090 ontvangt ook doorsturen naar websites zoals FlightAware en Flightradar24. Zo help je deze websites en in ruil krijg je gratis toegang tot al hun data, waarvoor je normaal moet betalen.
Dump1090 ontvangt de signalen van vliegtuigen in je buurt en toont hun locatie op de kaart.
Data doorsturen naar FlightAware
Als je de data van dump1090 met FlightAware deelt, krijg je een gratis Enterprise Account, die normaal $90 per maand kost. Installeer eerst de PiAware-repository:
wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_5.0_all.deb sudo dpkg -i piaware-repository_5.0_all.deb
Update dan de pakketlijsten en installeer PiAware, het programma dat je data naar FlightAware stuurt:
sudo apt update sudo apt install piaware
Maak ondertussen een gratis account aan op https://flightaware.com/account/join/. Zodra PiAware gestart is, bezoek je https://flightaware.com/adsb/piaware/claim om je Raspberry Pi aan je account te koppelen. Normaal staat je Pi al in de lijst, omdat PiAware contact heeft opgenomen met FlightAware, die herkent dat dit hetzelfde publieke IP-adres gebruikt als je bezoek van de website.
Je kunt nu ook via https://flightaware.com/skyaware/ de vliegtuigen zien die je Raspberry Pi ziet. En uiteraard kun je nog altijd vanuit je lokale netwerk de webpagina van dump1090 bezoeken.
Op de pagina waar je je PiAware-ontvanger hebt gekoppeld, vind je ook een link voor je statistieken. Klik op die pagina bovenaan rechts op het tandwiel en pas daar enkele instellingen aan. Als je hier je locatie invoert, kan PiAware ook MLAT (https://flightaware.com/adsb/mlat/) gebruiken. Als een vliegtuig dan zijn locatie niet uitstuurt via ADS-B, maar meerdere grondstations het signaal ontvangen, kan FlightAware de locatie berekenen op basis van de verschillen in tijd van de ontvangen signalen.
FlightAware houdt heel wat statistieken bij over de signalen die je ontvangt.
Dump1090-fork van FlightAware
De mutability-fork van dump1090 die in de standaardrepository van Raspberry Pi OS beschikbaar is, wordt niet meer onderhouden. Zeker in combinatie met FlightAware gebruik je beter de fork die FlightAware bijhoudt (https://github.com/flightaware/dump1090). Verwijder daarom de eerste fork en installeer de tweede, die wordt aangeboden in de PiAware-repository die je hebt geïnstalleerd:
sudo apt remove dump1090-mutability sudo apt install dump1090-fa
Na de installatie is de webinterface beschikbaar op http://raspberry.local:8080 of het IP-adres dat je aan je Raspberry Pi hebt toegekend. Je ziet onmiddellijk dat deze fork meer informatie toont dan de mutability-fork, bijvoorbeeld het type vliegtuig en een rechtstreekse link naar een pagina met foto’s van het vliegtuigtype. Rechtsboven op het tandwieltje krijg je toegang tot enkele instellingen. Als je bijvoorbeeld niet bekend bent met de aeronautische eenheden, kies hier dan het metrische stelsel.
De configuratie van dump1090-fa doe je overigens in het bestand /etc/default/dump1090-fa, maar dat biedt minder mogelijkheden dan dump1090-mutability. Het programma draait net zoals de oudere fork ook onder de gebruiker dump1090, dus je kunt dezelfde udev-regel blijven gebruiken.
Met SkyAware van FlightAware krijg je van overal toegang tot de ADS-B-signalen die je Raspberry Pi opvangt.
Data doorsturen naar Flightradar24
Als je ADS-B-signalen met je Raspberry Pi opvangt, ben je niet beperkt tot één website om je data naar door te sturen. Zelfs als je FlightAware’s fork van dump1090 draait, kun je diezelfde data tegelijk ook naar andere websites sturen. We tonen hier hoe je dat configureert voor Flightradar24, waarna je ook gratis een Business plan ter waarde van €50 per maand krijgt.
Download eerst het script dat de repository van Flightradar24 toevoegt en het uploadscript installeert, en voer het uit:
wget http://repo.feed.flightradar24.com/install_fr24_rpi.sh sudo bash install_fr24_rpi.sh
Maak ondertussen een gratis account aan op Flightradar24. Klik daarvoor op de website bovenaan rechts op ‘Try free for 7 days’ en dan links bij ‘Basic’ op ‘Create account’.
Het installatiescript toont op het einde een wizard om je Raspberry Pi aan Flightradar24 te koppelen. Vul hier het e-mailadres in dat je voor je Flightradar24-account hebt gekozen. In de volgende stap bevestig je gewoon met Enter, want je hebt nog geen sharing key. Bevestig dat je ook wilt deelnemen aan MLAT-berekeningen voor localisatie van vliegtuigen zonder locatiegegevens. Voer daarna de breedtegraad, lengtegraad en hoogte van de antenne in (let op: in feet).
Op het einde laat de wizard weten dat het al een dump1090-installatie detecteert, en dat het automatisch een configuratie kan aanmaken om die gegevens te gebruiken. Bevestig dat je dit wilt. De aangemaakte configuratie is te vinden in /etc/fr24feed.ini. Start daarna de feeder van Flightradar24:
sudo systemctl start fr24feed
Als je nu op de website van Flightradar24 alleen de vliegtuigen wil zien die jouw Raspberry Pi ontvangt, klik je onderaan op ‘Filters’, kies je bij ‘Add Filter’ de optie ‘Radar’ en vul je je radar-id in, die de wizard je toonde en die je ook via e-mail ontvangen hebt. Klik dan op ‘New filter’.
Op dezelfde manier kun je ook scripts van andere websites toevoegen, die allemaal gebruikmaken van de data van je dump1090-installatie. Overweeg bijvoorbeeld ook eens om je data te doneren aan OpenSky Network (https://opensky-network.org), in tegenstelling tot vele andere websites is dit een non-profitorganisatie.
Flightradar24 heeft een overzichtelijke interface om de vliegtuigen op de kaart te tonen.
Vluchtdata op een andere manier gebruiken
De vluchtdata die dump1090-fa registreert, kun je ook op een andere manier gebruiken. Zo worden recent geregistreerde vliegtuigen als json-code aangeboden op http://raspberrypi.local:8080/dump1090-fa/data/aircraft.json. Ook lokaal is het bestand, dat elke seconde een update krijgt, te vinden, namelijk in /run/dump1090-fa/aircraft.json.
Alle json-bestanden en de betekenis van de inhoud is gedocumenteerd op https://github.com/flightaware/dump1090/blob/master/README-json.md. Zo zou je bijvoorbeeld in Node-RED het json-bestand voor vliegtuigen kunnen parsen en er nuttige informatie uit halen. Of je kunt een Python-script schrijven dat vluchtinformatie uit het bestand haalt en berichten naar een mqtt-broker publiceert.
Interessante projecten
Dump1090 maakt de gedecodeerde ADSB-data ook beschikbaar op poort 30003, waar je ze via netcat kunt beluisteren. Elke regel is in SBS1-formaat (BaseStation). Johan Kanflo heeft een script geschreven dat naar deze data luistert en elke seconde informatie over de vluchten op MQTT kan publiceren. Je vindt het in zijn repository https://github.com/kanflo/ADS-B-funhouse onder de naam flighttracker.py.
Bij OpenSky Network kun je ook een database van vliegtuigen, vliegtuigtypes en producenten downloaden (https://opensky-network.org/datasets/metadata/). Dit is handig als je een systeem wil opzetten dat meer informatie uit de ADS-B-boodschappen haalt, maar zonder af te hangen van de API’s van diensten zoals FlightAware.
Een ander interessant project is dat van Arun Venkataswamy. Die monteerde een Raspberry Pi met RTL-SDR en ADS-B-antenne op zijn dak en een andere Raspberry Pi met camera op zijn terras. Elke keer dat de eerste Raspberry Pi een vliegtuig detecteert op een hoogte van ongeveer 400 meter, neemt de tweede Raspberry Pi een luchtfoto en labelt hij die met het tijdstip en vluchtnummer. De communicatie tussen de twee Raspberry Pi’s verloopt via MQTT.
Wie tot slot meer wil weten over de techniek achter ADS-B-signalen, moet zeker het boek ‘The 1090 Megahertz Riddle’ (https://mode-s.org/decode/index.html) van Junzi Sun eens lezen. Het is gratis als pdf te downloaden en bevat een schat aan informatie.
Met ADS-B kun je ook luchtfoto’s nemen als een vliegtuig overvliegt (bron: Arun Venkataswamy).