Koordinatenkonfiguration mit Tasker

From Freifunk Braunschweig
Jump to: navigation, search

Zielsetzung und Szenario: Ein Freifunkrouter soll an wechselnden Standorten (z.B. während eines Events) eingesetzt werden, wobei sich seine Position vor Ort aber nicht weiter verändert. Bei Inbetriebnahme soll die Position eines über WiFi/SSH verbundenen Smartphones im Router halbautomatisch konfiguriert werden. Auf einen angeschlossenen, stromverbrauchenden GPS-Tracker soll verzichtet werden. Die konfigurierten Koordinaten müssen bei einem Reboot des Freifunkrouters (zumeist an einem anderen Ort) nicht erhalten bleiben. Gelegentliche Koordinatenverluste aufgrund eines Systemupdates sind akzeptabel.

Voraussetzungen

  • Ein eingerichteter Freifunk-Router mit aktivertem SSH-Zugang.
  • Gerät mit Android als Betriebssystem.
    • Installierte App Tasker (kostenpflichtig)
    • Installiertes Tasker-SSH-Plugin zum Ausführen von Remote Commands via SSH welches RSA-Keyfile-Authentifizierung und Substitution von Tasker-Variablen unsterstützt:
      • Tasker SSH Command Launcher : kostenpflichtig, funktioniert
      • JuiceSSH Tasker Plugin: kostenpflichtig, keine Substitution von Tasker-Variablen möglich
      • weitere: noch nicht getestet (positive sowie negative Ergänzungen willkommen!)
    • Tasker-Profile: GpsFix, GpsLoc, SshNode und WifiNode.

Vorbereitungen

SSH-Keyfiles

Die Keyfiles mit den SSH-Keys sind auf das Android-Gerät zu übertragen. Der Pfad zu den Keyfiles wird in den Tasker-Profilen SshNode und WifiNode benötigt.

Tasker-Profile

Die folgenden Profile sollten auf einem nicht gerooteten Android-Smartphone funktionieren. Leider kann ohne Root-Rechte das GPS nicht automatisch ein- und ausgeschaltet werden. Folgende Tasker-Profile sind mit Tasker zu erstellen:

Tasker-Profil GpsFix

Bei eingeschaltetem GPS wird versucht ein GPS-Fix zu erhalten. Sobald ein erfolgreicher GPS-Fix vorliegt, werden die Variablen %LOC und %LOCTMS gesetzt.

  • Context → Ort
    • Latitude: 0 (Wert spielt keine Rolle)
    • Longitude: 0 (Wert spielt keine Rolle)
    • Netz: nicht gewählt
    • GPS: ausgewählt
    • Radius: 30m (Wert spielt keine Rolle)
  • A1: Task → Stopp

Tasker-Profil GpsLoc

Nach erfolgreichem GPS-Fix (Variable %LOCTMS gesetzt) wird das Profil GpsFix deaktiviert. Die Koordinaten in der Variable %LOC werden in %LOC1 (Latitude) und %LOC2 (Longitude) aufgeteilt. Die Koordinaten werden auf 5 Nachkommastellen, was in unseren Breiten einem knappen Meter Genauigkeit entspricht, gerundet in die Variablen %LAT und %LNG übertragen. Schließlich deaktiviert sich das Profil GpsLoc selbst.

  • Context → Ereignis → Variable → Variable setzen
    • Variable: %LOCTMS
  • A1: Task → Tasker → Profil Status
    • Name: GpsFix
    • setzen: aus
  • A2: Task → Variable → Variable Aufteilen
    • Name: %LOC
    • Teiler: ,
  • A3: Task → Code → Javascriptlet
    • Code:
      setGlobal('LAT',''+(Math.round(global('LOC1')*100000)/100000));
      setGlobal('LNG',''+(Math.round(global('LOC2')*100000)/100000));
    • Auto-Exit: ausgewählt
    • If %LOC1 > -90 And %LOC1 < 90 And %Loc2 > -180 And %Loc2 < 180
  • A4: Task → Tasker → Profil Status
    • Name: GpsLoc
    • setzen: aus

Tasker-Profil SshNode

