[Modul] OwnTracks - Anwesenheitserkennung und Live-Tracking

Modul zur Nutzung von OwnTracks-Informationen zur Anwesenheitserkennung oder zum Live-Tracking von mobilen Endgeräten mittels der OwnTracks-App. Auf einer OpenStreetMap kann die Position aller konfigurierten Geräte live verfolgt werden. Dabei wird der Kartenausschnitt automatisch so angepasst, dass alle getrackten Geräte zu sehen sind.

Voraussetzung

  1. Installation der OwnTracks-App auf einem mobilen Endgerät.
  2. Externe Verbindung zum IP-Symcon-Server z.B. per Connect-Schnittstelle.

Konfiguration der App auf dem mobilen Endgerät

  • Den Modus auf HTTP einstellen
  • Als Adresse ist https://meineURL.de/hook/Hookname einzutragen.
    (Der Hookname wird in der OwnTracks-Hook-Instanz festgelegt)
  • Der Zugang sollte über UserID und Password geschützt werden
  • Die DeviceID festlegen
  • Zu überwachende Region(en) festlegen
    Achtung: diese werden der DeviceID zugeordnet. Ein Ändern der DeviceID führt zum Verlust der Regionen.
  • Unter Karte das Sendeverhalten einstellen. Bei mir hat sich die Einstellung Wesentlich (IOS) bzw. Signifikante Änderung (Android) bewährt

Installation und Konfiguration des Moduls

Die Installation der Bibliothek wird hier beschrieben.

Daten-Instanz

  • Eine OwnTracks-Data-Instanz anlegen
  • Topic owntracks/UserID/DeviceID festlegen
  • Festlegen, ob Positionsdaten übernommen werden sollen
  • Wenn noch keine OwnTracks-Hook-Instanz existiert, wird diese automatisch im Bereich der I/O-Instanzen angelegt
  • Die OwnTracks-Hook-Instanz mit Hookname, UserID und Password aus der App konfigurieren.
    Der Hookname darf noch nicht in Verwendung sein, muss sich also von allen bisherigen Hooknamen unterscheiden.
  • In der OwnTracks-App unter Einstellungen die Taste Sende Regionen (IOS) drücken

Map-Instanz

Zusätzlich zur Data-Instanz kann eine Map-Instanz angelegt werden. Auch diese wird mit Hookname, UserID und Password konfiguriert. Der Hookname darf wie oben noch nicht in Verwendung sein, muss sich also von allen bisherigen Hooknamen unterscheiden. Darüber hinaus muss eingestellt werden, wie groß die Karte im WebFront erscheinen soll. In der Konfigurationstabelle können dann alle Daten-Instanzen, die auf der Karte angezeigt werden sollen, konfiguriert werden. Dabei können neben Anzeigename und -farbe auch ein persönliches Icon gewählt und dessen Darstellungsgröße eingestellt werden. Mit der Reihenfolge wird festgelegt, welches Icon auf der Karte zu oberst liegt, wenn diese sich überschneiden. Zusätzlich zu den Daten-Instanzen von OwnTracks kann auch die Location aus den Kern-Instanzen als „zuhause“ angezeigt werden.

Sicherung des Zugangs

Da die Instanzen über WebHook auch aus dem Internet erreichbar sein müssen, sind diese mit Benuternamen und Passwort gesichert. Gibt man dreimal die Zugangsdaten falsch an, so wird der Zugang für diese IP gesperrt. Nach insgesamt 10 Fehlversuchen wird der Zugang für alle IPs für 24 Stunden gesperrt. Um den Zugang wieder zu entsperren, bitte in der Instanz die Sperre zurücksetzen-Taste drücken.

Dokumentation

Die Dokumentation ist hier zu finden.

2 „Gefällt mir“

Changelog

V1.00
Grundversion

V1.01
Fix: Anpassung für Android-Geräte

