{
  "name": "Uplink Electricity Smart 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 = 'elecMeter';\nvar res = _base64ToArrayBuffer(data.data);\nif(res[0]==35)\n    return null;\nvar dateTime=GetCurrentDateTime();\nvar voltage_A=null;\nvar voltage_B=null;\nvar voltage_C=null;\nvar current_A=null;\nvar current_B=null;\nvar current_C=null;\nvar frequency=null;\nvar power_full_Summary=null;\nvar power_full_A=null;\nvar power_full_B=null;\nvar power_full_C=null;\nvar power_active_Summary=null;\nvar power_active_A=null;\nvar power_active_B=null;\nvar power_active_C=null;\nvar power_reactive_Summary=null;\nvar power_reactive_A=null;\nvar power_reactive_B=null;\nvar power_reactive_C=null;\nvar energy_active_Summary=null;\nvar energy_active_t1=null;\nvar energy_active_t2=null;\nvar energy_active_t3=null;\nvar energy_active_t4=null;\nvar energy_active_t5=null;\nvar energy_active_t6=null;\nvar energy_active_t7=null;\nvar energy_active_t8=null;\nvar energy_reactive_Summary=null;\nvar energy_reactive_t1=null;\nvar energy_reactive_t2=null;\nvar energy_reactive_t3=null;\nvar energy_reactive_t4=null;\nvar energy_reactive_t5=null;\nvar energy_reactive_t6=null;\nvar energy_reactive_t7=null;\nvar energy_reactive_t8=null;\n\nvar k=0;\nfor (var i = 0; i < res.length; )\n    {\n        switch(res[i])\n        {\n            case 0x40:\n                i+=5;\n                break;\n            case 0x20:\n                var phase = GetPhase(res[i+1]);\n                if(phase==1)\n                voltage_A=GetVoltageValue(res[i+1],res[i+2]);\n                if(phase==2)\n                voltage_B=GetVoltageValue(res[i+1],res[i+2]);\n                if(phase==3)\n                voltage_C=GetVoltageValue(res[i+1],res[i+2]);\n                i+=3;\n               break;\n            case 0x21:\n                var phase = GetPhase(res[i+1]);\n                if(phase==1)\n                current_A=GetCurrentValue(res[i+1],res[i+2]);\n                if(phase==2)\n                current_B=GetCurrentValue(res[i+1],res[i+2]);\n                if(phase==3)\n                current_C=GetCurrentValue(res[i+1],res[i+2]);\n                i+=3;\n               break;\n            case 0x22:\n                frequency=GetFrequency(res[i+1],res[i+2]);\n                i+=3;\n               break;\n            case 0x41:\n               var typePower = GetPhase(res[i+1]);\n               var phasePower=GetPhasePower(res[i+1]);\n               if(typePower==1)\n               {\n                   if(phasePower==0)\n                       power_active_Summary=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==1)\n                       power_active_A=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==2)\n                       power_active_B=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==3)\n                       power_active_C=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n               }\n               if(typePower==2)\n               {\n                   if(phasePower==0)\n                       power_reactive_Summary=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==1)\n                       power_reactive_A=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==2)\n                       power_reactive_B=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==3)\n                       power_reactive_C=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n               }\n               if(typePower==3)\n               {\n                   if(phasePower==0)\n                      {\n                          power_full_Summary=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                      }\n                   if(phasePower==1)\n                       power_full_A=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==2)\n                       power_full_B=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(phasePower==3)\n                       power_full_C=GetPowerValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n               }\n                i+=5;\n               break;\n            case 0x42:\n               var typeEnergy = GetEnergy(res[i+1]);\n               var tariff=GetTariff(res[i+1]);\n               if(typeEnergy==0)\n               {\n                   if(tariff==0)\n                       energy_active_Summary=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==1)\n                       energy_active_t1=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==2)\n                       energy_active_t2=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==3)\n                       energy_active_t3=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==4)\n                       energy_active_t4=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==5)\n                       energy_active_t5=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==6)\n                       energy_active_t6=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==7)\n                       energy_active_t7=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==8)\n                       energy_active_t8=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n               }\n               if(typeEnergy==1)\n               {\n                   if(tariff==0)\n                       energy_reactive_Summary=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==1)\n                       energy_reactive_t1=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==2)\n                       energy_reactive_t2=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==3)\n                       energy_reactive_t3=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==4)\n                       energy_reactive_t4=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==5)\n                       energy_reactive_t5=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==6)\n                       energy_reactive_t6=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==7)\n                       energy_reactive_t7=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n                   if(tariff==8)\n                       energy_reactive_t8=GetEnergyValue(res[i+1], res[i+2], res[i+3], res[i+4]);\n               }\n\n                i+=5;\n               break;\n            default:\n                 k=1;\n               break;\n        }\n        if(k==1)\n        break;\n    }\n\nvar result = {\n   deviceName: deviceName,\n   deviceType: deviceType,\n   attributes: {\n       integrationName: metadata['integrationName'],\n   },\n   telemetry: {\n       REAL_TIME: dateTime,\n       SN: data.deviceName,\n       deviceTypeTelemetry: \"Smartico E307\",\n       NAME_DEV: \"Electricity Meter 'Smartico E307'\",\n       VOLTAGE_A: voltage_A,\n       VOLTAGE_B: voltage_B,\n       VOLTAGE_C: voltage_C,\n       CURRENT_A: current_A,\n       CURRENT_B: current_B,\n       CURRENT_C: current_C,\n       FREQUENCY: frequency,\n       POWER_FULL_SUMMARY: power_full_Summary,\n       POWER_FULL_A: power_full_A,\n       POWER_FULL_B: power_full_B,\n       POWER_FULL_C: power_full_C,\n       POWER_ACTIVE_SUMMARY: power_active_Summary,\n       POWER_ACTIVE_A: power_active_A,\n       POWER_ACTIVE_B: power_active_B,\n       POWER_ACTIVE_C: power_active_C,\n       POWER_REACTIVE_SUMMARY: power_reactive_Summary,\n       POWER_REACTIVE_A: power_reactive_A,\n       POWER_REACTIVE_B: power_reactive_B,\n       POWER_REACTIVE_C: power_reactive_C,\n\n       VALUE: energy_active_Summary,\n       ENERGY_ACTIVE_SUMMARY: energy_active_Summary,\n       ENERGY_ACTIVE_T1: energy_active_t1,\n       ENERGY_ACTIVE_T2: energy_active_t2,\n       ENERGY_ACTIVE_T3: energy_active_t3,\n       ENERGY_ACTIVE_T4: energy_active_t4,\n       ENERGY_ACTIVE_T5: energy_active_t5,\n       ENERGY_ACTIVE_T6: energy_active_t6,\n       ENERGY_ACTIVE_T7: energy_active_t7,\n       ENERGY_ACTIVE_T8: energy_active_t8,\n       ENERGY_REACTIVE_SUMMARY: energy_reactive_Summary,\n       ENERGY_REACTIVE_T1: energy_reactive_t1,\n       ENERGY_REACTIVE_T2: energy_reactive_t2,\n       ENERGY_REACTIVE_T3: energy_reactive_t3,\n       ENERGY_REACTIVE_T4: energy_reactive_t4,\n       ENERGY_REACTIVE_T5: energy_reactive_t5,\n       ENERGY_REACTIVE_T6: energy_reactive_t6,\n       ENERGY_REACTIVE_T7: energy_reactive_t7,\n       ENERGY_REACTIVE_T8: energy_reactive_t8,\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 _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 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 GetPowerValue(byte1, byte2, byte3, byte4) {\n    var value1 = byte1.toString(2)\n    while(value1.length<8){\n    value1='0'+value1;}\n    var value2 = byte2.toString(2);\n    while(value2.length<8){\n    value2='0'+value2;}\n    var value3 = byte3.toString(2)\n    while(value3.length<8){\n    value3='0'+value3;}\n    var value4 = byte4.toString(2);\n    while(value4.length<8){\n    value4='0'+value4;}\n    var value = value1[4]+value1[5]+value1[6]+value1[7] + value2+value3+value4;\n    return parseInt(value,2)/100;\n}\n\nfunction SimulatePower(persent) {\n    return parseInt(value,2)/100;\n}\n\nfunction GetEnergyValue(byte1, byte2, byte3, byte4) {\n    var value1 = byte1.toString(2)\n    while(value1.length<8){\n    value1='0'+value1;}\n    var value2 = byte2.toString(2);\n    while(value2.length<8){\n    value2='0'+value2;}\n    var value3 = byte3.toString(2)\n    while(value3.length<8){\n    value3='0'+value3;}\n    var value4 = byte4.toString(2);\n    while(value4.length<8){\n    value4='0'+value4;}\n    var value = value1[5]+value1[6]+value1[7] + value2+value3+value4;\n    return parseInt(value,2)/100;\n}\n\nfunction GetFrequency(byte1, byte2) {\n    var value1 = byte1.toString(2)\n    while(value1.length<8){\n    value1='0'+value1;}\n    var value2 = byte2.toString(2);\n    while(value2.length<8){\n    value2='0'+value2;}\n    var value = value1 + value2;\n\n    return parseInt(value,2)/1000;\n}\n\nfunction GetVoltageValue(byte1, byte2) {\n    var value1 = byte1.toString(2)\n    while(value1.length<8){\n    value1='0'+value1;}\n    var value2 = byte2.toString(2);\n    while(value2.length<8){\n    value2='0'+value2;}\n    var value = value1[2]+value1[3]+value1[4]+value1[5]+value1[6]+value1[7] + value2;\n\n    return parseInt(value,2)/10;\n}\n\nfunction GetCurrentValue(byte1, byte2) {\n    var value1 = byte1.toString(2)\n    while(value1.length<8){\n    value1='0'+value1;}\n    var value2 = byte2.toString(2);\n    while(value2.length<8){\n    value2='0'+value2;}\n    var value = value1[3]+value1[4]+value1[5]+value1[6]+value1[7] + value2;\n    if(parseInt(value1[2],2) == 0)\n        return parseInt(value,2)/100;\n    else\n        return parseInt(value,2)/10;\n}\n\nfunction GetPhase(mainByte)\n{\n    var phase = mainByte.toString(2);\n    while(phase.length<8){\n    phase='0'+phase;}\n    phase=phase[0].toString(2)+phase[1].toString(2);\n    return parseInt(phase,2);\n}\n\nfunction GetEnergy(mainByte)\n{\n    var phase = mainByte.toString(2);\n    while(phase.length<8){\n    phase='0'+phase;}\n    phase=phase[0].toString(2);\n    return parseInt(phase,2);\n}\n\nfunction GetPhasePower(mainByte)\n{\n    var phase = mainByte.toString(2);\n    while(phase.length<8){\n    phase='0'+phase;}\n    phase=phase[2].toString(2)+phase[3].toString(2);\n    return parseInt(phase,2);\n}\n\nfunction GetTariff(mainByte)\n{\n    var tariff = mainByte.toString(2);\n    while(tariff.length<8){\n    tariff='0'+tariff;}\n    tariff=tariff[1].toString(2)+tariff[2].toString(2)+tariff[3].toString(2)+tariff[4].toString(2);\n    return parseInt(tariff,2);\n}\n\nreturn result;",
    "tbelDecoder": "",
    "encoder": null,
    "tbelEncoder": null,
    "updateOnlyKeys": [
      "manufacturer"
    ]
  },
  "additionalInfo": {
    "description": ""
  },
  "edgeTemplate": false,
  "converterVersion": 1
}