Modul: 98_livetracking - Geokoordinaten von OwnTracks / Life360 / Swarm (4Sq)

Begonnen von Markus M., 22 Mai 2015, 02:01:46

Vorheriges Thema - Nächstes Thema

Markus M.

FHEM kann euch nun endlich überall hin folgen :)

Wie bei Geofæncy geht es auch hier um Koordinaten, allerdings weniger um Trigger über Push Nachrichten sondern mehr um das kontinuierliche Aufzeichnen der eigenen Position.


Unterstützt werden folgende Dienste:
- OwnTracks über MQTT Device
- Traccar über OsmAnd integriert
- Swarm (FourSquare): Social Checkins, weit verbreiteter Dienst
  Nutze ich schon einige Jahre, kann durch definierte Venues auch sehr leicht als Trigger für Aktionen verwendet werden
- OpenPaths: Beliebter Dienst zum Selbst-Tracking mit hoher Datensicherheit
  Leider ist die Verfügbarkeit nicht sehr hoch und seit iOS11 funktioniert es eher schlecht als recht :(

- Life360: Familien-Tracking, ungetestet


Die Readings:
- location: Die GPS Koordinaten
- distance: Entfernung zum Zuhause in km, falls das Attribut home gesetzt ist
- place: Ort des letzten Swarm Checkins oder Name der OwnTracks Zone
- altitude: Meereshöhe der Koordinaten (OpenPaths, OwnTracks)
- accuracy: Genauigkeit
- velocity: Geschwindigkeit (OwnTracks)
- heading: Richtung (OwnTracks)
- deviceX: Client für OpenPaths und Swarm
- zone_n: OwnTracks Zone, active/inactive
- steps: Schritte/Tag (OwnTracks, iOS, request only)
- beacon: iBeacon UUID,major,minor (OwnTracks, iOS)
- beacon_n_proximity/accuracy/rssi: iBeacon Details
- id: Tracker ID (OwnTracks)
- doze: Doze Mode (OwnTracks, Android)

Set:
- owntracksMessage: Nachricht an OwnTracks Client (mit FHEM Header oder eigenem HTML Code)

Die Attribute:
- home: Referenzkoordinaten des Zuhauses zur Entfernungsberechnung
- swarmHome: von Swarm gemeldete Position des eigenen Zuhauses, falls vorhanden (Statische Ungenauigkeit scheint ein Privacy Feature zu sein)
- interval: Reload Intervall für OpenPaths/Swarm (mit Swarm bitte keinesfalls <5 Minuten setzen, die haben ein User- und Applicationlimit)
- roundAltitude: Rundung der Meereshöhe in Metern (z.B. 5)
- roundDistance: Rundung der Entfernung in Kilometern (z.B. 0.1)
- filterAccuracy: Mindestgenauigkeit für Positionsdaten in Metern (z.B. 400)
- owntracksDevice: Name des OwnTracks Devices (MQTT_DEVICE)
- zonename_n: Zonenname aus Owntracks zur Zuweisung der Zone Readings
- beacon_n: Empfang detaillierter iBeacon-Informationen (UUID,major,minor)


Für OwnTracks mit MQTT müssen folgende Subscriptions vorhanden sein:
- devicename für die Location
- event für Zonen
- beacon für Beacons
- cmd, msg, steps für Zusatzfunktionen


Den Token für Swarm bekommt ihr manuell hier:
https://foursquare.com/oauth2/authenticate?client_id=EFWJ0DNVIREJ2CY1WDIFQ4MAL0ZGZAZUYCNE0NE0XZC3NCPX&response_type=token&redirect_uri=http://localhost&display=wap (Parameter aus dem Callback kopieren)
Bei OpenPaths findet ihr die Keys auf der Übersichtsseite.


Swarm und OwnTracks laufen bei mir schon eine ganze Weile stabil, OpenPath funktioniert  nicht mehr und Life360 ist größtenteils ungetestet.
Wer das ganze mal testen möchte darf sich also nicht beschweren, wenn es ihm um die Ohren fliegt ;)

Viel Spass!
Markus


UPDATE: 2022-06-10
clearPlace Feature, OpenPaths entfernt
UPDATE: 2018-11-05
Reverse geocoding, added module to SVN
UPDATE: 2018-06-01
Battery Readings, fixes, documentation
UPDATE: 2017-04-14
AttrVal bugfix
UPDATE: 2017-01-16
Tracker ID & Android doze mode logging (OwnTracks)
UPDATE: 2017-01-15
Bugfixes
UPDATE: 2016-08-15
OwnTracks Message mit Featured Content ersetzt (Funktion wurde abgelöst)
UPDATE: 2016-02-06
iBeacon Details
UPDATE: 2016-02-01
OwnTracks message fix, message TTL
UPDATE: 2016-01-20
OwnTracks message/request [sl12], steps, beacons
UPDATE: 2016-01-20
filterAccuracy, fixed timestamps
UPDATE: 2016-01-16
OwnTracks zones
UPDATE: 2016-01-12
Places from OwnTracks enter/leave
UPDATE: 2015-07-28
Bugfix for timestamps
UPDATE: 2015-07-27
Logging, Bugfix
UPDATE: 2015-06-28
OpenPaths: JSON changes
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

