livetracking mit owntracks

Begonnen von TWART016, 15 April 2019, 22:46:47

Vorheriges Thema - Nächstes Thema

andre07

Den Mqtt2 Server habe ich jetzt per allowed abgesichert mußte noch all mein Devices
entsprechend auf user/password umstellen.


defmod allowedmqtt2 allowed
attr allowedmqtt2 DbLogExclude .*
attr allowedmqtt2 basicAuth SHA256:4363AAD8:Tbb4L2Vf0fj1kEv5bnFF2EyqAoUZxZSxxxxxxxxxxx/Q
attr allowedmqtt2 room System
attr allowedmqtt2 validFor MQTTServer



Versucht per Owntracks eine Verbindung zu bekommen
im log von owntracks steht Benutzer oder password falsch.
(definitiv nicht falsch das andere Zeug funktioniert ja)
Wenn ich jetzt noch ssl aktiviere müßte bekämen meine anderen
clients Probleme da nicht alle das unterstützen.
Wahrscheinlich wäre es besser es per http in Verbindung mit osmand Server
zu realisieren wird ja von lifetracking mit unterstützt.

Andre

rudolfkoenig

Zitatim log von owntracks steht Benutzer oder password falsch.
Du kannst pruefen, was owntracks schickt, indem du beim MQTT2_SERVER verbose auf 5 stellst, und das Log pruefst.

Eine Option mit MQTT waere zwei MQTT2_SERVER Instanzen zu definieren, eine fuer den externen Zugriff mit Passwort und SSL, und eine fuer den internen Gebrauch, ohne Sicherung. "Bridging" kann mit dem rawEvents Attribut und zwei trivialen notifies (set other_server publish $EVENT) bauen.

andre07

Danke werde jetzt erst mal das log prüfen.
Mit dem rawEvents Attribut meinst du
Mqtt2  rawEvents  auf 1 setzen im Server, hab mich schon
gefragt wozu das gut sein soll.
Ich schicke also alles was von owntrack reinkommt
von Server1 zu Server2 und  der versorgt dann meine
Clients.Muss mir dann nur noch überlegen wie ich das
am besten konfiguriere.

Andre

andre07

Im log von Fhem findet sich dieses wenn ich versuche per ssl mich zu verbinden
2020.03.04 10:23:31 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:32 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:33 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:33 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:33 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:33 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:34 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:35 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)
2020.03.04 10:23:35 1: MQTT2_SERVER SSL/HTTPS error: No such file or directory  (peer: 192.168.178.42)

hier versucht mich local zu verbinden.
Was sucht er da wohl meine Certifikate ? keinen zugriff oder warum schreibt er das.

Andre

rudolfkoenig

Klingt so, als ob in /opt/fhem/certs kein Zertfikat liegt. Es braucht zwei Dateien, server-cert.pm und server-key.pm.
Die aktuelle Version von TcpServerUtils.pm versucht mit openssl ein selbstsigniertes Zertifikat anzulegen, falls keins gefunden wurde.

Otto123

#20
Ich mache mal einen neuen Template Vorschlag.
ich habe Android - der Funktionsumfang für Android und IOS ist unterschiedlich - deswegen schlage ich zwei Templates vor.
Das erste sozusagen als Basis

Edit Copy&Paste Fehler bereinigt
name:owntracks_device
desc:A device tracked by OwnTracks, basic Device for support Android and IOS
filter:TYPE=MQTT2_DEVICE:FILTER=CID~owntracks.*
order:O_01
par:TRACKER_ID;TrackerID;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,/([^/]+)/, ? $1 : undef }
par:DEV_ID;DeviceID;{ AttrVal("DEVICE","devicetopic",AttrVal("DEVICE","readingList","")) =~ m,/[^/]+/([^/:]+), ? $1 : undef }
par:WHICHROOM;Actual room of the device, defaults to OwnTracks; {AttrVal("DEVICE","room","OwnTracks" )}
attr DEVICE room WHICHROOM
attr DEVICE icon location_sign
attr DEVICE devicetopic owntracks/TRACKER_ID/DEV_ID
attr DEVICE jsonMap\
  acc:accuracy alt:altitude batt:batteryPercent lat:latitude lon:longitude vac:accuracyVertical vel:velocity\
  _type:lastUpdateType tst:timestamp tid:trackerId
