FANET+ Mapserver

Offline FANET+ Mapserver mit Raspberry Pi

In unserem Verein Diomedea gehört es eigentlich zum guten Ton, dass Kollegen, die auf Strecke gegangen sind und schon im näheren Umfeld absaufen, von den Fliegerfreunden am Platz sofort zurückgeholt werden um ihnen einen weiteren Versuch zu ermöglichen. Auch dafür bietet sich FANET+ natürlich an, denn man hat sofort einen Überblick wo die Leute unterwegs sind (oder eben nicht mehr).

Nun funktioniert dies natürlich beim SYKTRAXX 3 über direktes Versenden der OGN Sätze per Handy mit Tethering oder eine OGN-, FANET- oder AirWhere-Bodenstation mit Übertragung an einen Mapserver ins Internet. Dies wäre dann z.B. Glidernet, Glidertracking, AirWhere, LiveTrack24 oder oder oder …
Hat aber alles den Nachteil, dass man eine entsprechende Internetverbindung braucht und das ganze auch mit Mobilfunkkosten verbunden ist.

Die Alternative dazu ist mein Offline FANET+ Mapserver auf Basis eines Raspberry Pi

Wie man auf dem Bild sieht besteht der Aufbau aktuell aus folgenden Komponenten

  • Raspberry Pi 3 Modell B (sollen aber auch einfachere Modell funktionieren)
  • Stromversorgung (Power Bank)
  • GPS Maus (mit FDTI Chip)
  • USBTTL Adapter (mit FDTI Chip)
  • FANET+ Modul

Der Hardwareaufbau ist eigentlich ganz einfach:
Der Raspberri Pi wird über die Power Bank mit 5V über USB versorgt. Dazu sollte diese möglichst 3A Leistung bringen können, da ein Raspberry Pi schon mal bis zu 3A Strom zieht.
Über die GPS Maus (mit FDTI Chip) wird der Raspberry Pi mit NMEA Positionsdaten versorgt. Aktuell habe ich die Unterstützung noch nicht implementiert (siehe auch Parameterdatei), aber diese Daten werden für die eigene Positionsbestimmung der Bodenstation und für den Zeitabgleich benötigt.
Mit einem USBTTL Adapter mit FTDI Chip wird das FANET+ Modul mit dem Raspberry Pi verbunden. Der FDTI Chip ist wichtig, da die entsprechenden Treiber schon auf dem RPi installiert sind. Nur dann funktioniert es automatisch mit der Anbindung (gleiches gilt für die Maus).
Die Verbindung zwischen FANET+ Modul und USBTTL Adapter ist eigentlich selbsterklärend, GND (Ground), V3.3 (Das FANET+ Modul arbeitet mit 3.3V Power, nicht 5V verbinden!), TX und RX über Kreuz verbinden und schon kann es an einem Raspberry Pi oder PC verbunden werden.

An dieser Stelle erst einmal einen ganz besonderen Dank an:
c’t für die Beschreibung zum Aufbau eines Raspberry Pi als Webserver
my5cent für die sehr hilfreiche Beschreibung zum Aufbau eines Mapservers auf dem Raspberry Pi
Max Berger, ohne den ich animierte Symbole auf dem Mapserver mit leaflet nie ans Laufen bekommen hätte!

