…or to decode using TTN’s payload functions, to get an additional human readable fields
in the MQTT payload:
See below for an improved version to support negative decimal coordinates.
// Version 2 (production) needs a function name; see post below for a fix
function (bytes) {
// Does NOT handle negative values; see post below for a fix
var lat = (bytes[0] + (bytes[1] << 8) + (bytes[2] << 16)) / 10000;
var lng = (bytes[3] + (bytes[4] << 8) + (bytes[5] << 16)) / 10000;
return {
location: {
lat: lat,
lng: lng
},
love: "TTN payload functions"
};
}
…to return something like the following in the MQTT message:
{
"app_id": "my-app-id",
"dev_id": "my-node",
"hardware_serial": "42CF4601045CE277",
"port": 1,
"counter": 19,
"payload_raw": "ANX6nBIX",
"payload_fields": {
"location": {
"lat": -33.8688,
"lng": 151.2092
},
"love": "TTN payload functions"
},
"metadata": {
"time": "2017-01-16T22:59:20.373495512Z",
"frequency": 868.1,
"modulation": "LORA",
"data_rate": "SF8BW125",
"coding_rate": "4/5",
"gateways": [
{
"gtw_id": "eui-5ccf7ff42f1970ec",
"timestamp": 494534657,
"time": "2017-01-16T22:59:20.296723Z",
"channel": 0,
"rssi": -46,
"snr": 11,
"latitude": 52.373141,
"longitude": 4.892435,
"altitude": 3
}
]
}
}