{
  "name": "SODAQ UDP Data Uplink Converter",
  "type": "UPLINK",
  "integrationType": "UDP",
  "debugMode": false,
  "debugSettings": {
    "failuresEnabled": true,
    "allEnabled": false,
    "allEnabledUntil": 0
  },
  "configuration": {
    "scriptLang": "JS",
    "decoder": "/** Decoder **/\n\n// The field of input json\nvar reports = decodeToJson(payload).reports;\n\n// Result object with device attributes/telemetry data\nvar result = {\n   deviceName: {},\n   deviceType: \"tracker\",\n   telemetry: []\n};\n\nfor (var i = 0; i < reports.length; i++) {\n\n  result.deviceName = parseInt(reports[i].value.substring(2, 16), 16);\n\n  var telemetryObj = {\n      ts: {},\n      values: {}\n  };\n\n  var timestamp = stringToInt(reports[i].value.substring(32,40)) * 1000;\n  var v = stringToInt(reports[i].value.substring(40,42)) / 100 + 3;\n  var t = stringToInt(reports[i].value.substring(42,44));\n  var lat = stringToInt(reports[i].value.substring(44,52)) / 10000000;\n  var lon = stringToInt(reports[i].value.substring(52,60)) / 10000000;\n  var alt = stringToInt(reports[i].value.substring(60,64));\n  var speed = stringToInt(reports[i].value.substring(64,68));\n  var sat = stringToInt(reports[i].value.substring(68,70));\n  var ttf = stringToInt(reports[i].value.substring(70,72));\n\n  telemetryObj.ts = timestamp;\n  telemetryObj.values.batteryVoltage = v;\n  telemetryObj.values.temperature = t;\n\n  if (lat !== 0) {\n        telemetryObj.values.latitude = lat;\n  }\n  if (lon !== 0) {\n        telemetryObj.values.longitude = lon;\n  }\n  if (alt !== 0) {\n        telemetryObj.values.altitude = alt;\n  }\n\n  telemetryObj.values.speed = speed;\n  telemetryObj.values.satellitesObserved = sat;\n  telemetryObj.values.timetToFirstFix = ttf;\n  telemetryObj.values.imei = result.deviceName;\n\n  result.telemetry.push(telemetryObj);\n}\n\n/** Helper functions **/\n\nfunction stringToInt(hex) {\n    return parseInt('0x' + hex.match(/../g).reverse().join(''));\n}\n\nfunction decodeToString(payload) {\n   return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n  var str = decodeToString(payload);\n  return JSON.parse(str);\n}\n\nreturn result;",
    "tbelDecoder": "// Decode an uplink message from a buffer\n// payload - array of bytes\n// metadata - key/value object\n\n/** Decoder **/\n\n// decode payload to string\nvar payloadStr = decodeToString(payload);\n\n// decode payload to JSON\n// var data = decodeToJson(payload);\n\nvar deviceName = 'Device A';\nvar deviceType = 'thermostat';\nvar customerName = 'Customer C';\nvar groupName = 'thermostat devices';\nvar manufacturer = 'Example corporation';\n// use assetName and assetType instead of deviceName and deviceType\n// to automatically create assets instead of devices.\n// var assetName = 'Asset A';\n// var assetType = 'building';\n\n// Result object with device/asset attributes/telemetry data\nvar result = {\n// Use deviceName and deviceType or assetName and assetType, but not both.\n   deviceName: deviceName,\n   deviceType: deviceType,\n// assetName: assetName,\n// assetType: assetType,\n// customerName: customerName,\n   groupName: groupName,\n   attributes: {\n       model: 'Model A',\n       serialNumber: 'SN111',\n       integrationName: metadata['integrationName'],\n       manufacturer: manufacturer\n   },\n   telemetry: {\n       temperature: 42,\n       humidity: 80,\n       rawData: payloadStr\n   }\n};\n\n/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/\n\nreturn result;",
    "encoder": null,
    "tbelEncoder": null,
    "updateOnlyKeys": [
      "manufacturer"
    ]
  },
  "additionalInfo": {
    "description": ""
  },
  "edgeTemplate": false,
  "converterVersion": 1
}