FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: Jamo am 06 November 2022, 23:28:22

Titel: owntracks reportSteps auf iPhone
Beitrag von: Jamo am 06 November 2022, 23:28:22
Hallo,
ich möchte mir von Owntracks vom iPhone 14 die Schritte reporten lassen, das klappt leider nicht. Im owntracks Booklet unter Docs » Features » Pedometer habe ich folgendes commando gefunden:mosquitto_pub -q 2 -t owntracks/jj/5s/cmd -m '{"_type" : "cmd", "action": "reportSteps"}'
Hier im Forum habe ich folgenden link von Otto gefunden:https://forum.fhem.de/index.php/topic,99666.msg1109556.html#msg1109556

Wenn ich das wie von Otto vorgeschlagen, sowohl in setlist als auch getlist einsetze, funktionierts aber nicht. Kann mir jemand helfen?
define owntracks MQTT2_DEVICE fhemiPhone
attr owntracks IODev MQTT2SRV
attr owntracks autocreate 0
attr owntracks devStateIcon none
attr owntracks devStateStyle style="text-align:left"
attr owntracks event-on-change-reading event,iPhone
attr owntracks getList steps:noArg steps owntracks/fhem/iPhone/cmd {"_type":"cmd", "action":"reportSteps"}
attr owntracks group HOMESTATE
attr owntracks readingList fhemiPhone:owntracks/fhem/iPhone:.*          iPhone\
fhemiPhone:owntracks/fhem/iPhone/event:.*    event\
fhemiPhone:owntracks/fhem/iPhone/cmd:.*      cmd\
fhemiPhone:owntracks/fhem/iPhone/beacon:.*   beacon\
fhemiPhone:owntracks/fhem/iPhone/step:.*     step\
fhemiPhone:owntracks/fhem/iPhone/steps:.*    steps\
fhemiPhone:owntracks/fhem/iPhone/waypoint:.* waypoint\
fhemiPhone:owntracks/fhem/iPhone/ibeacon:.*  ibeacon
attr owntracks room Favourites,Mqtt
attr owntracks setList steps:noArg owntracks/fhem/iPhone/cmd {"_type":"cmd", "action":"reportSteps"}
attr owntracks verbose 0


Wenn ich "set owntracks steps"ausführe passiert gar nichts, wenn ich "get owntracks steps" ausführe, bekomme ich immer folgende Fehlermeldung:Timeout reading answer for owntracks/fhem/iPhone/cmd {"_type":"cmd", "action":"reportSteps"}
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 06 November 2022, 23:44:44
Hi,

Das sieht mir jetzt alles händisch aus?
Warum lässt Du nicht erstmal ein Device anlegen (oder ist das automatisch erzeugt?) und wendest die beiden Templates owntracks_device und owntracks_extend_IOS an?
https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#Owntracks_GPS_Tracking_in_FHEM

Da ist der Part mit get Steps doch sogar drin?!

Gruß Otto
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 00:13:48
Hallo Otto,
danke schonmal, ja das ist haendisch/uralt. Habs gerade aber nochmal per autocreate gemacht, die beiden templates owntracks_device und owntracks_extend_IOS werden bei mir nicht angezeigt.
Wie bekomme ich die?
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 07:46:48
Das Problem wird der Filter sein. Das Template geht davon aus, dass die CID mit owntracks_ beginnt. Ich nehme an, Du hast das Bridge device nicht nach Wiki eingerichtet. Das Bridge device erzeugt eine passende CID in der DEF.
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 08:59:11
Hallo Otto,
so das hat schon mal geholfen, nachdem ich das device renamed hatte, mit einem owntracks_, finde ich das owntracks_device template (siehe list, das funktioniert schon mal),
aber das template owntracks_extend_IOS ist immer noch verborgen. Hast Du noch eine Idee?

PS: In der setlist ist ein Schreibfehler drin: Quite -> Quiet


define MQTT2_owntracks_fhemiPhone14 MQTT2_DEVICE owntracks_fhemiPhone14
attr MQTT2_owntracks_fhemiPhone14 comment https://owntracks.org/booklet/tech/json/
attr MQTT2_owntracks_fhemiPhone14 devicetopic owntracks/fhem/iPhone14
attr MQTT2_owntracks_fhemiPhone14 getList location:noArg raw $DEVICETOPIC/cmd {"_type":"cmd","action":"reportLocation"}\
  waypoints:noArg raw $DEVICETOPIC/cmd {"_type":"cmd","action":"waypoints"}
