I use a combination of the mqqtitude 1.9 binding, and the mqtt 2.0 binding. The below should be everything, let me know if I missed something.
Items:
Switch ownTracks_Paul "Paul - OwnTracks" <man> (gPresentPaul, gPresence, gPresent) {mqttitude="mosquitto:owntracks/paul/Paul/event:home" }
String location_PaulPhone "Paul's Location [%s]" (gLocations) {mqtt="<[mosquitto:owntracks/paul/Paul:state:JS(mqtt-coordinates.js)]"}
String ownTracks_PaulRaw "Paul Raw Data [%s]" {mqtt="<[mosquitto:owntracks/paul/Paul:state:default]"}
Number ownTracks_PaulLat "Paul's Latitude [%.3f °]" <latitude>
Number ownTracks_PaulLon "Paul's Longitude [%.3f °]" <longitude>
Number ownTracks_PaulAcc "Paul's Accuracy [%d m]" <accuracy>
Number ownTracks_PaulBatt "Paul's Battery [%s %%]" <battery>
Rules:
val String logNamePresence = "presence"
var Timer presenceTimer = null
// Owntracks Paul Raw data conversion
rule "Mqtt Position - Paul"
when
Item ownTracks_PaulRaw changed
then
logInfo("MQTT", "OwnTracks Updated for Paul")
val String json = (ownTracks_PaulRaw.state as StringType).toString
val String type = transform("JSONPATH", "$._type", json)
if (type == "location") {
val String lat = transform("JSONPATH", "$.lat", json)
val String lon = transform("JSONPATH", "$.lon", json)
val String acc = transform("JSONPATH", "$.acc", json)
val String batt = transform("JSONPATH", "$.batt", json)
ownTracks_PaulLat.postUpdate(new DecimalType(lat)*1)
ownTracks_PaulLon.postUpdate(new DecimalType(lon)*1)
ownTracks_PaulAcc.postUpdate(new DecimalType(acc)*1)
ownTracks_PaulBatt.postUpdate(new PercentType(batt)*1)
}
end
Sitemap:
Switch item=ownTracks_Paul
Text item=ownTracks_PaulLat
Text item=ownTracks_PaulLon
Text item=ownTracks_PaulAcc
Text item=ownTracks_PaulBatt