[Modul] OwnTracks - Anwesenheitserkennung und Live-Tracking

kein Problem. Habe ich auch nicht als Kritik empfunden. Fand ich von Apple früher auch besser gelöst, zumal der Akkuverbrauch durch die App nur minimal ist.

Genau diese Anwendung hatte ich mit dem json-String der Position im Kopf. Ich dachte da allerdings an ein Speichern in IPS. Dann kann man sich mit einem einfachen Skript daraus die Tages-, Wochen- oder SonstWas-Route erzeugen.

So hab ich es in der ersten Version gemacht. Ich wollte allerdings in der Listansicht die vollständige Adresse (Standort) dabei haben. In deinem Modul hab ich gefunden, wie du das gemacht hast. Funtkionier auch. Aber bei 100 Datensätzen wird das sehr langsam. Das Skript ist teilweise bis zu einer Minute gelaufen, bis die Anzeige aktualisiert wurde.
In der SQL Tabelle Speichere ich diese Werte zusätzlich ab. Neben den Koordinaten. Somit dauert der Aufbau der HMTL Tabelle nur mehr einen Bruchteil der Zeit. Aber natürlich gehts auch mit dem Archiv.

1 „Gefällt mir“

Ich bin mir sicher du kennst das, aber damit kannst GPX Daten in OSM anzeigen
https://wiki.openstreetmap.org/wiki/DE:Openlayers_Track_example

nein, kannte ich bisher noch nicht. Da kann man was draus machen. Gucke ich mir mal in Ruhe an.

Ja, kann man. Die HTML wird in einer Variable gespeichert. „lat“ und „lot“ versehe ich mit %lat% und %lon%. Ebenso die URL mit %url%. Die Strings werden im Skritp mit den richtigen Werten versehen - lat und lon mit den ersten Werten aus dem Verlauf. Die GPX wird aus den Positionsdaten erzeigt. Der Aufbau ist relativ einfach. Beides (HTML und GPX) wird im im Webfront Verzeichnis (Root vom Webserver) gespeichert. Die HTML mit iframe in einer HTML-String Variable einbinden und anzeigen - fertig :slight_smile: .


Der Verlauf und die GPX werden immer dann erzeugt wenn was neues rein kommt. Ebenso, wenn das Datum geändert wird. Mit dem Schalter „Kartenanzeige“ wird wischen der aktuellen Position und dem Verlauf umgeschaltet. Die Werte der Kartendaten (aktuelle Position und Verlauf - beides String mit dem HTML Inhalt der Karte) wird je nach Auswahl in eine dritte Variable geschrieben. Nur diese eine dritte Variable wird im Webfront angezeigt.

sehr cool gemacht. Gefällt mir außerordentlich. Trackst Du nur Dich selbst oder mehrere Personen? Ich denke da an eine Darstellung „Position der Familienmitglieder“ (müssen natürlich alle zustimmen :wink:) und dann natürlich „Wo überall war ich eigentlich heute/gestern/die Woche?“.

Ich tracke mich und meine Frau. Sie hat mit der verehelichung die stillschweigende Zustimmung für alles gegeben :smiley:
Da jede „Person“ ein eigene Dateninstanz hat, hab ich das im Webfront auch so aufgeteilt. Also zwei Menüeinträge. Die notwendigen Variablen für meine Darstellung sind für jede Person extra angelegt.
Man könnte aber eventuell mit der GPX Datei und Wegpunkten (oder was anderes) die Darstellung auf einer Karte durchaus realsieren. Dass dann mehrer Marker mit Namen angezeigt werden.

image
Die Variablen mit „eigen“ sind von mir.
Strasse, Ort, Land, Uhrzeit verwende ich für die Anzeige im Webfront
History Datum und History für die Anzeige des Verlaufs als HTML Tabelle
Karte Verlauf enthält den HTML Code für die Kartenanzeige des Verlaufs
Karte aktuelle Position den HTML Code für die aktuelle Position
Kartenanzeige ist die Auswahlvariable wo man zwischen aktueller Position und Verlauf wechseln kann
Karte Anzeigen enthält den HTML Code entsprechend der Auswahl. Diese wird im Webfront angezeigt

