Hallo!
Irgendwie sitze ich auf dem Schlauch, aber das kommt vor ...
Was ich gerne hätte, ist mit FHEM die "events" von QwnTracks bei betreten oder verlassen von Waypoints auszuwerten, die der Broker an das "abonnierte" MQTT_DEVICE schickt. Damit dann den Zustand der Residents festlegen, ähnlich, wie es Geof(e|a)cy macht. Dort kann ich allerdings keine Waypoints auf das Gerät "pushen", weshalb ich die Lösung mit OwnTracks und MQTT bevorzuge.
Was ich bis dato habe ist
define myMQTT_OT_Event_Andi MQTT_DEVICE
attr myMQTT_OT_Event_Andi IODev myMQTT
attr myMQTT_OT_Event_Andi room Residents
attr myMQTT_OT_Event_Andi stateFormat event
attr myMQTT_OT_Event_Andi subscribeReading_sacher owntracks/ap/sacher/event
Damit bekomme ich die Events in ein Reading mit Namen "sacher":
{"t":"c","tst":1446987969,"acc":5,"_type":"transition","event":"leave","lon":10.92335614376787,"lat":48.02442389079185,"wtst":1446061056,"tid":"AP","desc":"Dahoam"}
Diese liegen dort aber als JSON und ich hätte sie gerne als einzelne Readings, um z.B. auch den Timestamp auswerten zu können, sollten Sie mal nicht "live" reinkommen.
Irgendein Hinweis, wie ich das anstellen soll?
Gruß Andi
Kannst ja mal folgendes testen, das sollte für jeden Waypoint ein gleichnamiges Reading in deinen Device anlegen. Ich habe das aus meinen notify.
myMQTT_OT_Event_Andi:sacher:.* {
my $evt = $EVENT;
my $data = substr($evt,index($evt, ": {")+2);
my $dataset = JSON->new->utf8(0)->decode($data);
my $place = $dataset->{desc};
my $event = $dataset->{event};
setReadingsVal($defs{$NAME}, $place, $event, FmtDateTime($dataset->{tst}));
}
Hallo stromer-12!
Danke, das war der notwendige Knotenlöser.
Alles in allem habe ich es nun so realisiert:
define n_myMQTT_OT_Event notify myMQTT_OT_Event_Andi:sacher:.* { \
my $evt = $EVENT;; \
my $data = substr($evt,index($evt, ": {")+2);; \
my $dataset = JSON->new->utf8(0)->decode($data);; \
my $place = $dataset->{desc};; \
my $event = $dataset->{event};; \
setReadingsVal($defs{$NAME}, "Transition", $event, FmtDateTime($dataset->{tst}));; \
setReadingsVal($defs{$NAME}, "Place", $place, FmtDateTime($dataset->{tst}));; \
}
Gruß Andi