Listing 5
$ ./dump1090 --help ----------------------------------------------------------------- | dump1090 ModeS Receiver Ver : 1.10.3010.14 | ----------------------------------------------------------------- --device-index <index> Select RTL device (default: 0) [...] $ ./dump1090 --raw 0: Generic, RTL2832U, SN: 77771111153705700 (currently selected) Found Rafael Micro R820T tuner Max available gain is: 49.60 Setting gain to: 49.60 Exact sample rate is: 2000000.052982 Hz Gain reported by device: 49.60 *8d4408d758c3758d7d6b59c39614; *5d4408d752975c; *5d3c5eea681552; *a000053900000000000000f1c42d; [...]
ADS-B
Das Kürzel ADS-B steht für den etwas sperrigen englischen Begriff Automatic Dependent Surveillance – Broadcast. Das lässt sich etwa als “Automatische abhängige Überwachung durch Rundsendung” ins Deutsche übersetzen. Ein Luftfahrzeug bestimmt dabei selbstständig seine Position, etwa per GPS, und sendet diese – typischerweise einmal pro Sekunde – zusammen mit anderen Daten wie Flugnummer, Flugzeugtyp, Geschwindigkeit, Flughöhe und -richtung kontinuierlich auf 1090 MHz ungerichtet aus. Die Reichweite der ADS-B-Signale beträgt bis zu 200 Seemeilen, also rund 370 Kilometer. In Gebieten mit einer schlechten Funkmessabdeckung – etwa über dünn besiedelten Gebieten oder dem Meer – dient ADS-B heute der Flugsicherung quasi als Radar-Ersatz, bei erheblich geringeren Kosten als für eine aktive Flugverfolgungsanlage. ADS-B erhöht jedoch auch in radarüberwachten Zonen die Flugsicherheit, da es im Vergleich zur klassischen Flugverfolgung eine erheblich höhere Aktualisierungsrate bietet.
Dekodierung
In Zeiten vor der satellitengestützten Navigation war die Positionsbestimmung recht ungenau. Daher kodierte ADS-B ursprünglich nur die Flugnummer, die Flughöhe und -richtung sowie die Geschwindigkeit; den Zeitstempel ergänzte der Empfänger. Das genügte für einen einfachen Kollisionsschutz gegenüber anderen Flugzeugen und einer Identifikation gegenüber dem Überwachungsradar am Boden. Konnte man ein ADS-B-Signal empfangen, war vermutlich ein Flugzeug in der Nähe. Handlungsbedarf bestand dann, wenn der Flight Level, also die aus dem Luftdruck abgeleitete Höhe, mit dem eigenen Fluglevel übereinstimmte.
Seit der Einführung von GPS übertragen ADS-B-Datentelegramme auch die Position – formal mit einer Genauigkeit von 100 Metern, gleichbedeutend mit einer Gradangabe von drei Nachkommastellen. Diese Information passt nicht mehr in ein Datenwort von 112 Bits. Das sogenannte Compact Position Reporting (CPR) verteilt daher die Information auf zwei Datentelegramme. Zur Unterscheidung setzt es das 22. Datenbit (F Flag) auf 1 (EVEN) oder 0 (ODD) [7].
Die Mühsal der Dekodierung übernimmt Dump1090. Ein Aufruf ohne weitere Schalter gibt schlicht die vorverarbeiteten Daten aus. Im Beispiel aus Listing 6 enthält der 112 Bit lange Hex-String die ODD-Teilinformation für Länge und Breite. Ein Aufruf von Dump1090 mit dem Schalter --interactive berechnet alle Flugdaten und zeigt sie in einer Tabelle an (Abbildung 2).
Listing 6
$ ./dump1090
*8d3c675458c38511495f2a4769a9;
CRC: 000000 (ok)
DF 17: ADS-B message.
Capability : 5 (Level 2+3+4 (DF0,4,5,11,20,21,24,code7 - is airborne))
ICAO Address : 3c6754
Extended Squitter Type: 11
Extended Squitter Sub : 0
Extended Squitter Name: Airborne Position (Baro Altitude)
F flag : odd
T flag : non-UTC
Altitude : 38000 feet
Latitude : 34980 (not decoded)
Longitude: 89898 (not decoded)

