63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
"use strict";
|
|
|
|
function calculateCRC16Modbus(dataHexString) {
|
|
var dataBytes = [];
|
|
for (var i = 0; i < dataHexString.length; i += 2) {
|
|
dataBytes.push(parseInt(dataHexString.substr(i, 2), 16));
|
|
}
|
|
|
|
var crc = 0xFFFF;
|
|
var polynomial = 0xA001; // This is the polynomial x^16 + x^15 + x^2 + 1
|
|
|
|
var _iteratorNormalCompletion = true;
|
|
var _didIteratorError = false;
|
|
var _iteratorError = undefined;
|
|
|
|
try {
|
|
for (var _iterator = dataBytes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
var byte = _step.value;
|
|
|
|
crc ^= byte;
|
|
for (var _i = 0; _i < 8; _i++) {
|
|
if (crc & 0x0001) {
|
|
crc = (crc >> 1 ^ polynomial) & 0xFFFF;
|
|
} else {
|
|
crc >>= 1;
|
|
}
|
|
}
|
|
}
|
|
} catch (err) {
|
|
_didIteratorError = true;
|
|
_iteratorError = err;
|
|
} finally {
|
|
try {
|
|
if (!_iteratorNormalCompletion && _iterator.return) {
|
|
_iterator.return();
|
|
}
|
|
} finally {
|
|
if (_didIteratorError) {
|
|
throw _iteratorError;
|
|
}
|
|
}
|
|
}
|
|
|
|
return crc.toString(16).toUpperCase();
|
|
}
|
|
|
|
function getControlCmd(status, time) {
|
|
var cmd = "FE1003F6000204" + status + "0000" + time;
|
|
var crc = calculateCRC16Modbus(cmd);
|
|
return cmd + crc.substring(2, 4) + crc.substring(0, 2);
|
|
}
|
|
var lastMsg = '';
|
|
function control(status, time) {
|
|
var msg = "FFFF000D" + getControlCmd(status, time);
|
|
msgList=[]
|
|
msgList.push(msg);
|
|
// queue.enqueue(msg)
|
|
// writeValueForCharacteristic({peripheralUUID:uuid,serviceUUID:serviceUUID,characteristicUUID:characteristicUUID,value:msg},function (ret) {
|
|
//
|
|
// // console.log(JSON.stringify(ret))
|
|
// })
|
|
}
|