Kleines Programm schreiben

Moin,

um die Knoten ohne Koordinaten richtig in Domänen zuzuweisen, brauchen wir ein kleines Programm, was folgendes tut:

  • iwinfo client0 scan ausführen und Macs sammeln

  • In dieses Format bringen:

    {
    “wifiAccessPoints”: [
    {
    “macAddress”: “34:31:C4:15:4B:B8”
    },
    {
    “macAddress”: “00:24:FE:A5:7B:76”
    }
    ]
    }

  • Über Google die Koordinaten abrufen. Entweder direkt oder per wget. Über Curl geht es wie folgt, Curl ist aber nicht auf den Routern drauf:

    curl ‘https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyA4-TkuE0b2XJC0s4z2TyObyTNHtQgb9Wg’ -X POST -H “Content-Type: application/json” -d @macs.json

  • Einen Algorithmus oder eine kleine Bibliothek finden, die nun Stück für Stück alle Polygone von hier herunterlädt und prüft, ob die Koordinaten darin liegen. Falls ja muss die Kennzahl der Domäne bzw. des Polygons irgendwie an uns übermittelt werden. Das könnte z. B. über einen internen Dienst per Post oder Get erfolgen.

Warum auf den Knoten? Aus Datenschutzgründen soll nur die diskrete Information der Domäne übermittelt werden, nicht die exakten Koordinaten.

@Fungur hatte dazu mal diesen Algorithmus gefunden, ob er taugt, haben wir noch nicht überprüft: http://stackoverflow.com/questions/11716268/point-in-polygon-algorithm

Das ganze sollte wenige KB brauchen, damit es als Paket auf die Router aufgespielt werden kann.

Wer hätte Lust sich mal damit auseinander zu setzen? Es kann auch gerne in Lua oder irgendwas anderem kleinen geschrieben sein. Hauptsache es passt auf einen 841er. Und da ist nur verdammt wenig Platz drauf.

Grüße
Matthias

Sollte es nicht ausreichen dafür zu sorgen, dass die Koordinaten nicht exakt sind? Also entweder man rundet ausreichend viel oder man sorgt durch die Verwendung einer zufälligen Komponente für eine Streuung über bsplw. mehrere hundert Meter.

Das reduziert zum einen die Komplexität auf den Knoten und hat zum anderen weniger Probleme auf Knoten mit einer “wackeligen” Anbindung.

(Ich persönlich halte es für weitaus bedenklicher, dass Google dann weiß wo die Knoten stehen, als, dass wir wissen wo die Knoten stehen.)

1 Like

Die Knoten mit einer Meschanbindung sind egal, bei denen wissen wir eh, wo sie stehen, wenn wir wissen, wo der Uplinkknoten steht.

Weiß Google doch sowieso. Sonst könnten sie dir nämlich nicht sagen, wo er steht :).

Ich finde es nicht uncharmant das dezentral zu lösen. Das passt doch zum Freifunk-Konzept. Ich glaube, dass das ganze machbar ist.

Ich hab heute einfach mal angefangen was in Lua zubauen: https://github.com/FreiFunkMuenster/tools/blob/master/find_polygon.lua

Dachte mir, dass das vielleicht einfacher ist als C und ein Lua-Interpreter ist eh drauf. Es gibt auch eine kleine Bib für JSON und der Algorithmus, den Michael rausgesucht hatte, wird unter Lua genauso gut funktionieren. Einziges Risiko sind eventuell zu stark gerundete Gleitkommazahlen. Und ich weiß nicht, ob der Algorithmus mit Ringen klarkommt, also wenn innen noch was ausgeschnitten ist, wie es z. B. in der Domäne 01 der Fall ist. Letztendlich ist das aber egal. Wenn es einen Treffer für zwei Domänen bzw. Polygone gibt, wird man hoffentlich mit gesundem Menschenverstand sagen können, wo er hingehört.

Google lässt die Abfrage nur per HTTPS zu. Daher müssen wir umdenken. Ideen willkommen.

@Fungur hat uns einen kleinen HTTP-auf-HTTPS-Proxy geschrieben und das Skript ist soweit fertig. Ich habe es gerade mal auf einem Knoten getestet:

root@Freifunk-AS40:/tmp# lua find_polygon.lua 
51.9788721
7.4134594
Dieser Knoten liegt im Polygon domaene02.geojson.
Dieser Knoten liegt im Polygon domaene47.geojson.

Der Knoten steht in Havixbeck, die Ausgabe ist also korrekt.

Bleibt noch es richtig zu verpacken und per Cron ungefähr zweimal die Woche auszuführen. Vermutlich am Besten zu verschiedenen Zeiten, weil es so Helden gibt, de ihren Router nachts immer ausschalten.

1 Like

Inzwischen ist das Projekt abgeschlossen. Die Firmware 1.1.8 enthält das Programm und funktioniert.

3 Like