smurfix

Ich sag dazu nur: Owntracks. Die App loggt nicht in irgendeine Cloud, sondern an deinen eigenen MQTT-Broker. Und FHEM kann mit MQTT reden.

slor

Danke Markus!
Endlich was, für das es auch Windows Phone Apps gibt.
Dort gibt es bislang kein Support für geofances.
Fhem auf Raspberry Pi 4
CCU3 mit RaspberryMatic mit HMCCU an FHEM
HMCCU, Telegram, Conbee2 und Hue/Tradfri/Osram Lampen AQARA Sensoren, HomeConnect

Markus M.

Zitat von: smurfix am 22 Mai 2015, 09:42:58
Ich sag dazu nur: Owntracks. Die App loggt nicht in irgendeine Cloud, sondern an deinen eigenen MQTT-Broker. Und FHEM kann mit MQTT reden.

Sieht interessant aus, scheint auch gleich noch die aktuelle Geschwindigkeit zu liefern.
Die Hürde für MQTT liegt aber eine ganze Stufe höher als einfach mal eben Zugangsdaten einzutragen und eventuell noch ein Perl Modul zu installieren.
Ich kann mir das bei Gelegenheit mal ansehen.
Ansonsten sehe ich aber nichts was dagegen spricht, die Daten bei OpenPaths zu haben - ganz im Gegenteil.


EDIT:
Ich hab leider wenig Zeit, mich in das Thema MQTT einzuarbeiten.
Wenn jemand eine Anleitung schreibt, wie man mit minimalem Aufwand Owntracks mit dem FHEM MQTT Modul verbindet, baue ich eine Integration in das Modul ein.

FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Markus M.

Ein kleines Update:

- Life360 bekommt jetzt auch nach dem Tageswechsel wieder Werte
- neues Reading accuracy (Life360, OwnTracks)
- OwnTracks kann integriert werden:
  Dazu muss man MQTT und ein MQTT_DEVICE für OwnTracks einrichten, das die Daten in einem Reading als Event liefert.
  Wenn man den Namen im Attribut owntracksDevice hinterlegt, werden die Daten vom Modul gelesen.
  Die App ist allerdings noch etwas verbesserungswürdig...

FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Markus M.

OpenPaths ist wieder da, zeigt aber leider nur alte Daten bis letzte Woche.
Die App scheint aktuell wohl nicht zu synchronisieren.

Ich nutze aktuell nebenher OwnTracks über das MQTT Modul.

Hier ein weblink mit dem ihr euren aktuellen Standort in FHEM visualisieren könnt, alle Bedienelemente geschickt abgeschnitten, iFrame nicht-interaktiv gesetzt so dass es wirklich nur ein Kartenausschnitt ist ;)
htmlCode {'<div style="width: 400; overflow: hidden; height: 300px;"><iframe src="https://www.google.com/maps/embed/v1/place?key=APIKEYFORGOOGLEMAPSEMBEDDED&q='.ReadingsVal('livetracking','location','').' " width="480" height="480" frameborder="0" style="pointer-events:none; border:0; margin-top: -100px; margin-left: -30px;"></iframe></div>'}
Ihr braucht nur noch euren eigenen Google Maps Developer Key.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

klausw

Hallo Markus,

ich habe gerade dein Modul auf mein Pi kopiert und möchte es mit Owntracks benutzen.
Die fehlenden Perl Module installiert:
sudo apt-get -y install libnet-oauth-perl
sudo apt-get -y install libmath-round-perl


wie muss das define aussehen?

derzeit habe ich:
define tracking livetracking dummy
und
attr owntracksDevice mqtt_pos
im Device mqtt_pos gibt es das reading position welches regelmäßig aktualisiert wird.

leider bleibt STATE auf ??? stehen
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

stromer-12

Ich benutze bei mir auf Android "MyLiveTracker" um meinen Geräten zu folgen.

Gesendet von meinem GT-I9295

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Markus M.

Zitat von: klausw am 11 Juni 2015, 12:18:42
wie muss das define aussehen?
derzeit habe ich:
define tracking livetracking dummy

Nur OwnTracks zu verwenden hatte ich nicht vorgesehen.
Im ersten Post ist eine aktualisierte Version, du kannst livetracking ohne Parameter definieren, also define tracking livetracking und dann das Attribut setzen.
STATE verwende ich grundsätzlich nicht für Readings, dafür gibt es stateFormat.
Eigentlich solltest du aber auch mit deiner Definition schon Daten sehen können, es sei denn mein Code funktioniert nicht ganz...
Wenn die neue Version immer noch nichts tut, gib deinem mqtt Device mal den Namen "owntracks" und löse ein Event aus.


Zitat von: stromer-12 am 11 Juni 2015, 21:00:54
Ich benutze bei mir auf Android "MyLiveTracker" um meinen Geräten zu folgen.

Sorry, gibt leider keine kostenlose iOS App und das Portal scheint nicht wirklich public zu sein.

Markus
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

stromer-12

Mit mylifetracker schicke ich mir mit der App die Geo-Daten und Akkustand direkt nach Hause.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

klausw

Hallo MArkus,

die neuste Version deines Moduls habe ich jetzt drin.

Definition:

define owntracks MQTT_DEVICE
attr owntracks IODev mqtt
attr owntracks stateFormat position
attr owntracks subscribeReading_position owntracks/klaus

define tracking livetracking
attr tracking owntracksDevice owntracks
attr tracking stateFormat location


state steht auch auf initialized.

Aber es werden keine Readings angelegt und im Log steht:

2015.06.13 23:55:50 2: WRONG TYPE $VAR1 = 'transmission-state: incoming publish received';
2015.06.13 23:55:50 2: WRONG TYPE $VAR1 = 'position: {"_type": "location", "lat": "50.6372028", "lon": "8.8236878", "tst": "1434232504", "acc": "20.0", "batt": "48"}';


Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Markus M.

Zitat von: klausw am 14 Juni 2015, 00:03:24es werden keine Readings angelegt und im Log steht:
2015.06.13 23:55:50 2: WRONG TYPE $VAR1 = 'position: {"_type":_"location", ...

Faszinierend, das Leerzeichen fehlt bei mir.
Nächster Versuch, siehe Anhang :)
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

klausw

Komisch, Owntracks sollte doch immer gleiche Formattierungen liefern.
Naja Software halt  8)

Das Modul wird jetzt gar nicht mehr geladen:
2015.06.14 11:50:51 1: reload: Error:Modul 98_livetracking deactivated:
Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 436, near "$altitudeRound)"
Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 569, near "$altitudeRound)"
Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 907, near "$dist)"

2015.06.14 11:50:51 0: Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 436, near "$altitudeRound)"
Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 569, near "$altitudeRound)"
Not enough arguments for main::round at ./FHEM/98_livetracking.pm line 907, near "$dist)"
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Markus M.

Ok, keine Updates mehr während ich nicht zuhause bin ;)
Heute Abend gibt es eine neue Version die dann hoffentlich funktioniert.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

klausw

Zitat von: Markus M. am 14 Juni 2015, 12:43:46
Ok, keine Updates mehr während ich nicht zuhause bin ;)
Heute Abend gibt es eine neue Version die dann hoffentlich funktioniert.
Sowas geht schief, das hätte ich dir gleich sagen können   ;D

In Zeile 23 habe ich
use Math::Round ();
zurück nach:
use Math::Round;
geändert.
Damit ist der Fehler weg und ich bekomme accuracy, battery und location als readings.
Im Log habe ich aber immer noch:
2015.06.14 13:09:57 2: WRONG TYPE $VAR1 = 'transmission-state: incoming publish received';

2015.06.14 13:09:57 2: tracking OwnTracks: 2015-06-14 13:10:01  {"_type": "location", "lat": "50.1372042", "lon": "8.6236961", "tst": "1434280201", "acc": "21.21", "batt": "76"}


Derzeit funktioniert es ja nur mit owntracksDevice owntracks
Hast du vor den Namen noch variabel zu machen?
Das wäre hilfreich, wenn mehrere Geräte Verwendung finden sollen.

Dann hätte ich noch zwei Vorschläge

Das Modul Math::Round ist vermutlich auf vielen Systemen (beim Pi weiss ich es) nicht standardmäßig vorhanden.
Was würdest du davon halten, stattdessen sptintf zu verwenden?
Damit lässt sich auch runden und es wird kein zusätzliches Modul benötigt.

Das Modul Net::OAuth wird, wenn ich es richtig gesehen habe nur von Life360 verwendet. Bei Owntracks ist es nicht notwendig.
Es ist möglich zu prüfen, ob das Modul existiert und dann nur eine Fehlermeldung auszugeben, wenn es auch benötigt wird. In diesem Fall muss es nicht zwingend installiert werden.

...
use strict;
use warnings;
use Time::Local;

use Math::Round;
#use Net::OAuth;

use URI::Escape;
use Data::Dumper;

my $libcheck_hasOAuth = 1;

sub livetracking_Initialize($) {
  my ($hash) = @_;
  my $name = $hash->{NAME};

  eval "use Net::OAuth;";
  $libcheck_hasOAuth = 0 if($@);

  $hash->{DefFn} = "livetracking_Define";
...


mit if( $libcheck_hasOAuth ); kannst du auch einzelne Attribute ausblenden:

  $hash->{AttrList} = "disable:1 ".
"roundAltitude ".
"roundDistance ".
"interval ".
"home ".
"swarmHome ".
# "life360_userid ".
"life360_circle ".
"owntracksDevice ".
$readingFnAttributes;

  $hash->{AttrList} .= "life360_userid " if( $libcheck_hasOAuth );


In der Define Subroutine wird mit:
$hash->{OAuth_exists} = $libcheck_hasOAuth if($libcheck_hasOAuth);
Ein Internal angelegt, auf welches du im Definierten Deviece Zugriff hast.

Nun kannst du mit if ($hash->{OAuth_used}) vor Verwendung prüfen ob das Modul auch geladen ist





RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280