174 lines
4.4 KiB
JavaScript
174 lines
4.4 KiB
JavaScript
/**
|
|
* @Smoker script
|
|
* @Copyright : PGST Technologies Ltd.
|
|
* @All Rights Reserved
|
|
* @Copyright (c) 2022, PGST Technologies Ltd.
|
|
* @Designed Milo lu
|
|
*/
|
|
var COMMAND_POST = 0x01 // Attribute Report
|
|
|
|
var THING_PROP_POST_METHOD = 'thing.property.post'
|
|
|
|
/**
|
|
* @Profile Uplink conversion
|
|
*
|
|
* 01 01 xx xx xx xx xx n1 n2 n3 ...n20 m1 m2 m3 ... m15 crc
|
|
* | | | | | | | | | | | |__________crc
|
|
* | | | | | | | | | |_____________|______________IMEI number code
|
|
* | | | | | | | |___________|_________________________________ICCID number code
|
|
* | | | | | | |_________________________________________________smoker percentage
|
|
* | | | | | |____________________________________________________battery voltage
|
|
* | | | | |_______________________________________________________smoke sensor state
|
|
* | | | |__________________________________________________________Rssi value
|
|
* | | |_____________________________________________________________battery percent
|
|
* | |________________________________________________________________msgID
|
|
* |___________________________________________________________________command ID
|
|
*/
|
|
function rawDataToJson (rawData)
|
|
{
|
|
var uint8Array = new Uint8Array(rawData.length)
|
|
var iccidArry = []
|
|
var imeiArry = []
|
|
var i
|
|
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
|
var NUM_CODE=[0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','*']
|
|
var crc = 0
|
|
for (i = 0; i < rawData.length; i++)
|
|
{
|
|
uint8Array[i] = rawData[i] & 0xff
|
|
if(i < (rawData.length-1))
|
|
{
|
|
crc = (crc + uint8Array[i]) & 0xff
|
|
}
|
|
}
|
|
|
|
var dataView = new DataView(uint8Array.buffer, 0)
|
|
|
|
var jsonMap = { 'version': '1.0' }
|
|
|
|
var fHead = uint8Array[0] // command
|
|
|
|
if (fHead===COMMAND_POST && crc==uint8Array[rawData.length-1])
|
|
{
|
|
jsonMap['method'] = THING_PROP_POST_METHOD
|
|
jsonMap['id'] = '' + dataView.getInt8(1)
|
|
var k = 0
|
|
var int2char
|
|
if(rawData.length==43)
|
|
{
|
|
for (i = 0; i < 20; i++)
|
|
{
|
|
int2char = dataView.getInt8(7+k)
|
|
if(int2char>=48&&int2char<=57)
|
|
{
|
|
int2char-=48
|
|
}
|
|
else if(int2char>=65&&int2char<=90)
|
|
{
|
|
int2char-=55
|
|
}
|
|
else if(int2char>=97&&int2char<=122)
|
|
{
|
|
int2char-=87
|
|
}
|
|
else
|
|
{
|
|
int2char=36
|
|
}
|
|
iccidArry[i] = NUM_CODE[int2char]
|
|
k++
|
|
}
|
|
for (i = 0; i < 15; i++)
|
|
{
|
|
int2char = dataView.getInt8(7+k)
|
|
if(int2char>=48&&int2char<=57)
|
|
{
|
|
int2char-=48
|
|
}
|
|
else if(int2char>=65&&int2char<=90)
|
|
{
|
|
int2char-=55
|
|
}
|
|
else if(int2char>=97&&int2char<=122)
|
|
{
|
|
int2char-=87
|
|
}
|
|
else
|
|
{
|
|
int2char=36
|
|
}
|
|
imeiArry[i] = NUM_CODE[int2char]
|
|
k++
|
|
}
|
|
jsonMap['params'] =
|
|
{
|
|
'BatteryPercentage':
|
|
{
|
|
'value': dataView.getInt8(2)
|
|
},
|
|
'RSSI':
|
|
{
|
|
'value': dataView.getInt8(3)
|
|
},
|
|
'SmokeSensorState':
|
|
{
|
|
'value': dataView.getInt8(4)
|
|
},
|
|
'batteryVoltage':
|
|
{
|
|
'value':dataView.getInt8(5)/10
|
|
},
|
|
'levSmokerPercentage':
|
|
{
|
|
'value':dataView.getInt8(6)
|
|
},
|
|
'ICCID':
|
|
{
|
|
'value': iccidArry.join("")
|
|
},
|
|
'IMEI':
|
|
{
|
|
'value': imeiArry.join("")
|
|
},
|
|
}
|
|
}
|
|
else if(rawData.length==8)
|
|
{
|
|
jsonMap['params'] =
|
|
{
|
|
'BatteryPercentage':
|
|
{
|
|
'value': dataView.getInt8(2)
|
|
},
|
|
'RSSI':
|
|
{
|
|
'value': dataView.getInt8(3)
|
|
},
|
|
'SmokeSensorState':
|
|
{
|
|
'value': dataView.getInt8(4)
|
|
},
|
|
'batteryVoltage':
|
|
{
|
|
'value':dataView.getInt8(5)/10
|
|
},
|
|
'levSmokerPercentage':
|
|
{
|
|
'value':dataView.getInt8(6)
|
|
},
|
|
}
|
|
}
|
|
}
|
|
return jsonMap
|
|
}
|
|
|
|
|
|
/**
|
|
* @Profile downlink conversion
|
|
*/
|
|
function jsonToRawData(jsonObj){
|
|
var rawData = [];
|
|
return rawData;
|
|
}
|
|
|
|
|