Weiterer VRS-Feed: ADS-B Stick am Raspberry Pi

Ich hatte bei meinem aufgebauten Virtual Radar Server (VRS) bis jetzt nur mäßigen Empfang, da ich bei mir zu Hause die Antenne nicht aufs Dach platzieren konnte. Deswegen habe ich einen zweiten DVB-T Stick gekauft, ihn an einen Raspberry Pi (Raspbian Linux) gehängt, an einem Ort südlich des Frankfurter Flughafens aufs Dach gebaut und schließlich den Feed zu meinem vorhandenen Server hinzugefügt. Dadurch konnte ich die Abdeckung im Raum Frankfurt deutlich verbessern.

Im Folgenden beschreibe ich die Inbetriebnahme eines DVB-T Sticks am Raspberry Pi zum Empfang von ADS-B Flugzeugsignalen, sowie die Einbindung dieses Empfängers an einen zentralen Virtual Radar Server.

[Dieser Beitrag ist Teil einer Serie über ADS-B. Hier gibt es eine strukturierte Übersicht.]

Ich verwende den Raspberry Pi also nicht als meinen Virtual Radar Server (VRS, zu dem man sich per Web-Browser (http/s) verbindet um die Flugzeuge zu sehen), sondern empfange lediglich die ADS-B Daten vom DVB-T Stick und leite diese an den bereits vorhandenen VRS weiter. Wenn man es netzwerktechnisch genau nimmt, dann öffnet man auf dem Pi lediglich einen Port, zu dem sich der VRS dann hin verbindet. Die Portfreigabe/Port-Forwarding kann man zum Beispiel über den Internet-Router machen. In meinem Fall habe ich zwischen den zwei Standorten aber ein Site-to-Site VPN.

Hier ein paar Fotos des Aufbaus:

RTL2832U am Raspberry Pi

Bezüglich des Anschlusses des DVB-T Sticks an den Pi muss ich hier nicht viel sagen, da es bereits andere Personen sehr gut dokumentiert haben. Ich verweise also lediglich auf diese sehr ausführliche Doku, die auf die Installation eines DVB-T Sticks am Pi gezielt eingeht (Abschnitt: “Preparing the Raspberry Pi”, mehr nicht!). Daher hier nur kurz die Abfolge aller Befehle:

 

Im Endeffekt geht es um das Programm dump1090, welches sehr gut funktioniert und viele Optionen direkt mitliefert. Es endet darin, dass man nach der Installation lediglich folgenden Befehl ausführen muss, um bereits alles getan zu haben:

Lediglich einen Fehler hatte ich beim Testen mit den “rtl_xyz” Programmen. Linux hatte angemerkt, dass ich einen anderen Treiber dafür blacklisten müsste. Ein bisschen googeln hat direkt geholfen: Es war ein Problem mit einem anderen bereits eingebundenem Treiber. Diesen habe ich wie folgt geblacklisted: Die blacklist Datei geöffnet:  sudo nano /etc/modprobe.d/raspi-blacklist.conf und folgende Zeile hinzugefügt: blacklist dvb_usb_rtl28xxu . Nach einem Reboot konnte ich sofort das Programm “rtl_adsb” oder eben “dump1090” öffnen. (Ich bin mir aber nicht sicher, ob dieses Problem immer so auftritt, oder ob nur ich eine komische Konstellation hatte.)

Hier ein Listing der Ausgabe von ./dump1090 --interactive . Man sieht die vielen empfangenen Flugzeuge sowie deren Position, Geschwindigkeit, Rufzeichen, etc.:

 

Eine Alternative zu dem von mir benutzten dump1090 Programm ist übrigens “rtl_adsb”, wie es zum Beispiel hier verwendet wird. Ich hatte ebenfalls mit rtl_adsb begonnen aber mit dump1090 deutlich bessere Erfahrungen gemacht. Es stürzte nie ab und hatte den Netzwerk-Server direkt mit eingebaut. Bei rtl_adsb musste man erst noch zu nc pipen, was mir nicht so gefiel.

Daten im LAN verfügbar machen

Wie also bereits beschrieben, muss dump1090 lediglich mit der Option “–net” laufen, um einen Haufen an Services auf verschiedenen Ports bereit zu stellen. Ich mache dies innerhalb einer “screen” Session um mich sauber vom Pi trennen zu können, ohne dass das laufende Programm abbricht. [Update: siehe weiter unten, um das Programm automatisch zu starten.] Folgende Services werden von dump1090 angeboten (Listing von ./dump1090 --help ):

Per netstat sieht man schön, dass eben diese default Ports auf der Pi geöffnet wurden:

 

Wenn man mit einem Browser im gleichen Netzwerk dann auf folgende URL geht, sieht man bereits den Webserver von dump1090, welcher direkt auf dem Pi läuft:

 

Die 30000er Ports kann man schön per Netcat oder PuTTY testen. Dort sieht man dann ordentlich Text vorbei rasseln.

Hier ein paar Beispielzeilen von dem Output von Port 30002 (RAW):

Und an Port 30003 (BaseStation) sieht es so aus:

Bei Port 30005 (Beast) kamen irgendwie nur Steuerzeichen rum. Hm, vielleicht muss man damit irgendwie anders umgehen? (Habe mich nicht näher damit beschäftigt…)

Autostart

Wenn man das Programm automatisch mit dem Raspberry Pi starten lassen möchte, muss man dafür ein init.d Startskript erstellen. Bei mir sieht das so aus: Eine neue Datei im init.d Ordner erstellen:

und folgenden Inhalt reinkopieren:

Dann noch das Skript ausführbar machen:

und in die Bootsequenze mit aufnehmen:

(Die Konsole gibt an dieser Stelle folgende Meldung aus: update-rc.d: using dependency based boot sequencing ).

Das war’s. Nach einem Neustart des Pis startet dump1090 automatisch. Außerdem kann man es mit folgenden Befehlen händisch starten bzw. stoppen:

 

Feed im VRS hinzufügen

Obwohl dump1090 bereits einen eigenen Webserver (Port 8080) mitliefert war es ja mein Primärziel, die empfangenen Daten an den bereits vorhandenen Virtual Radar Server anzubinden. Das geht im VRS ganz einfach in dem man einen weiteren Feed hinzufügt. Über einen “Merged Feed” kann man dann wiederum die beiden einzelnen Feeds zu einer gemeinsamen Quelle zusammenschließen, damit man auf der Webseite auch wirklich alle Flugzeuge von beiden Empfängern sieht. Hier die entsprechenden Screenshots:

Das war es also schon! Ab jetzt stehen auf meinem Virtual Radar Server unter http://planes.webernetz.net/virtualradar/ zwei Feeds zur Verfügung, wobei der Merged Feed standardmäßig alle empfangenen Flugzeuge anzeigt. Oben im Menü kann man unter “Receiver” auch einen einzelnen Empfänger auswählen. Und in der Tabelle ziemlich rechts sieht man auch den Namen des Empfängers, der das jeweilige Flugzeug gerade empfängt.

Bandbreitenvergleiche

Eine Sache viel mir relativ schnell auf: Ich hatte den Feed vom Pi zunächst als “BaseStation” auf Port 30003 im VRS eingebunden. Dies schlug mit satten 16 GB/Woche an Traffic zu Buche. Huiui. Tagsüber wurde der DSL-Upload mit knapp 300 Kbit/s konstant belastet, was bei einem theoretischen Upload von gerade mal 1 Mbit/s immerhin knapp 1/3 bedeutet.

Testweise habe ich dann auf das Datenformat “Beast” (Port 30005) umgestellt. Und siehe da, es waren nur noch 3,2 GB/Woche. Hier die Auswertung meines Monitoring Systems in der Woche der Umstellung. Schön zu sehen, wie der Traffic sank. Und auch interessant zu sehen, wie sehr die Bandbreite von der Anzahl der Flugzeuge abhängt. Nachts ist einfach weniger los: :)

ADS-B BaseStation Beast Difference

In einem weiteren Test bin ich von “Beast” auf raw output “AVR or Beast Raw Feed” (Port 30002) umgestiegen. Dies brachte aber kein Unterschied. Deswegen bin ich nun bei Beast geblieben.

CPU Auslastung

Auch interessant finde ich die Auslastung des Raspberry Pi beim Laufen von dump1090. Sie liegt bei sehr konstanten 33 % CPU Last, bzw. bei einem Average Load von 0.6. (Übertaktet habe ich den Pi mit der Stufe “medium”.) Interessant vor allem, dass diese Auslastung sehr konstant ist, also nicht wie bei den oben gezeigten Netzwerkgraphen abhängig von “viele oder wenig Flugzeuge” ist:

Schönes Beispiel

Hier noch mal ein Screenshot von meinem Server mit beiden Empfängern. Ich hatte einen Filter “Altitude between 1 and 7000” eingestellt um nur die startenden/landenden Flugzeuge zu sehen. Man sieht sehr schön, wie sich alle Flugzeuge in die drei Landebahnen vom Frankfurter Flughafen einreihen. ;) Die beiden roten Pfeile zeigen die Positionen meiner beiden Empfänger an. Also ziemlich gut ober- und unterhalb des Frankfurter Flughafens positioniert:

VRS Landungen 2014-03-16 Sonntag 20 Uhr

 

Und nun heißt es: Auf ans Nachmachen!

5 thoughts on “Weiterer VRS-Feed: ADS-B Stick am Raspberry Pi

  1. Ich habe mir das aufgebaut. Mit dump1090 sehe ich die empfangenen Daten. Starte ich nun den Browser, werden mir die die Uhrzeiten oben rechts angezeigt. Aber weder die Karte mit den Flugzeugen noch die Liste der Daten werden gezeigt. Wie schon geschrieben, es erscheinen nur die zwei Uhren. Kann mir jemand einen Tipp geben was da falschläuft?

    1. Hallo Peter,
      hm, rufst du dump1090 mit –net und –interactive auf? Siehst du dann auf der Konsole die Daten und weiterhin nichts auf der Weboberfläche? Komisch. Einfach noch mal probieren und/oder die Kiste neustarten. :)

  2. Hallo,
    vielen Dank für die schöne Anleitung.
    Die Einrichtung hat soweit funktioniert, allerdings empfange ich keine Daten! Weder über’s Webinterface, noch über die Konsolenausgabe (./dump1090 –interactive).
    Meine Antenne steht derzeit aus Kabelgründen innen am Fenster. Könnte es daran liegen, oder wirds eine Konfiguration sein?

    1. Hallo Stefan,

      hm, also wenn dir das “./dump1090 –interactive” keinen Fehler ausspuckt, dann könnte es am Empfang der Antenne liegen. Häng sie doch mal testweise aus dem Fenster raus. Und dann vergleiche, ob bei FlightRadar24 gerade ein Flugzeug in der Umgebung ist. ;)

      Die ersten Zeilen beim Aufruf von dump1090 sehen bei mir immer wie folgt aus. Ist das bei dir auch so? Also vor allem das “Found 1 device…”

      pi@jw-pi02~/dump1090 $sudo ./dump1090 –quiet –net
      Found 1 device(s):
      0: Realtek, RTL2838UHIDIR, SN: 00000001 (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

Leave a Reply

Your email address will not be published. Required fields are marked *