Abbildung 2: Ein Beispiel für eine Datenaktualisierung im Terminalfenster über den Aufruf »./dump1090 –interactive«.
Beim Wert in der ersten Spalte handelt es sich um die (unveränderliche) 24 Bit lange Mode-S-Adresse des Transponders. Den Transponder-Code (Sqwk) erhält das Flugzeug von der Flugsicherung. Er bleibt so lange erhalten, wie das Flugzeug sich im überwachten Luftraum aufhält. Die Spalte Flight nennt die Flugnummer. Höhe (Alt) und Geschwindigkeit (Spd) erscheinen in Fuß und Knoten. Die Flugrichtung (Hdg) weist den Winkel gegen Norden aus; 067 entspricht demnach der Richtung Ostnordost. Die geografische Breite (Lat) und Länge (Long) werden in Grad angegeben. Die relative Signalstärke weist die Spalte Sig aus. Die beiden folgenden Spalten informieren über die Häufigkeit des Empfangs von Datentelegrammen. Wie Sie an den Zeitstempel gelangen, erläutern wir im Folgenden noch.
Wenn Sie die Daten zur Auswertung in eine Datei umleiten möchten, stört die Wiederholung der Spaltenbeschriftung und die horizontale Linie. Listing 7 zeigt, wie Sie mithilfe des Filters Egrep die Daten bereinigen, bevor sie in die Datei flugdaten.txt gelangen.
Listing 7
$ ./dump1090 --net --interactive | egrep -v 'Hex|----' > flugdaten.txt
Webserver
Das Programm Dump1090 bringt einen eigenen Webserver mit. Sie starten ihn, indem Sie Dump1090 mit dem Schalter --net aufrufen. Die Anwendung schreibt die aktuellen Positionsdaten in den Verzeichnispfad des Servers, Sie erreichen sie unter http://localhost:8080/data.json. Mit dem Aufruf der Adresse https://localhost:8080 im Webbrowser gelangen Sie ans Ziel: Die Javascript-Dateien der Startseite lesen kontinuierlich die Daten aus und schreiben die erkannten Flugzeugpositionen in eine Karte (Abbildung 3).
Der Schalter links oben in der Karte bestimmt die Kartenquelle. Bei der Auswahl der freien Karte OpenStreetMap tritt ein kleines Problem auf: Das Google-Logo verschwindet nicht, und der Link zur freien OpenStreetMap-Lizenz fehlt. In Abbildung 3 haben wir beides nachträglich korrigiert. Auch die Flugspuren bekommen Sie in dieser Anzahl nicht zu sehen: Der Webserver zeigt lediglich die Spur des gerade angeklickten Flugs.
Über den Parameter --net-http-port 8080 (Listing 8) legen Sie den Port fest (im Beispiel unverändert Port 8080). Das Flag --aggressive erhöht die Zahl erkannter Flugzeuge durch verringerte Redundanzprüfung. Der Schalter --metric rechnet die Höhe und Geschwindigkeit in Meter und Stundenkilometer um, indem er die Höhe durch 3,2828 dividiert und die Geschwindigkeit mit 1,852 multipliziert.
Listing 8
$ ./dump1090 --net --net-http-port 8080 --aggressive --interactive --metric
Raspberry Pi
Alle bislang vorgenommenen Tests funktionieren auf einem Raspberry Pi genauso wie auf einem ausgewachsenen Linux-System – mit einer Ausnahme: Während die Webbrowser Midori und Epiphany auf einem Laptop anstandslos die Karte mit den Flugzeugen darstellen, scheitern sie auf dem RasPi. Abbildung 4 zeigt das klägliche Resultat der Bemühungen von Epiphany auf einem Raspberry Pi 3.