V1.02
Fix: Optimierung von ReceiveData (Fehlermeldung bei IOS)
Neu: Unterstützung von NextTracks

V1.03
Neu: Map zur Anezeige der Gerätepositionen
Neu: Einloggen per Secret-Code
Neu: Sperren des Zugangs nach 3 Fehlversuchen in 24h auf einer IP-Adresse und 10 Fehlversuchen in 24h insgesamt
Neu: OTR_GetSecret(12345) zum Anzeigen des Secret-Codes
Neu: mehrere Hooks mit unterschiedlichem Zugang möglich

V1.04
Fix: Bereinigung des Quellcodes
Fix: Anpassung der Dokumentation

V1.05
Neu: persönliche Icon für die Kartendarstellung
Neu: Anzeige der Home-Location in der Karte

V1.06
Fix: Bei gesperrtem Zugang werden Daten verarbeitet

Ich hab das gleich mal ausprobieren müssen :slight_smile:
Gratuliere, funktioniert.
Ein paar Fragen hätte ich

  • Die Position als String ist nett, aber wäre es nicht einfacher, die einzelnen Werte als Variable anlegen zu können?
  • Und jetzt kommts: Eine definition vom Geofence auf basis der IPS Daten mit der Möglichkeit einen Durchmesser eingeben zu können und wenn sich das Device innerhalb dieses Bereichs befindet, dann könnte eine Variable auf „Anwesend“ oder auf „Abwesend“ gesetzt werden :smiley:
  • Und ein Hit wäre, das ganze auf einer Karte anzeigen zu können. Aber ich glaub das geht, zumindest mit Google Maps. Aber gibt ja auch andere anbieter. Openstreetmap fällt mir da ein.
  • In der Android App finde ich in den Einstellungen kein „Sende Regionen“. Ich hab in der Kartenanzeige lediglich einen Pfeil nach oben mit darüber liegenden Strich. Damit sendet die App die aktuellen Daten, was auch funktioniert.

Ansonsten echt toll.

prima, dass es bei Dir funktioniert. Ich lese heraus, dass Du Android verwendest. Das konnte ich bisher nicht probieren.

nein das ist falsch. Du musst als Topic „owntracks/UserID/1“ eingeben. Wobei die UserID diejenige ist, die du in der Hook-Instanz als Benutzer eingegeben hast.

Da gibt es sicherlich viele unterschiedliche Geschmäcker. Wenn Du irgendetwas anderes möchtest, dann einfach die Daten aus „Position“ holen und dann selbst formatieren.

			$position = json_decode(GetValueString(12345));
			$url = "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=".str_replace (",",".",$position->lat)."&lon=".str_replace (",",".",$position->lon);
			$result = json_decode(file_get_contents($url));

Auf der Karte anzeigen geht bei IOS ganz simple über einen html-Code

<a href="maps://?q==@51.12345,11.12345">Karte</a>

Auf Android sollte das ähnlich funktionieren. Da kenne ich den Befehl aber nicht.

Diesen Punkt habe ich nicht verstanden. Der müsste eigentlich unter Einstellungen zu finden sein. Ansonsten die Regionen erst anlegen, wenn du bereits die Instanzen eingerichtet hast. Dann geht es auch.

Ja, ich verwende einen Androiden

Ja, das hab ich aus meinem Beitrag gelöscht, weil ich es falsch verstanden hab :wink:

Klar, das werd ich mal testen. Danke.

Ich dachte da eher ans Webfront. Die App ist da nachrangig.

Nö, da is nix



Meinst du „Orte“?

ja, die heißen bei IOS „Regionen“.

Gut, ich hab da mal meine aktuelle Position eingetragen. Radius 30m (ich weiß, sehr klein). In der App bekomme ich angezeigt, dass ich da drinnen bin. In IPS ändert sich da aber nicht.
Mit „Wesentlicher Änderung“ meinst du wahrscheinlich diesen Pfeil


Wenn das so ist, dann heißt das unter Android „Signifikante Änderung“

