node-red-contrib-hasskit
Version:
hasskit for node-red
49 lines (45 loc) • 1.23 kB
JavaScript
const crc16 = function (data) {
let tmp = 0
for (let i of data) {
tmp += i
}
return tmp & 0xff
}
const DATA_LENGTH = 8
const fns = {
switch: require('./Switch'),
climate: require('./Climate')
}
module.exports = {
/**
* 收到tcp数据预处理
* @param {*} data
*/
handleRece: function (data) {
//大于9个字节超出克伦威尔数据帧取后9位,小于9位无效丢弃
if (data.length > DATA_LENGTH) {
data = data.slice(-DATA_LENGTH)
} else if (data.length < DATA_LENGTH) {
return
}
if (data[0] !== 0xb2 || data[DATA_LENGTH - 1] !== 0x2b)
return
var crc = crc16(data.slice(1, -2));
if (data[DATA_LENGTH - 2] === crc) {
return data
}
return
},
handle_write: function (buf) {
let data = Buffer.from(buf)
if (data.length < DATA_LENGTH) return
data[6] = crc16(data.slice(1, -2))
return data
},
getObjToBuf: function (domain) {
return fns[domain].obj2buf
},
getBufToObj: function (domain) {
return fns[domain].buf2obj
}
}