attr DEVICE readingList\
  $\DEVICETOPIC.* raw\
  $\DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/event:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  $\DEVICETOPIC/waypoints:.* { my (%h,$cnt); $EVENT=~ s/(\{[^[]*?})/$h{"waypoint_".++$cnt}=$1/ge; \%h }
attr DEVICE getList\
  location:noArg raw $\DEVICETOPIC/cmd {"_type":"cmd","action":"reportLocation"}\
  waypoints:noArg raw $\DEVICETOPIC/cmd {"_type":"cmd","action":"waypoints"}
attr DEVICE setList  action:textField $\DEVICETOPIC/cmd {"_type":"cmd","action":$EVTPART1}\
  config:textField $\DEVICETOPIC/cmd {"_type":"cmd","action":"setConfiguration","configuration":$EVTPART1}\
  waypoints:textField $\DEVICETOPIC/cmd {"_type":"cmd","action":"setWaypoints","waypoints":{"_type":"waypoints","waypoints":[$EVTPART1]}}\
  mode:Quite,Manual,Significant,Move {my %h=(Quite=>'-1',Manual=>'0',Significant=>'1',Move=>'2');fhem("set $NAME config ".qq({"_type":"configuration","monitoring":$h{$EVTPART1}}))}\
x_raw_payload:textField { my $payload = $EVENT;$payload =~ s/$EVTPART0 //; qq($\DEVICETOPIC/cmd $payload)}
attr DEVICE userReadings\
  location:lat.* {ReadingsNum($name,'latitude',0).','.ReadingsNum($name,'longitude',0)},\
  connection:conn.* {my %h=(m=>'mobil',w=>'wifi',o=>'offline'); return $h{ReadingsVal('MQTT2_owntracks_mi6','conn','error')}},\
  place:event.* {ReadingsVal($name,'event','') eq 'leave'?'away':(ReadingsVal($name,'desc','nowhere'))}
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE model owntracks_device
attr DEVICE comment https://owntracks.org/booklet/tech/json/

Das zweite als Erweiterung. Ich lese hier als erstes die bereits existierenden Inhalte von jsonMap readingList und setList aus und ergänze diese. Wenn das mittels - par - so nicht gedacht war und es eine anderen Weg gibt, wäre es schön es zu wissen :)
Was damit nicht geht, ist vorher bei Bedarf das Basis Template zu setzen. Die par Zeilen werden offenbar immer am Anfang abgearbeitet, egal wo sie wirklich stehen. Aber das ist eben so.

Was ich nicht verstehe ist der filter :( ich versteh nicht wann der wirkt und wann nicht. Gibt es dazu irgendwo noch eine Erklärung? Ich habe da viel probiert und war hinterher nicht schlau.
name:owntracks_extend_IOS
desc:Extend the owntracks device for IOS Readings, use owntracks_device first
filter:TYPE=MQTT2_DEVICE:FILTER=model=owntracks_.*
order:O_02
par:JMAP;jsonMap;{my $s=AttrVal("DEVICE","jsonMap","");$s=~s/\n/\\\n/g;return $s}
par:READINGLIST;ReadingList;{my $s=AttrVal("DEVICE","readingList","");$s=~s/\n/\\\n/g;return $s}
par:GETLIST;GetList;{my $s=AttrVal("DEVICE","getList","");$s=~s/\n/\\\n/g;return $s}
attr DEVICE jsonMap JMAP\
  config__type:lastUpdateType event__type:lastUpdateType step__type:lastUpdateType beacon__type:lastUpdateType\
  bs:batteryState p:pressure t:trigger cog:direction\
  event_acc:event_accuracy event_lat:event_latitude event_lon:event_longitude\
  event_t:event_trigger event_tid:event_trackerId event_tst:event_timestamp\
  event_wtst:event_waypointCreationTimestamp\
  step_steps:steps_count step_from:steps_timestampBegin step_to:steps_timestampEnd step_tst:steps_timestampReq\
  beacon_acc:beacon_accuracy beacon_prox:beacon_proximity beacon_tst:beacon_timestampReq
attr DEVICE readingList READINGLIST\
  $\DEVICETOPIC/step:.* { json2nameValue($EVENT,'step_',$JSONMAP) }\
  $\DEVICETOPIC/beacon:.* { json2nameValue($EVENT,'beacon_',$JSONMAP) }\
  $\DEVICETOPIC/dump:.* { json2nameValue($EVENT,'config_',$JSONMAP) }
attr DEVICE getList GETLIST\
  steps:noArg raw $\DEVICETOPIC/cmd {"_type":"cmd","action":"reportSteps"}\
  config:noArg raw $\DEVICETOPIC/cmd {"_type":"cmd","action":"dump"}


Im Gegensatz zum Template von Loredo, schlage ich damit vor: die Waypoints (Standorte) in sich je Standort komplett als json String zu speichern. Genauso wären sie über set waypoint auch zu setzen.
Außerdem ist die Funktion eingebaut, die Betriebsart der App auf dem Smartphone verändern zu können.
Über ein userreading wird die Anwesenheit an einem Standort (Waypoint) gesetzt: place Damit hat man quasi die Anwesenheitserkennung und braucht dazu kein separates Device.
Man müsste das Log noch beeinflussen, das wird schnell groß wenn man nicht eingreift.

Mit dem raw Reading bin ich noch nicht glücklich.

Da das jetzt ein MQTT2 Template Thema wird, sollte ich das in MQTT2 neu anlegen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Zitat von: Otto123 am 11 Dezember 2020, 12:25:34
Das zweite als Erweiterung. Ich lese hier als erstes die bereits existierenden Inhalte von jsonMap readingList und setList aus und ergänze diese. Wenn das mittels - par - so nicht gedacht war und es eine anderen Weg gibt, wäre es schön es zu wissen :)
..gelobt sei, was funktioniert...

Bedenken habe ich allerdings in die Richtung, dass bestimmt irgendeiner auf die Idee kommt, das mehrfach zu machen ::) .

Zitat
Was damit nicht geht, ist vorher bei Bedarf das Basis Template zu setzen. Die par Zeilen werden offenbar immer am Anfang abgearbeitet, egal wo sie wirklich stehen. Aber das ist eben so.
Ja, jedes attrTemplate hat seine eigene "Kapsel"

Zitat
Was ich nicht verstehe ist der filter :( ich versteh nicht wann der wirkt und wann nicht. Gibt es dazu irgendwo noch eine Erklärung? Ich habe da viel probiert und war hinterher nicht schlau.
Er wirkt "immer". Das ganze hat aber nur Auswirkungen darauf, was du jeweils in der ?-Liste angezeigt bekommst, setzen (via Kommandozeile) geht immer. Wenn es "härter" sein soll, ist "prereq" das Mittel der Wahl, allerdings wird das nur ausgewertet, wenn AttrTemplate_Initialize() aufgerufen wird (typ.: einmalig bei FHEM-Start).
Daher klappt das auch mit den "versteckten" Sprachsteuerungstemplates...

Zitat
Da das jetzt ein MQTT2 Template Thema wird, sollte ich das in MQTT2 neu anlegen?
...mir ist das egal, ich lese auch hier mit; wer ist denn TE?

Generell fände ich in diesem Fall eine Lösung via RADIO_.* innerhalb eines attrTemplate passender. Der User muss dann auswählen, ob er das für Andoid (=> "kurze Konfiguration") oder IOS (lange) einrichten will, es wird dann eben so oder anders parametriert.
Kurz gesucht: auch in mqtt2.template gibt es was, das ggf. für einen nicht-ZWave-User einfacher zu verstehen ist: shelly1_w_energy_measuring. Da wird halt je nach Wahl des Users ein userReadings-Eintrag gemacht oder nicht. "option" ist eine Art "if"-Steuerung, "option:global" beendet den Modus.

Zitat
Mit dem raw Reading bin ich noch nicht glücklich.
Habe noch keine Idee, ob das besser ist, aber man könnte genausogut das erwünschte Hauptreading (z.B. waypoint_1 (?))in getList schreiben und auf raw verzichten (falls man es nicht für was anderes braucht). Kommt auch darauf an, was der "Schmerz" ist (mit dem Vorschlag würde z.B. halt in FHEMWEB nur der erste zurückgemeldet, statt das komplette Array).

Eines ist mir noch aufgefallen:
connection:conn.* {my %h=(m=>'mobil',w=>'wifi',o=>'offline'); return $h{ReadingsVal('MQTT2_owntracks_mi6','conn','error')}}
Müßte das nicht sein:
connection:conn.* {my %h=(m=>'mobil',w=>'wifi',o=>'offline',e=>'unknown'); return $h{ReadingsVal('MQTT2_owntracks_mi6','conn','e')}}

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Deine Lösung zum Userreading ist besser! bau die bitte ein.

Den Rest schau ich mir noch in Ruhe an. Vor allem RADIO
Aber ich war jetzt stolz auf die "Extension", die schwebt schon seit dem Sonos Thema in meinem Kopf :)

ZitatBedenken habe ich allerdings in die Richtung, dass bestimmt irgendeiner auf die Idee kommt, das mehrfach zu machen ::) .
Sind alle Templates gegen Missverständliche Anwendung geschützt?  ;D Aber ich habe da schon eine Idee ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Zitat von: Otto123 am 11 Dezember 2020, 14:10:36
Den Rest schau ich mir noch in Ruhe an. Vor allem RADIO
Kein Ding, und keine Eile!

