[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

Wer tiefer einsteigen will, findet weitere Möglichkeiten in der Dokumentation der APP.

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

Wegpunkt-Instanz

Die Wegpunkt-Instanz kann dafür genutzt werden, um

  1. bewegliche Wegpunkte über Beacons zu orten. Dabei funktioniert die Ortung mit allen Geräten, die mit dem übergeordneten OwnTracks-Hook verbunden sind. Befindet sich ein Smartphone in der Reichweite eines in der Owntracks-App eingerichteten Beacons, so wird die Position des Beacons auf die Position des Smartphones gesetzt. Dies geschieht letztmalig, wenn der Kontakt zwischen Smartphone und Beacon abbricht.

  2. übersichtlich darzustellen, welche mit dem übergeordneten OwnTracks-Hook verbundenen Geräte sich aktuell im Bereich des Wegpunktes/der Region aufhalten. Dazu muss der Wegpunkt auf allen Geräten den gleichen Namen haben. Betritt oder verlässt ein Gerät den Bereich des Wegpunktes, so wird die Anwesenheit in der Wegpunkt-Instanz aktualisiert.

Für die Einrichtung ist folgendes zu tun:

  • Eine OwnTracks-Waypoint-Instanz anlegen
  • Den Namen des zu überwachenden Wegpunkts festlegen
  • Festlegen, ob Positionsdaten und die Adresse angezeigt werden sollen
  • Bei beweglichen Beacons in der OwnTracks-App den Überwachungsradius auf „-1“ stellen!
  • Danach in der OwnTracks-App unter Einstellungen die Taste Sende Regionen drücken.

externe Daten-Instanz

Über diese Instanz können Objekte, die über externe Module wie Pado, EgiGeoZone, Geofency, MQTT und viele andere mehr getrackt werden, in Owntracks integriert und auf der Karte angezeigt werden. Einzige Voraussetzung ist, dass je eine Variable für den Längen- und den Breitengrad existiert.

  • Eine OwnTracks-external-Data-Instanz anlegen
  • Alternative 1: VariablenID mit json-formatierten Positionsdaten wählen. Die Daten müssen im Format {„lat“:52, „lon“: 10} abgelegt sein.
  • Alternative 2: Die Position über separate IDs für Längen- und Breitengrad aktualisieren.
  • Optional die zu überwachenden Orte mit Name, Koordinaten und Überwachungsradius festlegen.

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.

Geräte auf Karte

In der Konfigurationstabelle können alle Daten- und Wegpunkt-Instanzen konfiguriert werden, die auf der Karte angezeigt werden sollen. 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.

Orte auf Karte

In der unteren Konfigurationstabelle können Orte definiert werden, die auf der Karte angezeigt werden sollen. Anders als die Geräte haben die Orte feste Koordinaten, die in der Konfiguration festgelegt werden müssen. Will man Orte komfortable im Webfront verschieben, so ist das Häkchen bei Objekt bewegbar zu setzen. Die übrigen Einstellungen sind analog zu den Geräten auf der Karte.

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.

Objekte auf der Karte im Webfront bewegen

Ist diese Option in der Map-Instanz gewählt, so lassen sich die entsprechenden Orte wie folgt auf der Karte im Webfront bewegen:

  • Kurzer Mausklick oder Touch auf den Punkt in der Karte, an den ein Ort verschoben werden soll.
  • Jetzt erscheint ein Auswahlfenster der verschiebbaren Objekte.
  • Kurzer Mausklick oder Touch auf das zu verschiebende Objekt.
  • Jetzt werden die Koordinaten vom ersten Mausklick/Touch auf das Objekt übertragen und die Karte wird mit den neuen Daten neu aufgebaut.
  • Mit einem kurzer Mausklick oder Touch außerhalb des Auswahlfensters lässt sich der Vorgang abbrechen.

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

V1.07
Neu: Instanz für externe Positionsdaten
Neu: Besondere Orte auf der Karte konfigurierbar
Fix: Formatierung HTML-Boxen

V1.08
Fix: Device-Namen ausblenden
Fix: Farbe transparent

V1.09
Fix: RegEx für Safari
Neu: Aktuelle Adresse optional
Neu: Orte auf Karte verschiebbar

V1.10
Fix: iframe-Link für neue Visu
Fix: ungenaue Topic-Trennung

V1.11
Neu: Integration von Pado, EgiGeoZone, Geofency
Neu: Objekte für Zoombereich auswählbar

V1.12
Neu: Instanz für Wegpunkte und bewegliche Beacons

V1.13
Fix: ungültiger Statuscode

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: