In den letzten Tagen hatte ich ein cooles Raspberry Pi Projekt entdeckt das es ermöglicht die Luftraum zu überwachen, zufällig hatte ich in meinem reichhaltigen Hardware-Fundus noch den dafür notwendigen DVB-T Stick übrig sodass ich direkt mit diesem Projekt gestartet bin.
Wie funktioniert die Luftraumüberwachung?
Mit einem herkömmlichen DVB-T USB- Stick kann das „Automatic Dependent Surveillance – Broadcast“ System (ADS-B), zu Deutsch etwa Automatische bordabhängige Überwachung, angezapft werden. Das ADS-B ist ein System der Flugsicherung zur Anzeige der Flugbewegungen im Luftraum. Die Reichweite der ADS-B-Ausstrahlung beträgt bis zu 200 nautische Meilen (370 km) für Empfangsstellen am Boden.
Was benötigen wir dafür?
Ich hatte zufällig noch einen „alten“ DVB-T Stick mit passenden Chipsatz in meinem Fundus (No Name China Produkt), es gibt noch eine günstige Variante die direkt aus Deutschland versendet wird, den Salcar Top SDR E4000 Stick für 13 Euro. Wichtig ist das der Stick einen Realtek Chipsatz RTL2832U hat. Als Software verwenden wir RTL-SDR (Treiber für den Stick) und Dump1090 (Decoder für das Signal). Der Raspberry Pi muss mit dem Internet verbunden sein da immer die aktuelle Uhrzeit benötigt wird.
Einrichten des Raspberry Pi Radars
Zu erst aktualisieren wir wie immer unser System und laden dann notwendige Software herunter
1 2 |
sudo apt-get update && sudo apt-get upgrade sudo apt-get install git build-essential cmake libusb-1.0-0-dev screen |
Als nächstes holen wir uns die Sourcen von RTL-SDR, dieses Tool benötigen wir um eine Kommunikation zwischen DVB-T Stick und unserem Raspberry Pi zu ermöglichen
1 2 3 4 5 |
cd ~ git clone git://git.osmocom.org/rtl-sdr.git cd rtl-sdr mkdir build cd build |
In unserem erstellten Build verzeichnis starten wir dann via cmake und make install das kompilieren des Tools. Das dauert einige Minuten. ldconfig kümmert sich für uns noch um das caching der libraries.
1 2 3 |
cmake ../ -DINSTALL_UDEV_RULES=ON sudo make install sudo ldconfig |
Nachdem das Tool kompiliert ist kopieren wir noch die Rules Datei nach /etc/udev/rules.d/. udev-Regeln legen fest, was passiert, wenn ein Gerät erkannt wird.
1 2 |
cd ~ sudo cp ./rtl-sdr/rtl-sdr.rules /etc/udev/rules.d/ |
Dem RTL Tool müssen wir noch beibringen das es die Treiber für normales DVB-T Fernsehen nicht laden soll da wir sonst später Probleme beim Empfangen der ADS-B Daten bekommen. Das erledigen wir mit dem Erstellen einer rtlsdr.conf.
1 2 |
cd /etc/modprobe.d/ sudo nano rtlsdr.conf |
Die Konfigurationsdatei bekommt folgenden Inhalt (speichern wie immer mit STRG+X, Y und ENTER)
1 |
blacklist dvb_usb_rtl28xxu |
Jetzt ist ein reboot notwendig (sudo reboot)! Mit „rtl_test -t“ kann überprüft werden ob euer Stick erkannt wird. Bei mir sieht die Ausgabe nach dem Reboot so aus:
1 2 3 4 5 6 7 8 9 |
pi@raspberrypi ~/dump1090 $ rtl_test -t Found 1 device(s): 0: Generic, RTL2832U, SN: 77771111153705700 Using device 0: Generic RTL2832U Found Rafael Micro R820T tuner Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6 Sampling at 2048000 S/s. No E4000 tuner found, aborting. |
Dann holen wir das Tool Dump1090 ebenfalls wieder via GutHub um später auch die Signale vom Stick dekodieren zu können.
1 2 |
cd ~ git clone git://github.com/MalcolmRobb/dump1090.git |
Zum kompilieren wechseln wir in das Verzeichnis und rufen make auf, den Rest erledigt der Kompiler für uns
1 2 |
cd dump1090/ make |
Zum hinzufügen eines Autostart Scripts für dump1090 erstellen wir dieses mit nano (ihr könnt Dump auch immer von Hand starten, dump1090 aufrufen und passende Parameter mitgeben)
1 |
sudo nano /etc/init.d/dump1090.sh |
Fügt einfach folgendes Script in die Datei ein, speichern mit STRG+X, Y und Enter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#!/bin/bash ### BEGIN INIT INFO # # Provides: dump1090 # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: dump1090 initscript # ### END INIT INFO ## Fill in name of program here. PROG="dump1090" ## Fill in the path to the program here. PROG_PATH="/home/pi/dump1090/" ## The arguments I've chosen are: ## --interactive shows an interactive output to the terminal, ## --net starts a webserver on port 8080 that plots plane positions on google maps, ## --aggressive helps decode more packets, ## --enable-agc enables the automatic gain control, I haven't yet done rigorous testing to see if it actually helps ## --net-sbs-port 30003 feeds decoded packets to port 30003 where fr24feed can pick them up ## Get more info on arguments by running dump1090 --help PROG_ARGS="--interactive --net --aggressive --enable-agc" PIDFILE="/var/run/dump1090.pid" start() { if [ -e $PIDFILE ]; then ## Program is running, exit with error. echo "Error! $PROG is currently running!" 1>&2 exit 1 else cd $PROG_PATH ## Starts a detached screen session as user pi with title dump1090. ## Without 'sudo -u pi', 'screen' will be started as root sudo -u pi screen -S dump1090 -d -m ./$PROG $PROG_ARGS > /dev/null 2>&1 & echo "$PROG started" touch $PIDFILE fi } stop() { if [ -e $PIDFILE ]; then ## Program is running, so stop it echo "$PROG is running" killall $PROG rm -f $PIDFILE echo "$PROG stopped" else ## Program is not running, exit with error. echo "Error! $PROG not started!" 1>&2 exit 1 fi } ## Check to see if we are running as root first. if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi case "$1" in start) start exit 0 ;; stop) stop exit 0 ;; reload|restart|force-reload) stop start exit 0 ;; **) echo "Usage: $0 {start|stop|reload}" 1>&2 exit 1 ;; esac exit 0 |
Das Script müssen wir jetzt noch ausführbar machen und via update-rc.d zur Bootsequenz hinzufügen.
1 2 |
sudo chmod +x /etc/init.d/dump1090.sh sudo update-rc.d dump1090.sh defaults |
Nach einem erneuten Reboot sollte dump1090 automatisch starten und die Einrichtung ist abgeschlossen.Kontrollieren könnt ihr das indem ihr das via screen Kommando, das Script startet dump1090 in einer virtuellen Konsole (screen)
1 |
screen -r dump1090 |
STRG+A und dann D (STRG halten) bringt uns zurück in unsere normale SSH Konsole.
Das Webinterface eures eigenen virtuellen Radards erreicht ihr über http://raspberrypi:8080 oder über die IP-Adresse, zum Beispiel