geolocator (Software defined GPS) erste Evaluation

Hallo zusammen,
Nun folgt die erste Phase meiner Evaluation für das Google Summer of Code Projekt. Eine Einführung in das Projekt: „geolocator (Software defined GPS)“ gab es bereits letzten Monat. Diese könnt ihr hier finden [0]. In dem zuvor erwähnten Blogbeitrag habe ich über 3 Unterprojekte berichtet, diese sind:
  • Web Backend
  • gps-share
  • LEDE Paket
In diesen Blogbeitrag möchte ich euch zeigen was in den jeweils einzelnen oben genannten Unterprojekten geschehen ist. Anfangen werde ich mit dem Web Backend.

Web Backend

Diese Projekt soll zukünftig das alte Web Backend des openwifi.su  Projekts ersetzen. Das openwifi.su Projekt ermöglicht uns, dass Freifunk Router durch umliegende WLAN-Netze ihre GPS-Position beziehen können. Das alte Web Backend besteht aus vielen verschiedenen Teilprogrammen welche in unterschiedlichen Sprachen wie z.B. Java & Ruby geschrieben wurde. Hinzu kommt, dass diese Teilprogramme über die Jahre gewachsen sind.

Als erste habe ich mir den Ruby Part vorgenommen welcher für das Erhalten einer GPS-Position anhand umliegender BSSIDs zuständig ist. Die umliegenden BSSIDs werden über eine URL als String übergeben, der Ruby Code liest die URL als String. Somit können Benutzer des Dienstes einfach folgenden Befehl ausführen: 

wget -O - http://openwifi.su/api/v1/bssids/64700274945A,0018E7DC21BB,30FC681F37A6,F81A673626E8,EC086BA8ED18,8416F9A8E2FA,E894F6A230E4,98DED020D00A,EC086B3349B2,F81A677F5CD8,A0F3C1654BA6 2&>1

und erhalten die GPS-Position in form von Latitude und Longitude. Dazu entfernt das Programm einfach alle Zeichen bis zum letzten Schrägstrich und unterteilt die durch Komma getrennten BSSIDs in ein Array. Die einzelnen Einträge im Array werden dann ohne weitere Prüfungen in einen SQL Befehl integriert, welcher die jeweiligen GPS-Positionen zu jeder einzeln BSSID zurück liefert. Der Ruby Code ist nicht ohne Nachfrage öffentlich einsehbar. Der Grund dafür ist, dass die Entwickler das Risiko von Hackangriffen verringern wollen. Ich habe damit begonnen den alten Ruby Code in golang zu portieren. Zudem habe ich zusätzliche Prüfungen eingebaut welche nur durch Komma getrennte 12 stellige Hexadezimal Werte erlaubt. Aktuell arbeite ich an der Kommunikation mit der Datenbank. Das heißt in den nächsten Tagen ist die Portierung des Ruby Codes abgeschlossen und die Abwärtskompatibilität in Bereich Positionbestimmung ist abgeschlossen. Den aktuellen Code kann man hier finden [1].

gps-share

gps-share ist eine Software welche die GPS-Informationen von GPS-Hardware im lokalen Netzwerk bereitstellt. Geschrieben wurde es in Rust [2]. Es unterstützt eine Menge an GPS-Hardware und verteilt die GPS-Informationen über ein Netzwerk-NEMA format. Zeeshan Ali ist der Maintainer des Projekts geoclue und hat vor kurzem die erste Version von gps-share freigegeben [3].
Zeeshan und ich hatten auf der Mozilla Location Service Mailing-list über das Projekt diskutiert [4]
Wie ich es im letzten Blogbeitrag bereits geschrieben habe ist gps-share ein alternatives Projekt zur ursprünglichen Idee. Dieses Projekt ermöglicht es geoclue direkt mit GPS-Hardware zu arbeiten. Geoclue selbst kann bereits via Mozilla Location Service (MLS) anhand umliegender WLAN-Netze eine GPS-Position bereitstellen. Somit bildet geoclue in Kombination mit gps-share gleichzeitig auch eine einheitliche Schnittstelle zum Bezug einer GPS-Position via dbus, über GPS-Hardware, Umliegenden WLANs oder anderen Wegen wie z.B. geoip.

LEDE Paket

Das letzte Unterprojekt ist ein neues Paket für LEDE (Linux Embedded Development Environment), welches die GPS-Position der Router anhand umliegender WLAN-Netzen zur Verfügung stellen soll. Dieses soll mit dem neuen Web Backend arbeiten. Ich hab bereits eine erste grobe Testversion mit dem alten Web Backend gebaut. Diese findet ihr hier [5]. Zudem habe ich mit Maintainern des Gluon Framework angefangen zu darüber zu diskutieren diesen Dienst in Gluon zu integrieren. Ein erster Integrationsvorschlag könnte folglich aussehen:

 

 

Eine Idee ist es das, das Web Interface auf dem Router bestimmte installierte Pakete detektiert und deren Optionen auf dem Web Interface zur Auswahl stellt. Das bedeutet die Auswahl “Automatic (geolocator)” im oben gezeigten Bild wird nur angezeigt wenn das Paket  geolocator installiert ist. Das macht es für lokale (Freifunk) Communitis einfacher andere individuelle Optionen zur Positionserkennung in ihrer Lokalen Firmware zu integrieren.
Abschließend möchte ich noch beifügen, dass letzte Woche meine letzten Prüfungen waren. Nun kann ich meine Zeit voll dem Projekt widmen. Als Nächstes ist geplant, die weiteren Teile des alten Web Backend in das Neue zu Portieren, sowie ein Continuous Integration Unit-Test zu bauen. Dazu folgt eine Neue API zu Positionseintragung und Positionsabfrage. Zudem soll eine Kommunikation zwischen Mozilla Location Service und dem neuen Web Backend erfolgen, um anfragen zur GPS-Eintragung und GPS-Abfragung zwischen beiden Projekten zu synchronisieren.
Jan-Tarek Butt

 

Schreibe einen Kommentar