node-red-contrib-hasskit
Version:
hasskit for node-red
45 lines (43 loc) • 1.28 kB
JavaScript
const crc16 = require("./crc16");
const DATA_LENGTH = 9
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
}
var crc = crc16(data.slice(0, -3));
if (data.readUInt16LE(data.length - 3, data) === crc) {
return data
}
},
handle_write: function (buf) {
let data = Buffer.from(buf)
if (data.length < DATA_LENGTH - 3) {
return
}
var buffer = Buffer.alloc(data.length + 3);
for (let i = 0; i < data.length; i++) {
buffer[i] = data[i]
}
buffer.writeUInt16LE(crc16(data), data.length)
buffer[buffer.length - 1] = 0xaa
return buffer
},
getObjToBuf: function (domain) {
return fns[domain].obj2buf
},
getBufToObj: function (domain) {
return fns[domain].buf2obj
}
}