Posts tagged ‘ads-b’

adsbox adsb receiver antenna rtlsdr gain

As adsbox did take too much CPU from my main server I moved adsbox to a banana pi zero w. Running Raspbian adsbox used about 200% of the 4 cores and 10% of the 512 MB headless system. That was OK for me and I wanted to extend the range of my rtlsdr antenne. I moved the antenna out side and was impressed about the exended range but nearby aircrafts did not show any more 🙁

As I want to see the nearby aircrafts, we are near dĂŒsseldorf in the landing lines and wanted the data of the aircrafts crossing the small home village 30km away from the DUS airport.

adsbox missed too much data or the rtlsdr dongle received too much signals. First I changed the adsbox call to use 4 threads for adsb decoding. That did not help.

Then I looked for the gain values to lower the reception signal strength. My rtlsdr RTL8232u supports gain values (found with rtl_test):

#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

I first started with 0.0 and got better nearby results but only a range of about 5km. Using 25.8 gives a range of 120km but too much airplanes (~39) and nearby losts. With the max gain I had more than 59 airplanes at a time. Finally I used 16.6, which still gives a range of 80km and ~5-10 airplanes.

Using the highest gain would give a very large range of ~250km but nearby signals get lost. And we ant to see mainly the nearby airplanes and now use a gain of 16.6.

The cpu usage is now down to 100% (quad core, so that is 25%) and the adsbox decocde threads are down to 15-25%.

FHEM: Flugdaten mit py1090 loggen

Nun kann ich ja Flugdaten mit Hilfe von Jonas Lieb’s py1090 und adsbox in FHEM aufzeichnen. Dies wollte ich immer um die Aufzeichnung des aktuellen GerĂ€uschpegels erweitern. Das Ergebnis sind Erweiterungen der py1090 Klassen und bessere python Ausgaben der aktuellen Daten.

Angefangen habe ich mit einfachen print-Anweisungen und einer seriellen Verbindung zu einem Arduino Nano, der als ADC Wandler fĂŒr den GerĂ€uschpegel diente. Nun lĂ€uft ein nodeMCU mit espEasy. Dadurch (wireless) kann ich den GerĂ€uschpegel ‘Sensor’ unabhĂ€ngig positionieren. Die Daten lese ich in Python ĂŒber json vom espEasy. Die aktuellen ‘LĂ€rm’-Daten werden alle x Minuten ĂŒber einen Python Telnet Client Code an FHEM ĂŒbermittelt.

Aufbau

GerÀuschpegel-Sensor => nodeMCU mit ESPeasy =(WLAN)=> Python Script => FHEM-Logfile + Telnet FHEM

Anfangs habe ich versucht den ‘Sender’-Code direkt in LUA auf dem nodeMCU zu schreiben. Man stösst aber sehr schnell an Speichergrenzen und der Code lĂ€uft sehr unzuverlĂ€ssig. Dagegen ist ESPeasy total einfach einzurichten und bietet direkt einen ADC Sensor. Nun kann man den Wert via MQTT weiterverarbeiten. Da ich aber den GerĂ€uschpegel zusammen mit dem aktuell ‘nĂ€chsten’ Flugzeug versenden will, lese ich die Daten via JSON von ESPeasy in Python und versende sie dann zusammen mit den Flugzeugdaten via Telnet an FHEM.

Das erste Python Script verwendet nur einfache Print-Ausgaben fĂŒr die aktuellen AktivitĂ€ten. Der Inhalt scrollt stĂ€ndig ĂŒber den Bildschirm und man hat keine Übersicht.

dump1090

Daher habe ich den Python-Code so geÀndert, dass er zur Ausgabe curses verwendet:

dump1090term

Leider ‘zerschiesst’ es ab und an den Bildschirm und die Hervorhebung fĂŒr das ‘nĂ€chste’ Flugzeug erstreckt sich dann auch mal ĂŒber andere Zeilen. Ausserdem kann man das Terminal Fenster nicht in der GrĂ¶ĂŸe Ă€ndern. Meistens bricht dann der Curses Code und das Python Script ab.

Dann habe ich es noch mit der Python blessings Erweiterung versucht:

dump1090term_blessings

Nun kann man das Terminalfenster zwar im laufenden Betrieb in der GrĂ¶ĂŸe Ă€ndern, allerdings muß ich die Ausgabe noch besser anpassen (Kopfzeilen).

Ich habe in diesem Python Projekt möglichst mit Klassen und externen Modulen zu arbeiten. Dadurch kann man das Ganze leicht erweitern und anpassen.

Source Code

fhem: Flugdaten aufzeichnen mit adsbox und python

Ich wollte gerne die Flugzeug-AktivitÀten, die ich in adsbox mit meinem RTL-SDR empfange aufzeichnen und visualisieren.

Dazu habe ich zuerst TWFlug gefunden. Leider ist das Programm sehr beschrĂ€nkt und der Quellcode nicht verfĂŒgbar. Erschwerend kommt hinzu, dass es ein Java Programm ist. Jedenfalls war es fĂŒr meine Zwecke unbrauchbar und anhand der unvollstĂ€ndigen Beschreibungen nicht zum Laufen zu bekommen.

Dann habe ich py1090 von Jonas Lieb gefunden. Der Autor hat den Quelltext unter MIT Lizenz freigegeben. Also habe ich den Code unter meinem Github Account kopiert und angepasst. Mein py1090_2 liest die ads-b Nachrichten ĂŒber Port 30003 von adsbox und schreibt eine Logdatei in einem fĂŒr fhem tauglichen Format auf demselben Server (Linux Debian 8). Mein Code bereinigt die gesammelten Flugzeuge regelmĂ€ĂŸig und berechnet noch absolute Sicht-Entfernungen. Ausserdem kann man festlegen, in welchem Umkreis um eine Position Flugzeuge aufgezeichnet werden. Wenn einem zum Beispiel nur Flugzeuge im Umkreis von 30km interessieren. Das Ganze kann man dann schön aufbereitet in FHEM anzeigen lassen (oben die Anzahl der Flugzeuge und unten die niedrigste Höhe):

fhem-flugdaten

Zudem habe ich den Code so vorbereitet, dass ich spĂ€ter noch Daten zur LaustĂ€rke und zum nĂ€chst sichtbaren Flugzeug zu FHEM ĂŒbertrage (via Telnet).

fhem-fluglaerm1

Zuerst einmal die Definition der extern befĂŒllten Logdatei in der fhem.cfg:

Continue reading ‘fhem: Flugdaten aufzeichnen mit adsbox und python’ »