Und ja, man weiß jetzt ungefähr, wo ich wohne. Ich kann damit leben.

das sollte dann aber bei der nächsten Aktualisierung durch die App dann passen.

passe ich in der Beschreibung an.

Und was sollte ich sehen? Die Positionsdaten kommen jetzt auch rüber.

Ah, im Debug hab ichs gefunden

"inregions":["zu Hause"]

Das kommt aber nicht an. Also im Debug schon, aber in keiner Variable. Wenn das irgendwo ankommt, dann erübrigt sich natürlich mein Wunsch vom Geofence.

Vielleicht noch als Anregung (hab mich damit schon mal vor Wochen beschäftigt), die SSID könnte durchaus als zusätzliche Prüfung der Anwesenheit interessant sein.

Du solltest zwei Variablen sehen. Die eine ist eine Bool und heißt bei dir „zu Hause“ und die andere ist eine Float und heißt bei dir „Entfernung nach zu Hause“.
Sollte es diese bei Dir nicht geben, dann bitte deinen Ort „zu Hause“ nochmal in der App löschen und neu eingeben. Dann sollte er an IP-Symcon gesendet werden und bei dir im Objektbaum erscheinen.

Der Vorschlag ist gut, aber bei OwnTracks tatsächlich nicht erforderlich, da ohnehin die wesentlichen Änderungen gepostet werden.

Nein, tut mir leid. Da kommt nichts. Ich hab den Ort gelöscht und auch ohne Leerzeichen (zuHause) eingegeben. Ebenso alle Variablen gelöscht und in der App auf den Pfeil (mittleres Symbol in der Kartenansicht) getippt. Daten kommen und Variablen werden angelegt. Von zuHause keine Spur.

hmm, das ist ja merkwürdig. Kannst Du mal gucken, was im Debug ankommt, wenn Du einen neuen Ort anlegst? Da sollte dann etwas wie folgt kommen:

25.11.2021, 22:12:50 |     Received Payload | {"rad":30,"tst":1637874758,"_type":"waypoint","rid":"615355","lon":11.12345,"topic":"owntracks\/test\/Geraet1\/waypoint","lat":53.12345,"desc":"Neuer Ort"}

Gesentet wird erst, wenn ein Radius angegeben ist. Ergebnis gerne auch als PN.

Ja, da kommt was .

25.11.2021, 22:18:28 |     Received Payload | {"_type":"waypoint","desc":"test","lat":49.3843051,"lon":19.6111118,"rad":100,"topic":"owntracks\/helmut\/G1\/waypoints","tst":1637875096}

Aso. Das heißt ich muss den Bereich erstmal verlassen, erst dann werden die Variablen angelegt. Richtig? Etwas schwierig derzeit im Lockdown in Österreich :smiley: . Dann muss der Hund dafür herhalten :wink:

Ich hab dir meinen Debug mit den Rohdaten per PM geschickt.

ok, die ID für den Ort fehlt…
kannst Du die in der App irgendwo angeben?

UPDATE: Habe gerade nochmal nachgelesen. Das gibt es bei Android nicht… passe ich an.

Nein, das sieht bei mir so aus

siehe Update oben. Passe ich an.

JETZT verstehe ich das. In der Android App ist bei den Orten rechts oben ein Menü (drei Punkte übereinander) und es heißt „Orte veröffentlichen“

Du könntest im Zweifel den Namen als ID verwenden. Schon klar, String und nicht numerisch, aber wenn du die ID brauchst.

V1.01 Fix: Missing RID and INRID at Android
So, Anpassung für Android ist jetzt eingepflegt. Bitte mal probieren, ob es funktioniert.


Perfekt, jetzt ist es da. Vielen Dank. Ich bastle grad an einer Karte mit OpenStreetmap und der Berechnung der bbox. Anzeige als iFrame. Schaut bis jetzt ganz gut aus.


Ich hab mal das draus gemacht :smiley: