{
  "name": "Uplink Gas Meter",
  "type": "UPLINK",
  "integrationType": "MQTT",
  "debugMode": false,
  "debugSettings": {
    "failuresEnabled": true,
    "allEnabled": false,
    "allEnabledUntil": 0
  },
  "configuration": {
    "scriptLang": "JS",
    "decoder": "/** Decoder **/\nvar payloadStr = decodeToString(payload);\nvar data = JSON.parse(payloadStr);\nvar deviceName =  data.deviceName;\nvar deviceType = 'Gas Meter';\nvar dateTime=GetCurrentDateTime();\nvar res1 = _base64ToArrayBuffer(data.data);\nvar gasValue = GetGasMeterValue(res1);\nvar temp = GetTempValue(res1);\n\nvar flg_low_bat = FLG_LOW_BAT(res1);\nvar flg_motion_detect = FLG_MOTION_DETECT(res1);\nvar flg_magnet_detect = FLG_MAGNET_DETECT(res1);\nvar flg_tamper_detect = FLG_TAMPER_DETECT(res1);\nvar sts_valve = STS_VALVE(res1);\nvar flg_err_ovr = FLG_ERR_OVR(res1);\nvar flg_err_reverse = FLG_ERR_REVERSE(res1);\nvar flg_err_sensor = FLG_ERR_SENSOR(res1);\nvar flg_err_gas = FLG_ERR_GAS(res1);\nvar flg_power_on = FLG_POWER_ON(res1);\nvar flg_err_time = FLG_ERR_TIME(res1);\nvar flg_lock = FLG_LOCK(res1);\nvar flg_cfg_done = FLG_CFG_DONE(res1);\n\nvar result = {\n   deviceName: deviceName,\n   deviceType: deviceType,\n   attributes: {\n       integrationName: metadata['integrationName'],\n   },\n   telemetry: {\n       gasMeter: gasValue,\n       temperature: temp,\n       REAL_TIME: dateTime,\n       SN: data.deviceName,\n       FLG_LOW_BAT: flg_low_bat,\n       FLG_MOTION_DETECT: flg_motion_detect,\n       FLG_MAGNET_DETECT: flg_magnet_detect,\n       FLG_TAMPER_DETECT: flg_tamper_detect,\n       STS_VALVE: sts_valve,\n       FLG_ERR_OVR: flg_err_ovr,\n       FLG_ERR_REVERSE: flg_err_reverse,\n       FLG_ERR_SENSOR: flg_err_sensor,\n       FLG_ERR_GAS: flg_err_gas,\n       FLG_ERR_TIME: flg_err_time,\n       FLG_POWER_ON: flg_power_on,\n       FLG_LOCK: flg_lock,\n       FLG_CFG_DONE: flg_cfg_done\n   }\n};\n\n/** Helper functions **/\n\nfunction decodeToString(payload) {\n   return String.fromCharCode.apply(String, payload);\n}\n\nfunction decodeToJson(payload) {\n   var str = decodeToString(payload);\n   var data = JSON.parse(str);\n   return data;\n}\n\nfunction GetCurrentDateTime(){\n    var a=new Date();\n    var year = a.getFullYear().toString();\n  var month = (a.getMonth()+1).toString();\n  if(month.length==1) month=\"0\"+month;\n  var date = a.getDate().toString();\n  if(date.length==1) date=\"0\"+date;\n  var hour = a.getHours().toString();\n  if(hour.length==1) hour=\"0\"+hour;\n  var min = a.getMinutes().toString();\n  if(min.length==1) min=\"0\"+min;\n  var sec = a.getSeconds().toString();\n  if(sec.length==1) sec=\"0\"+sec;\n  var time = date + '.' + month + '.' + year + ' ' + hour + ':' + min + ':' + sec ;\n  return time;\n}\n\nfunction _base64ToArrayBuffer(base64) {\n    var binary_string = atob(base64);\n    var len = binary_string.length;\n    var bytes = new Uint8Array(len);\n    var str=\"\";\n    for (var i = 0; i < len; i++) {\n        bytes[i] = binary_string.charCodeAt(i);\n    }\n    return bytes;\n}\n\nfunction GetGasMeterValue(arr) {\n    var bytes = arr;\n    var value = 0;\n    for (var j = 7; j < 11; j++) {\n    value = (value << 8) | bytes[j];}\n    return value/1000;\n}\n\nfunction GetTempValue(arr) {\n    var bytes = arr;\n    var value = \"0\";\n    var value1 = parseInt(bytes[11],10).toString(16);\n    if(value1.length==1) value1=\"0\"+value1;\n    var value2 = parseInt(bytes[12],10).toString(16);\n    if(value2.length==1) value2=\"0\"+value2;\n    value=value1+value2;\n    if(value.toLowerCase()==\"ffff\")\n         return null;\n    value = parseInt(value, 16).toString(10);\n    value = (value << 16)>>16;\n    return value/100;\n}\n\nfunction FLG_LOW_BAT(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[7]);\n}\n\nfunction FLG_MOTION_DETECT(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[6]);\n}\n\nfunction FLG_MAGNET_DETECT(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[5]);\n}\n\nfunction FLG_TAMPER_DETECT(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[4]);\n}\n\nfunction STS_VALVE(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    var str = value[1]+value[2]+value[3];\n    var res = parseInt(str, 2).toString(10);\n    return Number(res);\n}\n\nfunction FLG_ERR_OVR(arr) {\n    var value = parseInt(arr[2], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[0]);\n}\n\nfunction FLG_ERR_REVERSE(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[7]);\n}\n\nfunction FLG_ERR_SENSOR(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[6]);\n}\n\nfunction FLG_ERR_GAS(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[5]);\n}\n\nfunction FLG_ERR_TIME(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[4]);\n}\n\nfunction FLG_POWER_ON(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[2]);\n}\n\nfunction FLG_LOCK(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[1]);\n}\n\nfunction FLG_CFG_DONE(arr) {\n    var value = parseInt(arr[1], 10).toString(2);\n    while(value.length<8){\n    value='0'+value;}\n    return Number(value[0]);\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
}