attr MQTT2_owntracks_fhemiPhone14 icon location_sign
attr MQTT2_owntracks_fhemiPhone14 jsonMap acc:accuracy alt:altitude batt:batteryPercent lat:latitude lon:longitude vac:accuracyVertical vel:velocity\
  _type:lastUpdateType tst:timestamp tid:trackerId
attr MQTT2_owntracks_fhemiPhone14 model owntracks_device
attr MQTT2_owntracks_fhemiPhone14 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 MQTT2_owntracks_fhemiPhone14 room Mqtt
attr MQTT2_owntracks_fhemiPhone14 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 MQTT2_owntracks_fhemiPhone14 userReadings location:lat.* {ReadingsNum($name,'latitude',0).','.ReadingsNum($name,'longitude',0)},\
  connection:conn.* {my %h=(m=>'mobil',w=>'wifi',o=>'offline',e=>'unknown');; return $h{ReadingsVal('MQTT2_owntracks_mi6','conn','e')}},\
  place:event.* {ReadingsVal($name,'event','') eq 'leave'?'away':(ReadingsVal($name,'desc','nowhere'))}
#   CFGFN     
#   CID        owntracks_fhemiPhone14
#   DEF        owntracks_fhemiPhone14
#   FUUID      63683ed4-f33f-97bf-785c-3d85bc205c2eefd0
#   IODev      MQTT2SRV
#   LASTInputDev MQTT2SRV
#   MQTT2SRV_CONN MQTT2SRV_172.21.0.30_56277
#   MQTT2SRV_MSGCNT 4
#   MQTT2SRV_TIME 2022-11-07 08:51:28
#   MSGCNT     4
#   NAME       MQTT2_owntracks_fhemiPhone14
#   NR         14705
#   STATE      config
#   TYPE       MQTT2_DEVICE
#   eventCount 8
#   JSONMAP:
#               
#     _type      lastUpdateType
#     acc        accuracy
#     alt        altitude
#     batt       batteryPercent
#     lat        latitude
#     lon        longitude
#     tid        trackerId
#     tst        timestamp
#     vac        accuracyVertical
#     vel        velocity
#   OLDREADINGS:
#   READINGS:
#     2022-11-07 08:51:28   BSSID           12:34:56:34:34:89
#     2022-11-07 08:03:18   IODev           MQTT2SRV
#     2022-11-07 08:51:28   SSID            wlan
#     2022-11-07 08:51:28   accuracy        14
#     2022-11-07 08:51:28   accuracyVertical 10
#     2022-11-07 08:51:28   altitude        210
#     2022-11-07 08:28:32   attrTemplateVersion 20201212_2
#     2022-11-07 08:51:28   batteryPercent  92
#     2022-11-07 08:51:28   bs              1
#     2022-11-07 08:51:28   conn            w
#     2022-11-07 08:51:28   connection      unknown
#     2022-11-07 08:51:28   lastUpdateType  location
#     2022-11-07 08:51:28   latitude        99.1234567
#     2022-11-07 08:51:28   location        99.1234567,00.123456
#     2022-11-07 08:51:28   longitude       00.123456
#     2022-11-07 08:51:28   m               1
#     2022-11-07 08:51:28   p               95.819
#     2022-11-07 08:51:28   raw             {"_type":"location","acc":14,"alt":210,"batt":92,"bs":1,"BSSID":"12:34:56:34:34:89","conn":"w","lat":99.1234567,"lon":00.123456,"m":1,"p":95.819,"SSID":"wlan","tid":"JM","tst":1667807487,"vac":10,"vel":1}
#     2022-11-07 08:51:12   state           config
#     2022-11-07 08:51:28   timestamp       1667807487
#     2022-11-07 08:51:28   trackerId       JM
#     2022-11-07 08:51:28   velocity        1
#   hmccu:
#

Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 09:19:34
Das zweite Template reagiert auf model owntracks_device - das sollte eigentlich passen.
Sowas wie Browser Refresh, manchmal baut er de erst die Liste neu auf.

Edit: der Schreibfehler ist wenigstens systematisch  :-[ ändere ich - aber funktionell ist es egal ;)
Edit: type gefixt und eingecheckt
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 10:05:46
So, danke nochmal, ein fhem neustart war mein Freund. Jetzt sehe ich auch das owntracks_extend_IOS template. Die steps sind jetzt auch drin.

Wenn ich jetzt "get owntracks steps" ausführe, bekomme ich aber wieder folgende Fehlermeldung, das gleiche fuer "get owntracks location":
Timeout reading answer for owntracks/fhem/iPhone14/cmd {"_type":"cmd","action":"reportSteps"}Timeout reading answer for owntracks/fhem/iPhone14/cmd {"_type":"cmd","action":"reportLocation"}

Falls Du auch ein iPhone hast, gibt es irgendwas, was ich in der Owntracks app in iOS auf dem Handy noch setzen muss? Eventuell im expert mode? Im owntracks Booklet habe ich nichts gefunden. Oder in der Bridge?

Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 11:11:29
IOS freie Zone  ;D

location kann ich auch testen

Aber der Mechanismus ist bei allen get gleich: es wird ein Befehl gesendet und der Broker gibt einen json String zurück. Der wandert in das Reading raw und wird dann zerpflückt.
Wenn in raw in dem Moment nichts ankommt würde ich meinen dein owntracks ist "taub". Das nimmt keine Befehle an.
Oder Deine Bridge läuft falsch und die Werte landen in einem anderen Device?

Siehst Du in deinem MQTT Client den MQTT Traffic beim absetzten des Befehls? (show MQTT Traffic )

in der Art
SENT
owntracks/UserOttoMqtt123/mi6/cmd
{"_type":"cmd","action":"reportLocation"}
RCVD
owntracks/UserOttoMqtt123/mi6/cmd
{"_type":"cmd","action":"reportLocation"}
RCVD
owntracks/UserOttoMqtt123/mi6
{"_type":"location","BSSID":"c4:41:1e:37:57:ca","SSID":"LEDE-1996","acc":10,"alt":164,"batt":64,"bs":1,"conn":"w","created_at":1667815774,"inregions":["zuHause"],"lat":xx.33xx446,"lon":xx.24xx9238,"m":1,"t":"r","tid":"hk","tst":1667815646,"vac":1,"vel":0}

Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 12:04:18
Hallo Otto,
ich sehe in meinem MQTT2 Server ( -> ich habe keinen MQTT2_Client) dass das cmd gesendet wird, es kommt aber keine Antwort..... -> Siehe screenshot.

Hier auch das list vom Server:define MQTT2SRV MQTT2_SERVER 1883 EIN.NE.IP.ADS
attr MQTT2SRV SSL 1
attr MQTT2SRV allowfrom ME.NE.IP.AD1|ME.NE.IP.AD2|ME.NE.IP.AD3
attr MQTT2SRV autocreate simple
attr MQTT2SRV event-on-change-reading none
attr MQTT2SRV group SERVER
attr MQTT2SRV hideRetain 1
attr MQTT2SRV keepaliveFactor 60
attr MQTT2SRV room Mqtt,System
#   CONNECTS   104
#   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
#   ClientsKeepOrder 1
#   DEF        1883 EIN.NE.IP.ADS
#   FD         15
#   FUUID      5d82891b-f33f-97bf-cae6-b4a7b791b5db91cf
#   NAME       MQTT2SRV
#   NR         2574
#   PORT       1883
#   SSL        1
#   STATE      Initialized
#   TYPE       MQTT2_SERVER
#   MatchList:
#     1:MQTT2_DEVICE ^.
#     2:MQTT_GENERIC_BRIDGE ^.
#   READINGS:
#     2022-11-07 11:53:04   nrclients       0
#     2022-11-07 11:04:06   state           Initialized
#   clients:
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 12:10:08
Ok Du hast den MQTT Server direkt erreichbar, ich habe das über einen MQTT Cloud Server gemacht.