Sollte jemand oder du @Silberstreifen die HTML Vorlage für den Verlauf verwenden wollen, ist folgende Änderung in der HMTL notwendig, damit das auch mit der ipmagic URL funktioniert
alt

<script src="https://www.openlayers.org/api/OpenLayers.js"></script>

korrigiert

<script src="https://openlayers.org/api/2.13.1/OpenLayers.js"></script>

Wird die originale URL verwendet, meckert Chrome/Edge und wahrscheinlich alle anderen auch, dass etwas unsicheres geladen werden soll und das wird blockiert. Es wird nichts angezeigt. Leider kann es mit dieser Methode passieren, dass die js-Datei irgendwann nicht mehr da ist, dann muss man die URL korrigieren.

die Karte wird kommen. Ich hänge noch ein bisschen am Autozoom. Da weiß ich noch nicht, wie und ob das umsetzbar ist. Mehrere Marker habe ich schon auf der Karte.

Die Karte kann natürlich auch zur Anzeige der Aktuellen Position verwendet werden. Ich meine die, die in dem verlinkten Artikel verwendet wird. Man kann sogar ein eigenes Bild für den Marker verwenden.

Das hört sich sehr cool an :slight_smile:

Den Zoomfaktor hab ich variabel gemacht. Den könnte ich dynamisch ändern. Bewährt hat sich bei mir der Wert 18.
Wo ich meine Probleme hatte war mit der Zentrierung. Dafür gibt es eine Berechnung, die ich gefunden habe.

    $zoom=getvalue(28746); /*Variable für den Zoom 18*/
    $tilesize=getvalue(14138); /*Variable für Tilesize 128*/
    $width=getvalue(41449);/*Variable für die Breite 900*/
    $height=getvalue(25513);/*Variable für die Höhe 600*/
    
    $xtile = floor((($position->lon + 180) / 360) * pow(2, $zoom));
    $ytile = floor((1 - log(tan(deg2rad($position->lat)) + 1 / cos(deg2rad($position->lat))) / pi()) /2 * pow(2, $zoom));

    $xtileleftupper=($xtile*$tilesize - $width/2) / $tilesize;
    $ytileleftupper=($ytile*$tilesize - $height/2) / $tilesize;

    $xtilerightlower=($xtile*$tilesize + $width/2) / $tilesize;
    $ytilerightlower=($ytile*$tilesize + $height/2) / $tilesize;

    $n = pow(2, $zoom);
    $lon_deg_leftupper = $xtileleftupper / $n * 360.0 - 180.0;
    $lat_deg_leftupper = rad2deg(atan(sinh(pi() * (1 - 2 * $ytileleftupper / $n))));

    $lon_deg_rightlower = $xtilerightlower / $n * 360.0 - 180.0;
    $lat_deg_rightlower = rad2deg(atan(sinh(pi() * (1 - 2 * $ytilerightlower / $n))));

    $html="<center><iframe width=\"".$width."\" height=\"".$height."\" 
    frameborder=\"0\" 
    scrolling=\"no\" 
    marginheight=\"0\" 
    marginwidth=\"0\" 
    src=\"https://www.openstreetmap.org/export/embed.html?bbox=".number_format($lon_deg_leftupper,12,".","")."%2C".number_format($lat_deg_leftupper,12,".","")."%2C".number_format($lon_deg_rightlower,12,".","")."%2C".number_format($lat_deg_rightlower,12,".","")."&amp;layer=mapnik&amp;marker=".number_format($position->lat,12,".","")."%2C".number_format($position->lon,12,".","")."\" 
    style=\"border: 0px solid black\">
    </iframe></center><center><small><a target=\"_blank\" href=\"https://www.openstreetmap.org/?mlat=".number_format($position->lat,12,".","")."&amp;mlon=".number_format($position->lon,12,".","")."#map=16/".number_format($position->lat,12,".","")."/".number_format($position->lon,12,".","")."\">Größere Karte anzeigen</a></small</center>";
    SetValue($KarteID/*ID der Positionskartenhtmlvariable*/,$html);