Bei Setzen einer neuen Koordinate (%LNG wird überwacht) wird zunächst das Profil WifiNode deaktiviert. Die Koordinaten (%LAT und %LNG) werden via SSH auf dem Freifunkrouter gesetzt und das Sharing aktiviert. Dabei wird auf uci commit gluon-node-info verzichtet, damit die Koordinaten beim nächsten Reboot (an anderer Lokation) nicht erhalten bleiben. Ein Popup zeigt die neuen Koordinaten an. Schließlich deaktiviert sich das Profil SshNode selbst.

  • Context → Ereignis → Variable → Variable setzen
    • Variable: %LNG
  • A1: Task → Tasker → Profil Status
    • Name: WifiNode
    • setzen: aus
  • A2: Task → Plugin → Tasker SSH Command
    • Konfiguration:
      • Command to run on remote server:
        uci set gluon-node-info.@location[0].latitude=%LAT;
        uci set gluon-node-info.@location[0].longitude=%LNG;
        uci set gluon-node-info.@location[0].share_location=1;exit;
      • Server settings:
        • Hostname: [fe80::...(link-local IPv6)...%wlan0]
        • Port: 22
        • Username: root
        • Password: (leer)
        • Keyfile: /path/to/your/keyfile
        • Auth Type: Keyfile
    • If %LAT ist gesetzt And %LNG ist gesetzt
  • A3: Task → Alarm → Popup (Tasker)
    • "Location %LAT %LNG"
    • If %GPS ~ off
  • A4: Task → Tasker → Profil Status
    • Name: SshNode
    • setzen: aus

Tasker-Profil WifiNode

Das Profil wird durch eine WiFi-Verbindung mit dem Freifunk-Knoten ausgelöst. Ist das GPS ausgeschaltet, wird das Location-Sharing auf dem Knoten via SSH deaktiviert und ein Popup Location disabled angezeigt. Die Variablen %LAT und %LNG werden gelöscht. Ist das GPS eingeschaltet, werden die Profile SshNode, GpsLoc und GpsFix aktiviert.

  • Context → Status → Netzwerk → WiFi Verbunden
    • SSID: braunschweig.freifunk.net/freifunk.net/Freifunk
    • MAC: MAC-Addresse(n) des Freifunkrouters (mehrere mit / trennen)
  • A1: Task → Plugin → Tasker SSH Command
    • Konfiguration:
      • Command to run on remote server:
        uci set gluon-node-info.@location[0].share_location=0;exit;
      • Server settings:
        • Hostname: [fe80::...(link-local IPv6)...%wlan0]
        • Port: 22
        • Username: root
        • Password: (leer)
        • Keyfile: /path/to/your/keyfile
        • Auth Type: Keyfile
    • If %GPS ~ off
  • A2: Task → Alarm → Popup (Tasker)
    • "Location disabled"
    • If %GPS ~ off
  • A3: Task → Variable → Variable Lösche
    • Name: %LAT
  • A4: Task → Variable → Variable Lösche
    • Name: %LNG
  • A5: Task → Tasker → Profil Status
    • Name: SshNode
    • setzen: an
    • If %GPS ~ on
  • A6: Task → Tasker → Profil Status
    • Name: GpsLoc
    • setzen: an
    • If %GPS ~ on
  • A7: Task → Tasker → Profil Status
    • Name: GpsFix
    • setzen: an
    • If %GPS ~ on

Anwendung

Die Vorgehensweise zum Setzen und Löschen der Koordinaten unterscheidet sich lediglich darin, das vor dem Verbinden von Smartphone und Freifunkrouter via WiFi das GPS entweder ein- oder ausgeschaltet ist. Die Koordinaten gehen (beabsichtigterweise) bei einem Reboot verloren.

Koordinaten im Freifunkrouter setzen

  1. Freifunkrouter einschalten.
  2. GPS manuell auf dem Android-Gerät einschalten.
  3. Tasker-Profile GpsFix, GpsLoc und SshNode deaktivieren (optional).
  4. Tasker-Profil WifiNode aktivieren.
  5. Direkt mit dem Freifunkrouter via WiFi verbinden.
  6. Auf Popup "Location Latitude Longitude" warten.

Koordinaten im Freifunkrouter löschen

  1. Freifunkrouter einschalten.
  2. GPS manuell auf dem Android-Gerät ausschalten.
  3. Tasker-Profile GpsFix, GpsLoc und SshNode deaktivieren (optional).
  4. Tasker-Profil WifiNode aktivieren.
  5. Direkt mit dem Freifunkrouter via WiFi verbinden.
  6. Auf Popup "Location disabled" warten.

Anmerkungen

Die Koordinatenkonfiguration mit Tasker wurde erfolgreich von User:Lotch mit folgendem Setup getestet:

  • TP-Link WR841ND v9
    • Verpolungsschutzdiode im Router überbrückt um eine 5V-Spannungsversorgung zu ermöglichen.
    • Firmware: 0.8~stable-20151119 / gluon-v2014.2-987-g30677cd
    • SSH-Zugang aktiviert
  • Powerbank XTPower MP-U20000 als Stromversorgung
  • Adapter (Niedervolt-Stecker 5mm/2.1mm ↔ USB) und USB-Verbindungskabel zur Verbindung von Router und Powerbank
  • Samsung Galaxy S4 (ohne Root-Rechte)
    • Android 4.4.2
    • Tasker 4.8
    • Tasker SSH Command Launcher 1.1.5 (Tasker Plugin)