Zitat
Aber ich war jetzt stolz auf die "Extension", die schwebt schon seit dem Sonos Thema in meinem Kopf :)
Die ist auch prinzipiell ok (zumindest, soweit ich das ungetesten beurteilen kann, oft steckt der Teufel ja im Detail...).

Aber du glaubst gar nicht, wie viele - im Prinzip funktionierende - Lösungen ich jetzt über die Zeit, in der ich an dem ganzen rumbastle, dann auch wieder verworfen oder radikal geändet habe...?
Aber erst mal was umsetzen, bis es funktioniert, wenn man es schon im Kopf hat, ist auf alle Fälle eine gute Vorgehensweise. Nur dann sieht man die Vor- und Nachteile ggf. wirklich.

ZitatSind alle Templates gegen Missverständliche Anwendung geschützt?  ;D
Nö. Aber "am Anfang" glaubt man noch, irgendwer würde die Beschreibung lesen oder auch nur rudimentär mitdenken. Gibt sich irgendwann...
Im Ernst: Was falsch gemacht werden kann, wird irgendwann falsch gemacht!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Ich hatte oben im Template irgendwie einen Copy & Paste Fehler.
tut mir leid  :-[
Anbei ein Patch
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Danke, das sieht jetzt erstmal gut aus, ich habe alles nochmal geprüft.
Und einen Wikieintrag gemacht: https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Owntracks_GPS_Tracking_in_FHEM

Ich feile noch an der Anwesenheitserkennung, die jetzt eingebaute Verwendung der Events von Owntracks ist nicht so ganz Fehlertolerant. Ich teste bei mir eine Alternative im userReadings:
place1:lastUpdateType:.location {ReadingsAge($name,'inregions_1',0) > 2 ?'away':(ReadingsVal($name,'inregions_1','nowhere'))}
Hier wird das location Update ausgewertet. Falls jemand dazu Ideen hat :)
Für die weitere Auswertung gibt es wieder viele Möglichkeiten, ich nehme derzeit ein PRESENCE Device im event Modus - der war für mich neu und ich wollte es mal probieren ;)
defmod OT_Mi6 PRESENCE event MQTT2_owntracks_mi6:place1:.away MQTT2_owntracks_mi6:place1:.zuHause
attr OT_Mi6 event-on-change-reading .*
attr OT_Mi6 room Status
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Hallo Otto,

seit gestern beschäftigt mich irgendwie die Frage ob ich nicht nur auf Owntracks setzen soll was die Anwesenheit zu Hause betrifft, ich meine das klappt bisher sehr gut und halt zeitiger wie die Rückmeldungen aus FRITZBOX und Unifi.

Jetzt les ich gerade nochmal den letzten Beitrag, warum hast du damals überhaupt ein zusätzliches PRESENCE-Device genutzt ?

Was spricht gegen einfach nur ein userReading ?

presence:lastUpdateType:.location {ReadingsAge($name,'inregions_1',0) > 2 ?'absent':'present'}

Hast du mittlerweile vlt. sogar noch eine andere Variante am laufen ?

Ich will auf jedenfall ein presence-Reading für ein ROOMMATE-Device und sparen natürlich auch, nicht nur hier das PRESENCE-Device, ich würd dann, wenn sie wirklich ersetzbar sind, auch auf die bisherigen FRITZBOX und Unifi-PRESENCE-Devices verzichten in Zukunft, so meine Gedanken zur Zeit, kann gut sein ich übersehe auch noch was  ;D.

Otto123

Hallo Thomas,

es läuft bei mir alle noch so wie im letzten Beitrag und auch immer noch so "nebenher". Das presence Device hatte keinen besonderen Grund, ich habe halt alle solchen presence Dinge in presence Devices :)
Sicher geht das auch in einem userReadings, Roommate habe ich nicht.
Ich bin seit einiger Zeit am Überlegen eine andere App zu testen, bin aber noch nicht dazu gekommen. owntracks hängt auf meinem Smartfone ab und an, dann muss ich es abschießen.
Die BT Erkennung läuft bei mir zu gut, da gibt es keinen Druck etwas zu ändern.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Hi, kurz, ist mir eben nebenbei so aufgefallen:
Zitat4804     connection:conn.* {my %h=(m=>'mobil',w=>'wifi',o=>'offline',e=>'unknown'); return $h{ReadingsVal('MQTT2_owntracks_mi6','conn','e')}},\