So wird bei mir die sog. BBOX berechnet. Vielleicht kannst du damit ja was anfangen.

Hallo,
irgendwas passt noch nicht bei mir.
In der APP owntrack wird eine Meldung angezeigt (HTTP Status Code 401 …)
-das Feld "Secret encryption key ist leer
-in IPS habe ich eine OwnTrack Data Instanz mit dem Topic "owntracks/meine UserID/meine DeviceID und Zeige Positionsdaten = an

  • bei i/O Instanzen habe ich einen OwnTracks Hook mit BenutzerID und Passwort
  • und eine OwnTracksHook (#ID der Data Instanz) mit BenutzerID und Passwort

Regionen Senden bewirkt nicht, dass sich Variablen anlegen.
Radius verändern hat kein Ergebnis gebracht.
Spazieren gegangen bin ich nicht.
Hat jemand einen Tipp?

wenn die 401 kommt, dann ist dein Benutzername und/oder Passwort falsch. Bitte nochmal kontrollieren, ob alles richtig und passend eingeben wurde. Du kannst die Adresse auch mit einem normalen Browser testen. Dann siehst Du, ob es mit deinem Benutzernamen und Passwort funktioniert.

Nutzt du Android oder IOS? Wenn du Android nutzt, nimmst du die Owntracks- oder die Nexttracks-App?

Hallo Silberstreifen,
bin mit IOS unterwegs und hatte tatsächlich bei Usernamen/ Passwort einen Fehler.
Es bildet sich leider weiterhin keine Variable.
Den Debug Dump der Einstellung und der Region habe ich Dir mal per PN zugeschickt. Ich glaube da sind bei der Topic Definition zusätzliche backslashs drin.
IPS und die Owntracks App wurden neugestartet.

danke für den Dump. Ich habe die Daten ausgewertet und sie sind einwandfrei. Hast du ggf. noch keine
OwntracksData-Instanz erzeugt? Die Variablen werden dort angelegt. Die OwntracksData-Instanz kann an beliebiger Stelle im Objektbaum angelegt werden und wird automatisch mit der Hook-Instanz verbunden. Wenn du mehr als eine OwntracksHook-Instanz hast, bitte die weiteren Instanzen löschen. Aktuell wird nur eine Hook-Instanz unterstützt.

Aaaah, ich hatte 2 Hookinstanzen und die Data war mit der falschen Instanz verbunden. Nach dem Löschen habe ich meine Region als Boolvariable automatisch angelegt bekommen.
Wie erzeugen sich die anderen Variablen, manuell - oder muss ich erstmal spazieren gehen, damit sich mein Aufenthaltsort verändert?

sehr schön. Die anderen Variablen werden angelegt, sobald deine App die aktuellen Positionsdaten sendet. Das kannst du in der App auch manuell auslösen, indem du in der App auf die Karte gehst und dort rechts oben auf den Pfeil nach oben drückst.

Passt alles!
Vielen Dank für das Modul und die Hilfe.

V1.03 ist jetzt verfügbar

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

Nach dem Update bitte beim OwnTracks-Hook den Hooknamen setzen (owntracks).
Ich bin gespannt auf euer Feadback
Grüße
Jürgen

Gespannt ich bin, wie die Karte aussieht.
Die Karte ist eine eigene Instanz :wink:
Bei der Karte ist der Name des Hooks nicht „owntracks“, sonder die URl „/hook/owntracks“. Zumindest lässt er mich das abspeichern. Ist etwas irreführend, weil im OwnTracks-Hook das Feld auch „Name des Hooks“ heißt aber hier nur „owntracks“ einzutragen ist.