Jetzt wird der Raspberry Pi aufgesetzt:

  • Betriebssystem auf einer SD-Karte installieren
  • Raspberry Pi mit dem Internet verbinden
  • Weitere Pakete wie Web- und Map-Server installieren
  • Die von mir bzw. Max Berger erstellten leaflet-Web-Seiten hineinkopieren
  • FANETview installieren und starten
  • Web-Access-Point aufbauen
  • Von raspberrypi.org Raspbian (Lite) laden (nicht NOOBS)
    Wer es mit Lite macht muss selbst wissen was er (sich an-) tut.
    Heute gibt’s ja kaum noch SD-Karten die so klein sind, dass sich die Lite Installation lohnt!Mit dem Programm W32DiskImager das Image auf die SD-Karte schreiben
    Karte auswerfen, in den RPi stecken und booten.
    Natürlich vorher einen Bildschirn, Tastatur und Maus anschließen; macht das Leben ungemein lechter 😉
  • LAN oder WLAN Zugriff aktivieren, damit Daten nachgeladen werden können.
  • Dann kommen einige Befehle im Terminal
  • Deaktivieren der Stromsparfunktion des WLAN-Adapters
    sudo iw wlan0 set power_save off
  • Damit die WLAN-Stromsparfunktion künftig auch automatisch ausgeschaltet wird der zentralen Netzwerkkonfigurationsdatei mit sudo pico /etc/network/interfaces folgendes anfügen
    auto wlan0
    iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    wireless-power off
  • Software installieren (Apache und Mapserver)
    sudo apt-get install apache2 cgi-mapserver gdal-bin

    • Der CGI Service muss separat aktiviert werden
      sudo a2enmod cgi
      sudo systemctl restart apache2
  • Mit dem Dateimanager das Archiv html.zip (Achtung: Die Datei ist über 200MB groß!) in das Verzeichnis /var/www/html entpacken.
    Da sollten sich dann z.B. die Datei index.html und die Unterverzeichnisse shapes und img befinden.
    shapes enthält Shapefiles von Deutschland für den Mapserver und in img liegen die Symbole der Luftfahrzeuge.

    • Ggf. für alle Verzeichnisse lese und schreibrecht
      sudo chmod 777 *
    • Und für alle Verzeichnisse und Dateien User und Group auf root ändern
      sudo chown root *
      sudo chgrp root *
    • Jetzt sollte eigentlich der Web- und Mapserver laufen!
      Also mit ifconfig dir IP-Adresse anzeigen lassen und durch Eingabe dieser Adresse im Browser (http://ip-adresse-des-rpi) testen.
      Es sollte dann ein Beispielausschnitt angezeigt werden und kann beim ersten Mal etwas länger dauern.
      So’n RPi ist als Mapserver auch nicht der allerschnellste 😉
    • Nun wird mein Programm FANETview installiert.
      FANETview überwacht die parametrierten Schnittstellen und verarbeitet die Daten vom FANET-Modul und ggf. einer Maus. Es wird alles über eine Parameterdatei gesteuert.

      • Mit dem Dateimanager das Archiv FANETview.zip in das Verzeichnis /var/www/FANETview entpacken
      • In der Parameterdatei settings.txt mit dem DateiEditor entsprechende Paramter ändern.
        Wofür die sind und was die bedeuten sollte selbsterklärend sein. Daher nur drei Hinweise:

        • An welchem Anschluss FANET-Modul und GPS-angeschlossen sind kriegt man mit dmesg | grep usb heraus.
        • Ggf. mal mit dem Debugging Level arbeiten um zu testen und natürlich entsprechende Pfade anpassen!
        • Startet man das Programm auf der Kommandozeile mit FANETview settings.txt kann es mit STRG/C wieder beendet werden.
      • Läuft alles kann das Programm FANETview nach dem Boot des RPi automatisch gestartet werden.
        Der einfachste Weg ist ein Eintrag in der /etc/rc.local, hier am Ende, aber vor exit 0 folgendes eingeben (Pfadangabe anpassen)
        /var/www/FANETview /var/www/settings.txt&
    • Damit der Raspi als Hotspot arbeitet, müssen wir zwei Pakete im Terminal nachinstallieren:
      sudo apt-get install hostapd dnsmasq
    • Der AP-Daemon erzeugt den Access Point und DNSmasq ist für die Adressvergabe per DHCP zuständig.
      Die Konfigurationsdateien für beide Programme sind im Zip-Archiv config.zip enthalten.
      Dies also erst einmal irgendwo auf dem RPi entpackt (z.B. tmp) und müssen dann entsprechend kopiert werden:
      sudo cp config/default/* /etc/default
      sudo cp -a config/hostapd /etc
      sudo cp config/dnsmasq.conf /etc
    • Außerdem benötigt man einen mit statischer IP-Adresse konfigurierten WLAN-Adapter.
      Hierzu die zentrale Netzwerkkonfigurationsdatei /etc/network/interfaces öffnen und dort folgendes anfügen:
      auto wlan0
      iface wlan0 inet static
      address 192.168.255.1
      netmask 255.255.255.0
      wireless-mode Master
      wireless-power off
    • Achtung: Wenn der RPi jetzt gebootet wird ist er per WLAN nur noch als Access Point erreichbar und verbindet sich nicht mehr mit anderne WLAN Adaptern!
    • Eigentlich sollte auch ein FakeDNS-Daemon funktionieren!
      Diesen in das Verzeichnis /usr/local/bin kopieren und dafür sorgen, dass er künftig zusammen mit DNSmasq gestartet wird:
      sudo cp fakedns/*.py /usr/local/bin
      sudo cp fakedns/*.service /etc/systemd/system
      sudo systemctl enable fakedns.service
    • FakeDNS sollte auf sämtlichen Domain-Anfragen mit der IP-Adresse 192.168.255.1 antworten. Funktioniert aber bei mir (noch) nicht. Außerdem bekomme ich beim Booten eine Fehlermeldung.
      Aber das kriege ich auch noch raus 😉 und würde mich über einen Hinweis sehr freuen …
    • Falls auch noch eine entsprechende Seite mit angegeben wird habe ich die Datei
      /etc/apache2/sites-available/000-default.config editiert und die Zeile
      ErrorDocument 404 /index.html
      eingefügt (nach DocumentPath). Jedenfalls funktioniert das schon mal 🙂

 

Ruft man nun die Homepage des Raspberry Pi auf http://www.192.168.255.1 erhält man folgende Ansicht

Hier auf meinem iPad mit dem Kartenausschnitt aus meiner Region.
GrStation-Diomedea ist die eigene Position der Bodenstation (also des Raspberry Pi mit GPS Maus)
FANET 11,31 ist mein SKYTRAXX 3.0 mit entsprechenden Daten
… und die weiteren Luftfahrtzeuge als Testdaten mit den verschiedenen Symbolen.

Durch die Scipte von leaflet wird immer das markierte Luftfahrzeug auf der Karte dargestellt und die Karte ggf. verschoben. Ebenso wird ein Track von 30min Länge je Luftfahrtzeug angezeigt.

Sollte jemand das Projekt nachbauen wollen und auf Probleme stoßen werde ich gerne unterstützen und meine Beschreibung anpassen bzw. ergänzen.
Mein Programm FANETview ergänze ich gerne nach Bedarf, möchte aber aktuell nicht den Quellcode veröffentlichen.

Da sich jetzt das Frühjahr nähert und ich daher meine Zeit mit Gleitschirmfliegen verbringen werde statt Programme zu schreiben, Mapserver aufsetzen oder AirWhere Bodenstationen baue wird es vermutlich hier nur weitergehen wenn ich Fehler ausmerze oder kleinere Anpassungen vornehme. Ich komme ja jetzt erst dazu all meine Projekte zu testen 😉

Folgende ToDo’s sollen aber noch in das Projekt einfließen:

  • Meldungen von FANET Anwendern werden ad hoc dargestellt und können je Benutzer auch später noch angezeigt werden. Aber da muss mir auch ein leaflet Experte noch mal unter die Arme greifen.
  • Einbindung von Wetterdaten an der Bodenstation; dies sollen sein
    • Windrichtung und -geschwindigkeit
    • Luftdruck und -temperatur
    • Luftfeuchtigkeit