ADS-B mit Open Source

Vielleicht kennt der eine oder andere von Euch die Website Flightradar24.com. Ich jedenfalls finde es faszinierend die Flugbewegungen dort anzuschauen. Erstaunlich wie voll der Luftraum über Europa und Nord-Amerika ist. Natürlich hat mich interessiert, wie das eigentlich realisiert ist. Die Positionen der meisten Maschinen am Himmel werden von diesen selbst per ADS-B übertragen. Diese Signale kann man mit einem Software Defined Radio auf einem PC mit Open Source Software empfangen und verarbeiten.

Natürlich braucht man dafür auch ein Stück Hardware für den Empfang der Signale und die Weiterleitung an den Rechner. Hierzu kann ein einfacher DVB-T Stick dienen. Nach einigen Recherchen habe ich heraus gefunden, dass der “ran – T Stick + USB-Stick für DVB-T” von Conrad Elektronik (Best.-Nr.: 943931 – 62   [Teilenummer: 10911]) bestens geeignet ist. Dieser kostet im Moment nur 19.95 Eur und ist damit schön günstig um damit zu basteln. Wenn man diesen oder einen vergleichbaren Stick sein Eigen nennt, dann kann man mit der Software von dieser Seite entsprechenden Low-Level Zugriff auf die Funk-Daten erhalten. Wichtig ist beim Erwerb des Sticks auf den Tuner zu achten. Nicht alle Tuner sind in der Lage die notwendige Frequenz von 1090Mhz einzustellen. Der beste Tuner ist ein “E4000”. Dieser ist im Conrad-Stick verbaut. Wenn man das rtl_sdr Tool kompiliert hat kann man den Stick testen und heraus finden, welche Frequenzen der Tuner einstellen kann. Dabei kommt dann sinngemäß folgende Ausgabe heraus:

dt@develop:~/Devel/adb-s/rtl-sdr$ rtl_test -t
Found 1 device(s):
0:  Terratec T Stick PLUS

Using device 0: Terratec T Stick PLUS
Found Elonics E4000 tuner
Supported gain values (14): -1.0 1.5 4.0 6.5 9.0 11.5 14.0 16.5 19.0 21.5 24.0 29.0 34.0 42.0
Benchmarking E4000 PLL…
[E4K] PLL not locked for 51000000 Hz!
[E4K] PLL not locked for 2220000000 Hz!
[E4K] PLL not locked for 1110000000 Hz!
[E4K] PLL not locked for 1244000000 Hz!
E4K range: 52 to 2219 MHz
E4K L-band gap: 1110 to 1244 MHz

D.h. der Stick kann Frequenzen zwischen 52 und 2219 Mhz tunen; mit einer Lücke zwischen 1110 und 1244 Mhz. Damit sind also die notwendigen 1090 Mhz abgedeckt.

Um die Daten vom Stick zu lesen und entsprechend zu decodieren verwende ich dump1090 von github. Ebenso wie RTL-SDR muss dieses Tool erst kompiliert werden. Ich werden diesen Beitrag in den kommenden Tagen um eine entsprechende Anleitung erweitern. Wenn beide Tools zur Verfügung stehen ist die erste Inbetriebnahme sehr einfach. Entweder man bastelt als Root-User (nicht empfohlen) oder man muss die entsprechenden UDEV-Regeln aus dem RTL-SDR Verzeichnis in das eigene System integrieren. Ich verwende ein Debian Wheezy und hier ist es ausreichen die Datei rtl-sdr.rules nach /etc/udev/rules.d zu kopieren, udev neu zu starten (oder zu booten) und dann den Stick wieder einzustecken. Danach kann z.B. rtl_test auch als normaler User ausgeführt werden. Wenn das klappt kann man direkt zu dump1090 schreiten. Ein einfacher Aufruf von dump1090 ohne weitere Parameter sollte direkt auf der Konsole ADS-B Daten ausgeben. Hier ein Beispiel der Ausgabe:

dt@develop:~/$ ./dump1090
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001 (currently selected)
Found Elonics E4000 tuner
Max available gain is: 42.00
Setting gain to: 42.00
Exact sample rate is: 2000000.052982 Hz
Gain reported by device: 42.00
*5e3dd7849ca1d3;
CRC: 9ca1d3 (ok)
DF 11: All Call Reply.
Capability  : Level 2+3+4 (DF0,4,5,11,20,21,24,code7)
ICAO Address: 3dd784

*5e3dd7849ca1d3;
CRC: 9ca1d3 (ok)
DF 11: All Call Reply.
Capability  : Level 2+3+4 (DF0,4,5,11,20,21,24,code7)
ICAO Address: 3dd784

*5e3dd7849ca1d3;
CRC: 9ca1d3 (ok)
DF 11: All Call Reply.
Capability  : Level 2+3+4 (DF0,4,5,11,20,21,24,code7)
ICAO Address: 3dd784

Wenn das klappt, dann gibt es noch eine nette Spielerei, die sich einfach realisieren lässt. Man kann dump1090 mit folgenden Parametern starten:

./dump1090 –aggressive –net > /dev/null

Der –aggressive Parameter sorgt dafür, dass dump1090 mehr CPU-Zeit verbraucht und somit eine höhere Sample-Rate erreicht. Der –net Parameter aktiviert den integrierten Web-Server. Der Rest des Kommandos leitet die CLI-Ausgabe nach /dev/null um (optional), da diese nicht gebraucht wird und zusätzliche Last erzeugt. Wenn das Kommando läuft, kann man mit dem Browser auf Port 8080 der Maschine zugreifen (z.B. http://localhost:8080). Dort kann man dann die erfassten Flugzeuge direkt auf einer Google-Maps Karte anschauen 🙂

Soviel hier und heute. Man kann noch weitere, tolle Dinge mit diesem Stick, dump1090, rtl-sdr und tools wie z.B. gqrx und gnuradio anstellen. So kann man zum Beispiel die Wetter-Daten der NOAA Satelliten empfangen. Dazu später mehr…

Leave a Reply