Geht auch nicht bei location? oder waypoints (da müssen aber auch welche angelegt sein)
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 12:18:28
Hallo Otto,
danke erstmal. Nein, das geht weder fuer location (gleiche Fehlermeldung) -> Timeout reading answer for owntracks/fhem/iPhone14/cmd {"_type":"cmd","action":"reportLocation"}.
Es kommt keine Antwort . . .
Titel: Antw:owntracks reportSteps
Beitrag von: rudolfkoenig am 07 November 2022, 12:20:23
Zitatich sehe in meinem MQTT2 Server ( -> ich habe keinen MQTT2_Client) dass das cmd gesendet wird, es kommt aber keine Antwort...
Bei nrclients = 0 waere das auch ein kleines Wunder.
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 12:30:53
Zitatattr MQTT2SRV keepaliveFactor 60
Ist das sinnvoll?
ZitatkeepaliveFactor
the oasis spec requires a disconnect, if after 1.5 times the client supplied keepalive no data or PINGREQ is sent. With this attribute you can modify this factor, 0 disables the check. Notes:
dont complain if you set this attribute to less or equal to 1.
MQTT2_SERVER checks the keepalive only every 10 second.
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 12:38:08
OK, keepaliveFactor habe ich geloescht. Aber den Kommentar von Rudi habe ich nicht verstanden.
ZitatBei nrclients = 0 waere das auch ein kleines Wunder.
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 12:40:35
naja kein Client verbunden der irgendetwas empfangen kann.  ???
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 12:45:42
Zitatnaja kein Client verbunden der irgendetwas empfangen kann.
Ja, sowas hatte ich mir auch gedacht, aber bei Dir funktionierts ja auch. Es gibt doch den owntracks Clienbt (also die App) auf dem iPhone die das empfangen sollte.....  Oder andersrum, wie mache ich es, dass das iPhone dann als Client erscheint?
Titel: Antw:owntracks reportSteps
Beitrag von: Otto123 am 07 November 2022, 12:51:39
Ja klar die App. Aber wenn die verbunden ist müsstest Du sie sehen als verbunden beim MQTT. Scheinbar halten die keine Verbindung.
Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 12:55:42
Ja, deswegen steht im owntracks booklet das man das mit QoS=2 senden soll, damit das nach dem aufwachen passiert . . .
ZitatIn order for the app to actually report the steps counted by the device, you send it a specially formatted command. (The device does not periodically publish steps on its own -- you must trigger it.)

mosquitto_pub -q 2 -t owntracks/jj/5s/cmd -m '{"_type" : "cmd", "action": "reportSteps"}'
Note how we're using QoS=2 here: the message is published to the MQTT broker, and when the phone next wakes up, which happens every few hundred seconds, it will obtain the message, and publish a JSON payload with the counted steps back to your MQTT broker.
Titel: Antw:owntracks reportSteps
Beitrag von: rudolfkoenig am 07 November 2022, 13:30:11
ZitatJa, deswegen steht im owntracks booklet das man das mit QoS=2 senden soll, damit das nach dem aufwachen passiert . . .
Ich fuerchte solche Kunststuecke kann der MQTT2_SERVER nicht.

Wenn(!) die Beschreibung im Zitat stimmt, dann muss sich das Geraet nach dem Schlaf wieder mit dem MQTT Server verbinden.
Man koennte die Abfrage der Daten an dieses Event (mqtt2_server nrclients: x) binden. Die Abfrage muss mit etwas Verzoegerung passieren, weil das Event nach dem TCP-Verbindungsaufbau generiert wird, aber da wurden noch keine Subscriptions gesetzt.

Aber vorher wuerde ich feststellen, wann, wie oft und wie lange das Geraet sich mit dem MQTT2_SERVER verbindet.

Titel: Antw:owntracks reportSteps
Beitrag von: Jamo am 07 November 2022, 14:23:28
Hallo Rudi, Hallo Otto,
danke fuer all eure Hilfe, ich gebe an dieser Stelle dann erstmal auf.
Ich sehe, das nrclients auf 1 geht, wenn ich im iPhone von der owntracks App, manuell ein 'publish location' ausloese, oder eben immer dann wenn eine neue location von der owntracks App gesendet wird. Aber selbst wenn ich dann kurz danach in fhem ein "get owntracks steps" mache (also wenn nrclients 1 ist), bekomme ich die Schritte nicht angezeigt.

Desgleichen im owntracks 'move' mode, wenn die owntracks App auf dem iPhone im foreground ist, dann kommt jede Sekunde von der iOS owntracks App eine neue location in fhem an. nrclients ist dann immer konstant auf 1, aber selbst dann bekomme ich mit "get owntracks steps" keine Antwort.

Nur zur info, die Info mit dem QoS = 2 hatte ich von hier: https://owntracks.org/booklet/features/pedometer/