|
|
- import sm4 from "./sm4";
- import md5 from "./md5.min";
- import crc from "./crc-index";
-
- var userIdSaved;
- var authUserIdSaved;
- var deviceNameSaved;
- var pwdSaved;
- var indexSaved;
- var fingerNoSaved;
- var startTimeSaved;
- var endTimeSaved;
- var useCountLimitSaved;
- var staticCallback;
- var keyIdSaved;
- var signKeySaved;
- var roleSaved;
- var pwdNoSaved;
- var actionSaved;
- var alarmFingerSaved;
- var encKeySaved;
- var openModeSaved;
- var blueKeyIdSaved;
- const constString = "uiYMMSwerw122@^#&@87";
- var receDataSaved = "";
- var fileVersionSaved;
- var fileSizeSaved;
- var fileCRCSaved;
- var tokenSaved;
- var packageSize;
- var blueKey;
-
- export default class ICINLocker {
- constructor(obj) {
- this.callback = obj;
- }
-
- static checkTheWechatVersion() {
- if (wx.openBluetoothAdapter) {
- wx.openBluetoothAdapter();
- return true;
- } else {
- return false;
- }
- }
-
- static disConnect(lockId) {
- // let connectedDeviceId = wx.getStorageSync('connectedDeviceId')
- wx.closeBLEConnection({
- deviceId: lockId,
- success: function (res) {
- console.log("断开连接成功");
- },
- });
- }
-
- static showLoading(msg) {
- wx.showLoading({
- title: msg,
- });
- }
-
- static getLocationPermission() {
- return new Promise(function (resolve, reject) {
- wx.getLocation({
- type: "wgs84",
- success(res) {
- resolve({
- status: 0,
- statusReason: "获取地理位置成功",
- });
- console.log(res);
- },
- fail(res) {
- reject({
- status: 1,
- statusReason: res.errMsg,
- });
- return;
- },
- });
- });
- }
-
- /**
- * 扫描周围蓝牙设备中的名称为deviceName的设备
- * @param {*} deviceName
- */
- static scanDevices(deviceName) {
- return new Promise(function (resolve, reject) {
- wx.openBluetoothAdapter({
- success: function (res) {
- let deviceId;
- let isLockerExist = false;
- /****** 超时计时器 */
- let timeoutInterval;
- /****** 搜寻列表计时器 */
- let intervalForScanedList;
- /****** 记录扫描的具体位置 */
- let devicesScanedPos = 0
- console.log("初始化蓝牙适配器成功");
-
- // 设置计时器 10s直接超时
- timeoutInterval = setInterval(function () {
- wx.closeBluetoothAdapter({
- success: (res) => {
- clearInterval(timeoutInterval);
- clearInterval(intervalForScanedList);
- reject({
- status: 1,
- statusReason: "超时搜索蓝牙设备,请靠近设备后再试",
- })
- return;
- },
- })
- }, 10000)
-
- // 如上一次与这一次的蓝牙连接目标相同,不用继续搜寻直接返回之前的connectedDeviceId
- let imei = wx.getStorageSync("deviceName");
- let connectedDeviceId = wx.getStorageSync("connectedDeviceId");
- if (imei == deviceName) {
- if (connectedDeviceId) {
- ICINLocker.disConnect(connectedDeviceId);
- clearInterval(timeoutInterval);
- resolve({
- status: 0,
- deviceId: connectedDeviceId,
- });
- return;
- }
- }
-
- // 本机蓝牙适配器状态
- wx.getBluetoothAdapterState({
- success: function (res) {
- // console.log("搜索状态" + res.discovering);
- // console.log("可用状态" + res.available);
- },
- });
-
-
- //开始搜索设备 start----
- wx.startBluetoothDevicesDiscovery({
- allowDuplicatesKey: false,
- success: function (res) {
- // 设置定时器 0.5s一次查看所有搜索出来的设备
- intervalForScanedList = setInterval(function () {
- wx.getBluetoothDevices({
- success: function (res) {
- // 搜不到设备直接返回
- if (res.devices.length == 0) {
- console.log("未搜索到蓝牙设备,请稍后再试");
- clearInterval(timeoutInterval);
- clearInterval(intervalForScanedList);
- reject({
- status: 1,
- statusReason: "未搜索到蓝牙设备,请靠近设备后再试",
- });
- return;
- }
- /***** 单个发现新设备,如有设备直接返回 */
- wx.onBluetoothDeviceFound(function (res) {
- console.log(res.devices[0])
- var ondeviceNameOfitem = res.devices[0].name;
-
- if (ondeviceNameOfitem && ondeviceNameOfitem === deviceName) {
- deviceId = res.devices[0].deviceId;
- wx.setStorage({
- data: res.devices[0].deviceId,
- key: "connectedDeviceId",
- });
- wx.setStorageSync("deviceName", deviceName);
- isLockerExist = true;
- clearInterval(timeoutInterval);
- clearInterval(intervalForScanedList);
- resolve({
- status: 0,
- deviceId: deviceId,
- });
- return;
- }
- });
-
- /***** 在搜索到的设备列表中查询需要连接的设备 */
- for (; devicesScanedPos <= res.devices.length; devicesScanedPos++) {
- let deviceNameOfitem = res.devices[devicesScanedPos].name;
- if (deviceNameOfitem === deviceName) {
- deviceId = res.devices[devicesScanedPos].deviceId;
- wx.setStorage({
- data: res.devices[devicesScanedPos].deviceId,
- key: "connectedDeviceId",
- });
- wx.setStorageSync("deviceName", deviceName);
- isLockerExist = true;
- clearInterval(timeoutInterval);
- clearInterval(intervalForScanedList);
- resolve({
- status: 0,
- deviceId: deviceId,
- });
- return;
- }
- }
- },
- });
- }, 500)
- },
- });
- },
- fail: function (res) {
- console.log("调用失败,请打开蓝牙");
- clearInterval(timeoutInterval);
- reject({
- status: 1,
- statusReason: res,
- });
- return;
- },
- });
- });
- }
-
- /**
- * 连接设备
- * @param {设备ID, 从scanDevice方法的回调获取} deviceId
- * @param {*} isBlue
- */
- static connect(deviceId, isBlue) {
- return new Promise(function (resolve, reject) {
- var primaryServiceId = "";
- var connectedDeviceId = deviceId;
- wx.setStorage({
- data: connectedDeviceId,
- key: "connectedDeviceId",
- });
- wx.createBLEConnection({
- deviceId: deviceId,
- success: function (res) {
- ICINLocker.stopBluetoothDevicesDiscovery();
- wx.getBLEDeviceServices({
- deviceId: connectedDeviceId,
- success: function (res) {
- for (let i = 0; i < res.services.length; i++) {
- let primaryUUid = res.services[i].uuid.substring(0, 8);
- let uuid;
- if (isBlue) {
- //蓝牙扣的
- uuid = "F000C0E0";
- packageSize = 40
- blueKey = true
- } else {
- //锁的
- uuid = "0000FFF0";
- packageSize = 360
- }
- if (res.services[i].isPrimary && primaryUUid === uuid) {
- primaryServiceId = res.services[i].uuid;
- }
- }
- wx.getBLEDeviceCharacteristics({
- deviceId: connectedDeviceId,
- serviceId: primaryServiceId,
- success: function (res) {
- for (var i = 0; i < res.characteristics.length; i++) {
- if (res.characteristics[i].properties.notify) {
- console.log(
- "获取开启notify的ServicweId:",
- primaryServiceId
- );
- console.log(
- "获取开启notify的CharacteristicsId:",
- res.characteristics[i].uuid
- );
- try {
- wx.setStorageSync("notifyServicweId", primaryServiceId);
- wx.setStorageSync(
- "notifyCharacteristicsId",
- res.characteristics[i].uuid
- );
- } catch (e) {
- console.log("notifyCharacteristicsId get wrong");
- }
- }
- if (res.characteristics[i].properties.write) {
- console.log(
- "获取开启write的ServicweId:",
- primaryServiceId
- );
- console.log(
- "获取开启write的CharacteristicsId:",
- res.characteristics[i].uuid
- );
- try {
- wx.setStorageSync("writeServicweId", primaryServiceId);
- if (isBlue) {
- wx.setStorageSync(
- "writeCharacteristicsId",
- res.characteristics[i].uuid
- );
- } else {
- wx.setStorageSync(
- "writeCharacteristicsId",
- res.characteristics[1].uuid
- );
- }
- } catch (e) {
- console.log("writeCharacteristicsId get wrong");
- }
- }
- if (res.characteristics[i].properties.read) {
- console.log("读取函数ServiceId:", primaryServiceId);
- console.log(
- "读取函数CharacteristicsId:",
- res.characteristics[i].uuid
- );
- try {
- wx.setStorageSync("readServicweId", primaryServiceId);
- wx.setStorageSync(
- "readCharacteristicsId",
- res.characteristics[i].uuid
- );
- } catch (e) {
- console.log("readCharacteristicsId get wrong");
- }
- }
- }
- console.log(
- "device getBLEDeviceCharacteristics:",
- res.characteristics
- );
-
- var notifyServicweId = wx
- .getStorageSync("notifyServicweId")
- .toUpperCase();
- var notifyCharacteristicsId = wx
- .getStorageSync("notifyCharacteristicsId")
- .toUpperCase();
- console.log("启用notify的serviceId", notifyServicweId);
- console.log(
- "启用notify的notifyCharacteristicsId",
- notifyCharacteristicsId
- );
- wx.notifyBLECharacteristicValueChange({
- state: true,
- type: "notification",
- deviceId: connectedDeviceId,
- serviceId: primaryServiceId,
- characteristicId: notifyCharacteristicsId,
- success: function (res) {
- console.log(
- "启用通知notifyBLECharacteristicValueChange success",
- res.errMsg
- );
- setTimeout(function () {
- ICINLocker.onBLECharacteristicValueChange();
- }, 1000);
- resolve({
- status: 0,
- mac: connectedDeviceId,
- uuid: primaryServiceId,
- statusReason: "成功连接",
- });
- },
- fail: function (res) {
- console.log("未能打开监听");
- console.log("notifyServicweId" + notifyServicweId);
- console.log(
- "notifyCharacteristicsId" + notifyCharacteristicsId
- );
- reject({
- status: 1,
- statusReason: "未能打开监听",
- });
- ICINLocker.disConnect(connectedDeviceId);
- },
- });
- },
- fail: function (res) {
- reject({
- status: 1,
- statusReason: res.errMsg,
- });
- //ICINLocker.disConnect(connectedDeviceId)
- },
- complete: function () {
- console.log("complete");
- },
- });
- },
- });
- },
- fail: function (res) {
- if(res.errno === 1509007){ //设备已连接
- return
- }
- if(res.errCode === 10012){ //超时
- ICINLocker.connect(connectedDeviceId)
- return
- }
- reject({
- status: 1,
- statusReason: res.errMsg,
- });
- },
- complete: function () {
- console.log("调用结束");
- },
- });
- console.log(connectedDeviceId);
- });
- }
-
- static onBLECharacteristicValueChange() {
- wx.onBLECharacteristicValueChange(function (res) {
-
-
- // 获取多包
- let tempData = "" + ab2hex(res.value);
- receDataSaved += tempData;
- let dataLength = (parseInt(receDataSaved.substring(16, 20), 16) + 14) * 2;
- if (receDataSaved.length < dataLength) {
- return;
- }
-
- let receData = "";
- let resultData = receDataSaved;
- let ciper = resultData.substring(15, 16);
-
- if (ciper == "3" || ciper == "2") {
- let encData = resultData.substring(24, resultData.length - 4);
- let decData = byte2HexStr(
- sm4.sm4_dec(
- hexStr2Byte(encData),
- encData.length / 2,
- hexStr2Byte(encKeySaved)
- )
- );
- receData =
- resultData.substring(0, 24) +
- decData +
- resultData.substring(resultData.length - 4, resultData.length);
- } else {
- receData = resultData;
- }
-
-
- if (receData == "") {
- return;
- }
- wx.setStorage({
- data: receData,
- key: "receData",
- });
- let cmdId = receData.substring(24, 28);
- let cmdStatus = receData.substring(28, 30);
-
- let signKey = "";
- let commonKey = "";
- switch (cmdId) {
- case "300a":
- if (cmdStatus == "00") {
- let softWareVersion =
- hex2int(receData.substring(30, 32)) +
- "." +
- hex2int(receData.substring(32, 34)) +
- "." +
- hex2int(receData.substring(34, 36)) +
- "." +
- hex2int(receData.substring(36, 38));
- let appUserCount = parseInt(receData.substring(124, 128), 16);
- let remainCount = parseInt(receData.substring(132, 136), 16);
- let notUploadCount = parseInt(receData.substring(136, 140), 16);
- let pwdCount = parseInt(receData.substring(140, 142), 16);
- let lockStatus = receData.substring(154, 156);
- let lockerMode = hexToString(receData.substring(184, 200));
- let power = parseInt(receData.substring(38, 40), 16);
- let nbStat = receData.substring(40, 42);
- let nbSignal = parseInt(receData.substring(42, 44));
- let nbIMEI = hexToString(receData.substring(44, 84));
- let nvIMSI = hexToString(receData.substring(84, 124));
- let blackListCount = parseInt(receData.substring(128, 130), 16);
- let bleKeyCount = parseInt(receData.substring(130, 132), 16);
- let fingerPrintsCount = parseInt(receData.substring(142, 144), 16);
- let RFCount = parseInt(receData.substring(144, 146), 16);
- let lockTime = timeConvert(
- parseInt(receData.substring(146, 154), 16),
- 1
- );
- let lockSn = hexToString(receData.substring(200, 240));
- let wifiSsid = hexToString(receData.substring(240, 304));
- let serverIp = hexToString(receData.substring(304, 344));
- let serverPort = hexToString(receData.substring(344, 356));
- let isNbLock = parseInt(hex2int(receData.substring(30, 32)))
- .toString(2)
- .PadLeft(8, "0")
- .substring(3, 4);
- let isWifiLock = parseInt(hex2int(receData.substring(30, 32)))
- .toString(2)
- .PadLeft(8, "0")
- .substring(2, 3);
-
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- softWareVersion: softWareVersion,
- appUserCount: appUserCount,
- remainCount: remainCount,
- notUploadCount: notUploadCount,
- pwdCount: pwdCount,
- lockStatus: lockStatus,
- lockerMode: lockerMode,
- power: power,
- nbStat: nbStat,
- nbSignal: nbSignal,
- nbIMEI: nbIMEI,
- nvIMSI: nvIMSI,
- blackListCount: blackListCount,
- bleKeyCount: bleKeyCount,
- fingerPrintsCount: fingerPrintsCount,
- lockTime: lockTime,
- RFCount: RFCount,
- lockSn: lockSn,
- wifiSsid: wifiSsid,
- serverIp: serverIp,
- serverPort: serverPort,
- isNbLock: isNbLock,
- isWifiLock: isWifiLock,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- });
- }
- break;
-
- case "3092":
- if (cmdStatus == "00") {
- signKey = receData.substring(62, 94);
- commonKey = receData.substring(30, 62);
- try {
- wx.setStorageSync("authUserSignKey", signKey);
- wx.setStorageSync("commonKey", commonKey);
- signKeySaved = signKey;
- } catch (e) {}
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- signKey: signKey,
- commonKey: commonKey,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- });
- }
- break;
-
- case "3093":
- if (cmdStatus == "00") {
- commonKey = receData.substring(30, 62);
- wx.setStorageSync("commonKey", commonKey);
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- commonKey: commonKey,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- });
- }
- break;
-
- case "3094":
- if (cmdStatus == "00") {
- let userSignKey = receData.substring(62, 94);
- let userCommonKey = receData.substring(30, 62);
- wx.setStorageSync("userSignKey", userSignKey);
- wx.setStorageSync("userCommonKey", userCommonKey);
-
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- userSignKey: userSignKey,
- userCommonKey: userCommonKey,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: cmdStatus,
- });
- }
- break;
-
- case "3095":
- // let nbIotResp = receData.substring(28, receData.length);
- // staticCallback({
- // cmdId: cmdId,
- // nbIotResp: nbIotResp
- // })
- // break;
- let dataLength = parseInt(receData.substring(16, 24));
- console.log("3095截取本次的数据长度是" + dataLength);
- let nbIotResp = receData.substring(28, 28 + dataLength);
- staticCallback({
- cmdId: cmdId,
- nbIotResp: nbIotResp
- })
- break;
-
- case "3001":
- let addUserToken = receData.substring(108, 116);
- let status3001 = receData.substring(116, 118);
- console.log("cmdId" + cmdId + ", status3001" + status3001);
- if (status3001 == "06") {
- // signKey = wx.getStorageSync('authUserSignKey');
- if (signKeySaved) {
- ICINLocker.addUserToLock(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- roleSaved,
- signKeySaved,
- addUserToken,
- encKeySaved,
- startTimeSaved,
- endTimeSaved,
- staticCallback
- );
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3001,
- });
- }
- } else if (status3001 == "00") {
- console.log("添加用户成功");
- staticCallback({
- cmdId: cmdId,
- status: status3001,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3001,
- });
- }
- break;
-
- case "3005":
- let tokenOfOpenTheDoor = receData.substring(28, 36);
- let status3005 = receData.substring(36, 38);
- if (status3005 == "06") {
- ICINLocker.openTheDoor(
- deviceNameSaved,
- userIdSaved,
- signKeySaved,
- keyIdSaved,
- tokenOfOpenTheDoor,
- openModeSaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3005 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3005,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3005,
- });
- }
- break;
-
- case "3004":
- let tokenOfResetLock = receData.substring(28, 36);
- let status3004 = receData.substring(36, 38);
- if (status3004 == "06") {
- // signKey = wx.getStorageSync('authUserSignKey');
- ICINLocker.resetLock(
- deviceNameSaved,
- userIdSaved,
- tokenOfResetLock,
- signKeySaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3004 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3004,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3004,
- });
- }
- break;
-
- case "3002":
- let tokenOfDelUser = receData.substring(28, 36);
- let status3002 = receData.substring(36, 38);
- if (status3002 == "06") {
- wx.setStorageSync("tokenOfDelUser", tokenOfDelUser);
- ICINLocker.deleteUser(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- tokenOfDelUser,
- signKeySaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3002 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3002,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3002,
- });
- }
- break;
-
- case "3008":
- let status3008 = receData.substring(108, 110);
- if (status3008 == "00") {
- let lockRecordTotal = receData.substring(110, 114);
- let lockRecordOpenStatus = receData.substring(114, 118);
- let lockRecordCount = receData.substring(118, 122);
- let lockRecordLen = receData.substring(122, 126);
- let forLoop = receData.substring(126, receData.length);
- console.log("循环体为-----" + forLoop);
- let lockRecordList = [];
- for (let i = 1; i <= parseInt(lockRecordLen, 16) * 2; i++) {
- if (i % 54 == 0) {
- let tempRecords = forLoop.substring(i - 54, i);
- console.log(tempRecords);
- /**
- * 0x1F防撬报警;0x2F胁迫指纹报警;0x3X试错报警(低4位代表具体开锁方式);0x4F预留(重置报警)
- * 开锁方式:0机械钥匙;1指纹;2密码;3app;4蓝扣;5远程;6RF卡;7人脸;8虹膜;9临时授权;21常开;22落锁;
- */
- let data = {
- userId: hexToString(tempRecords.substring(0, 40)),
- openMode: tempRecords.substring(40, 42),
- openTime: timeConvert(
- parseInt(tempRecords.substring(42, 50), 16),
- 1
- ),
- uploadFlag: tempRecords.substring(50, 52),
- power: parseInt(tempRecords.substring(52, 54), 16),
- };
- lockRecordList.push(data);
- }
- }
- staticCallback({
- cmdId: cmdId,
- status: status3008,
- lockRecordLen: parseInt(lockRecordLen, 16) * 2,
- lockRecordTotal: parseInt(lockRecordTotal, 16),
- lockRecordList: lockRecordList,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3008,
- });
- }
-
- break;
-
- case "3009":
- let status3009 = receData.substring(28, 30);
- staticCallback({
- cmdId: cmdId,
- status: status3009,
- });
- break;
-
- case "3010":
- let status3010 = receData.substring(28, 30);
- let blueKeyId = receData.substring(30, 70);
- staticCallback({
- cmdId: cmdId,
- status: status3010,
- blueKeyId: blueKeyId,
- });
- break;
-
- case "3011":
- let tokenOfBlueKey = receData.substring(28, 36);
- let status3011 = receData.substring(36, 38);
- if (status3011 == "06") {
- ICINLocker.registeBluetoothBuckle(
- authUserIdSaved,
- blueKeyIdSaved,
- keyIdSaved,
- pwdSaved,
- tokenOfBlueKey,
- signKeySaved,
- encKeySaved,
- staticCallback
- );
- } else {
- staticCallback({
- status: status3011,
- });
- }
- break;
-
- case "300b":
- let tokenOf300b = receData.substring(28, 36);
- let status300b = receData.substring(36, 38);
- if (status300b == "06") {
- ICINLocker.updateFirmware(
- deviceNameSaved,
- authUserIdSaved,
- fileVersionSaved,
- fileSizeSaved,
- fileCRCSaved,
- tokenOf300b,
- signKeySaved,
- encKeySaved,
- staticCallback
- );
- } else {
- staticCallback({
- token: tokenOf300b,
- status: status300b,
- });
- }
- break;
-
- case "300c":
- let status300c = receData.substring(28, 30);
- staticCallback({
- status: status300c,
- });
- break;
-
- case "3012":
- let status3012 = receData.substring(36, 38);
- staticCallback({
- cmdId: cmdId,
- status: status3012,
- });
- break;
-
- case "3030":
- let subCmdId = receData.substring(30, 32);
- let status3030 = receData.substring(28, 30);
- switch (subCmdId) {
- case "01":
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- break;
-
- case "02":
- if (status3030 == "00") {
- let IMEI = receData.substring(34, 74);
- let IMSI = receData.substring(74, 114);
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- IMEI: IMEI,
- IMSI: IMSI,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- }
- break;
-
- case "03":
- let tokenOfHandlePwd = receData.substring(34, 42);
- if (status3030 == "06") {
- ICINLocker.handlePwd(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- pwdSaved,
- pwdNoSaved,
- keyIdSaved,
- signKeySaved,
- tokenOfHandlePwd,
- startTimeSaved,
- endTimeSaved,
- useCountLimitSaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3030 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- }
- break;
-
- case "05":
- let pwdCount = receData.substring(34, 36);
- let pwdAllInfo = receData.substring(36, receData.length);
- let pwdLength = parseInt(pwdCount, 16) * 4;
- console.log(pwdAllInfo);
- let pwdList = [];
- for (let i = 1; i <= pwdLength; i++) {
- if (i % 4 == 0) {
- let tempCard = pwdAllInfo.substring(i - 4, i);
- let data = {
- pwdNo: tempCard.substring(0, 2),
- useCountLimit: tempCard.substring(2, 4),
- };
- pwdList.push(data);
- }
- }
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- pwdList: pwdList,
- });
- break;
-
- case "09":
- let tokenOfFinger = receData.substring(34, 42);
- let completeFlag = receData.substring(46, 48);
- let fingerprintNo = receData.substring(48, 52);
- if (status3030 == "06") {
- ICINLocker.addFingerPrints(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- tokenOfFinger,
- signKeySaved,
- startTimeSaved,
- endTimeSaved,
- alarmFingerSaved,
- encKeySaved,
- staticCallback
- );
- } else if (completeFlag == "01" && status3030 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- fingerprintNo: fingerprintNo,
- completeFlag: completeFlag,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- completeFlag: completeFlag,
- });
- }
- break;
-
- case "0a":
- let fingerprintTotalCnt = receData.substring(34, 36);
- let currCnt = receData.substring(36, 38);
- let fingerprintAllInfo = receData.substring(38, receData.length);
- let fingerprintLength = parseInt(fingerprintTotalCnt, 16) * 62;
-
- console.log(fingerprintAllInfo);
- console.log("length---" + fingerprintAllInfo.length);
- let fingerprintList = [];
- for (let i = 1; i <= fingerprintLength; i++) {
- if (i % 62 == 0) {
- let tempFingerPrints = fingerprintAllInfo.substring(
- i - 62,
- i
- );
- console.log(tempFingerPrints);
- let data = {
- fingerprintNo: tempFingerPrints.substring(0, 4),
- belongsTo: tempFingerPrints.substring(4, 44),
- isAlarmFinger: tempFingerPrints.substring(44, 46),
- startTime: tempFingerPrints.substring(46, 54),
- endTime: tempFingerPrints.substring(54, 62),
- };
- fingerprintList.push(data);
- }
- }
- staticCallback({
- status: status3030,
- subCmdId: subCmdId,
- fingerprintList: fingerprintList,
- fingerprintTotalCnt: fingerprintTotalCnt,
- currCnt: currCnt,
- });
-
- break;
-
- case "10":
- let rfCardTotalCnt = receData.substring(34, 36);
- let rfCardAllInfo = receData.substring(36, receData.length);
- let rfCardlength = parseInt(rfCardTotalCnt, 16) * 18;
- console.log(rfCardAllInfo);
- let rfCardList = [];
- for (let i = 1; i <= rfCardlength; i++) {
- if (i % 18 == 0) {
- let tempCard = rfCardAllInfo.substring(i - 18, i);
- let data = {
- cardIndex: tempCard.substring(0, 2),
- startTime: tempCard.substring(2, 10),
- endTime: tempCard.substring(10, 18),
- };
- rfCardList.push(data);
- }
- }
- staticCallback({
- status: status3030,
- subCmdId: subCmdId,
- rfCardList: rfCardList,
- totalCnt: rfCardTotalCnt,
- });
- break;
-
- case "0f":
- let tokenOfRfCard = receData.substring(34, 42);
- if (status3030 == "06") {
- ICINLocker.RfCardRegister(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- indexSaved,
- tokenOfRfCard,
- signKeySaved,
- startTimeSaved,
- endTimeSaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3030 == "00") {
- let cardNo = receData.substring(44, 84);
-
- /**
- * 第21-22位如果为01、02、03为非安全卡,其他则是安全卡
- */
- let safeCardFlag = cardNo.substring(20, 22);
- // console.log('cardNo------------' + cardNo);
- // console.log('safeCardFlag______' + safeCardFlag);
- if (
- safeCardFlag == "01" ||
- safeCardFlag == "02" ||
- safeCardFlag == "03"
- ) {
- ICINLocker.rFcardAddControl(
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- indexSaved,
- signKeySaved,
- cardNo,
- "01",
- encKeySaved,
- staticCallback
- );
- } else {
- let completeFlag = receData.substring(42, 44);
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- cardNo: cardNo,
- completeFlag: completeFlag,
- });
- }
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- }
- break;
-
- case "0b":
- let tokenOfModifyFinger = receData.substring(34, 42);
- if (status3030 == "06") {
- ICINLocker.modifyFingerPrints(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- actionSaved,
- fingerNoSaved,
- tokenOfModifyFinger,
- signKeySaved,
- alarmFingerSaved,
- startTimeSaved,
- endTimeSaved,
- encKeySaved,
- staticCallback
- );
- } else if (status3030 == "00") {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- }
- break;
-
- case "11":
- if (status3030 == "06") {
- let tokenOfModifyFinger = receData.substring(34, 42);
- ICINLocker.modifyRFCard(
- deviceNameSaved,
- authUserIdSaved,
- userIdSaved,
- keyIdSaved,
- indexSaved,
- tokenOfModifyFinger,
- actionSaved,
- signKeySaved,
- startTimeSaved,
- endTimeSaved,
- encKeySaved,
- staticCallback
- );
- } else {
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- }
- break;
-
- case "12":
- if (status3030 == "00") {
- let tokenOfRFControl = receData.substring(34, 42);
- let completeFlag = receData.substring(42, 44);
- let cardNo = receData.substring(44, 84);
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- tokenOfRFControl: tokenOfRFControl,
- completeFlag: completeFlag,
- cardNo: cardNo,
- });
- }
- break;
-
- case "13":
- staticCallback({
- cmdId: cmdId,
- status: status3030,
- subCmdId: subCmdId,
- });
- break;
-
- case "15":
- let privateKey = receData.substring(34, 66);
- staticCallback({
- status: status3030,
- privateKey: privateKey,
- });
-
- case "0c":
- staticCallback({
- status: status3030,
- });
- break;
-
- case "14":
- let completeFlagOfFiveKeys = receData.substring(34, 36);
- staticCallback({
- status: status3030,
- completeFlag: completeFlagOfFiveKeys,
- });
- }
- break;
- }
- receDataSaved = "";
- });
- }
-
-
- static stopBluetoothDevicesDiscovery() {
- wx.stopBluetoothDevicesDiscovery({
- success: function (res) {
- console.log("停止搜索设备" + JSON.stringify(res.errMsg));
- },
- });
- }
-
- /**
- * *读取锁信息
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} usrID
- * @param {回调} callback
- */
- static readLockerInfo(_lockId, usrID, callback) {
- console.log('读取锁信息参数',_lockId, usrID)
- deviceNameSaved = _lockId;
- let head = makeHeader("300a");
- let cmdID = "300a";
- let lockerID = str2Hex(_lockId).PadRight(80, "0");
- let userID = str2Hex(usrID).PadRight(40, "0");
- let dataModular = (cmdID + lockerID + userID).replace("0x", "");
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let templateResult = (
- head +
- dataModularLength +
- dataModularLength +
- dataModular
- ).replace("0x", "");
- let resultData = templateResult;
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- console.log("读取锁信息发送的数据(300a)" + JSON.stringify(resultData));
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *获取超管鉴权秘钥
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} usrID
- * @param {钥匙ID – 最多40字节} _keyId
- * @param {回调} callback
- */
- static getSignKey(_lockId, usrID, _keyId, callback) {
- deviceNameSaved = _lockId;
- authUserIdSaved = usrID;
- keyIdSaved = _keyId;
- let head = makeHeader("3092");
- let cmdId = "3092";
- let lockID4AuthCode = str2Hex(_lockId);
- encKeySaved = lockID4AuthCode;
- let keyID4AuthCode = str2Hex(_keyId);
- let authuserID4AuthCode = str2Hex(usrID);
- let tempNowTime = new Date().getTime() / 1000;
- let nowTime = parseInt(new Date().getTime() / 1000).toString(16);
-
- let lockID = lockID4AuthCode.PadRight(80, "0");
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let authUserID = authuserID4AuthCode.PadRight(40, "0");
-
- let authCode = ab2hex(
- md5.digest(
- hexStr2Byte(
- authuserID4AuthCode + keyID4AuthCode + nowTime + lockID4AuthCode
- )
- )
- );
- let authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- let dataModular =
- cmdId + lockID + keyID + authUserID + nowTime + authCodeLen + authCode;
-
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(lockID4AuthCode)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hexStr2Byte(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *协商秘钥
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _usrID
- * @param {钥匙ID – 最多40字节} _keyId
- * @param {用户的signKey} _userSignKey
- * @param {回调函数} callback
- */
- static getCommonKey(_lockId, _usrID, _keyId, _userSignKey, callback) {
- console.log("获取commonkey", [...arguments]);
- userIdSaved = _usrID;
- keyIdSaved = _keyId;
- signKeySaved = _userSignKey;
- let _signKey = _userSignKey;
- let head = makeHeader("3093");
- let cmdId = "3093";
- let lockID4AuthCode = str2Hex(_lockId);
- encKeySaved = lockID4AuthCode;
- let keyID4AuthCode = str2Hex(_keyId);
- let authuserID4AuthCode = str2Hex(_usrID);
- let nowTime = parseInt(new Date().getTime() / 1000).toString(16);
-
- let lockID = lockID4AuthCode.PadRight(80, "0");
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let authUserID = authuserID4AuthCode.PadRight(40, "0");
-
- let authCode = ab2hex(
- md5.digest(
- hexStr2Byte(authuserID4AuthCode + keyID4AuthCode + nowTime + _signKey)
- )
- );
- let authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- let dataModular =
- cmdId + lockID + keyID + authUserID + nowTime + authCodeLen + authCode;
- console.log(dataModular);
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(lockID4AuthCode)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "包头信息 +++++++++++" + head + dataModularSM4Length + dataModularLength
- );
- let crcData = crc
- .crc16kermit(hexStr2Byte(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *获取用户signkey
- * @param {门锁ID – 最多40字节} _lockId
- * @param {超管ID} _superAdminId
- * @param {用户ID – 最多20字节} _usrID
- * @param {超管的keyId – 最多40字节} _keyId
- * @param {超管的signkey 或者 authKey} _authUserSignKeyOrAuthKey
- * @param {传入数据类型 String 01: 传入了authUserSignKey, 02:传入了authKey} _accessType
- * @param {回调} callback
- */
- static getUserSignKey(
- _lockId,
- _superAdminId,
- _userID,
- _keyId,
- _authUserSignKeyOrAuthKey,
- _accessType,
- callback
- ) {
- authUserIdSaved = _superAdminId;
- userIdSaved = _userID;
- keyIdSaved = _keyId;
- let head = makeHeader("3094");
- let cmdId = "3094";
- let lockID4AuthCode = str2Hex(_lockId);
- encKeySaved = lockID4AuthCode;
- let keyID4AuthCode = str2Hex(_keyId);
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let userID4AuthCode = str2Hex(_userID);
- let nowTime = parseInt(new Date().getTime() / 1000).toString(16);
- let lockID = lockID4AuthCode.PadRight(80, "0");
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let authUserID = authuserID4AuthCode.PadRight(40, "0");
- let userID = userID4AuthCode.PadRight(40, "0");
- let authCode = "";
- switch (_accessType) {
- case "01":
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- _authUserSignKeyOrAuthKey
- )
- )
- );
- break;
-
- case "02":
- authCode = _authUserSignKeyOrAuthKey;
- break;
-
- default:
- break;
- }
- let authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- let dataModular =
- cmdId +
- lockID +
- authUserID +
- keyID +
- userID +
- nowTime +
- authCodeLen +
- authCode;
- console.log(dataModular);
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(lockID4AuthCode)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "包头信息 +++++++++++" +
- head +
- dataModularSM4Length +
- dataModularLength +
- dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *添加用户
- * @param {锁ID} _lockId
- * @param {超管ID} _superAdminId
- * @param {添加的用户ID} usrId blueName
- * @param {超管的keyId} _keyId
- * @param {00普通用户 01管理员 FF超级管理员} _role
- * @param {superAdmin的signkey} _signKey
- * @param {传入空字符串即可} _token
- * @param {通讯秘钥,getCommonKey命令可以获取} _commonKey
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'00000000'} _endTime
- * @param {回调} callback
- */
- static addUserToLock(
- _lockId,
- _superAdminId,
- _usrId,
- _keyId,
- _role,
- _signKey,
- _token,
- _commonKey,
- _startTime,
- _endTime,
- callback
- ) {
- console.log('添加用户参数', [...arguments])
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _usrId;
- keyIdSaved = _keyId;
- signKeySaved = _signKey;
- roleSaved = _role;
- encKeySaved = _commonKey;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- let signKey = _signKey;
- let head = makeHeader("3001");
- let cmdId = "3001";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserID = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_usrId).PadRight(40, "0");
- let openMode
- if (blueKey) { //蓝牙扣
- openMode = '04'
- } else { //正常用户
- openMode = "03";
- }
- let keyType = "00";
- let startDate = _startTime;
- let expireDate = _endTime;
- var passWord = "".PadRight(40, "0");
- var token = "".PadRight(8, "0");
- var authCode = "";
- var authCodeLen = "00";
- if (_token != "") {
- token = _token;
- authCode = ab2hex(
- md5.digest(
- hexStr2Byte(authuserID4AuthCode + keyID4AuthCode + token + signKey)
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular =
- cmdId +
- lockId +
- authUserID +
- keyID +
- userId +
- openMode +
- keyType +
- startDate +
- expireDate +
- _role +
- passWord +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hexStr2Byte(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- static addBlueKeyToLock(
- _lockId,
- _superAdminId,
- _usrId,
- _keyId,
- _role,
- _signKey,
- _token,
- _commonKey,
- _startTime,
- _endTime,
- callback
- ) {
- console.log('添加用户参数', [...arguments])
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _usrId;
- keyIdSaved = _keyId;
- signKeySaved = _signKey;
- roleSaved = _role;
- encKeySaved = _commonKey;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- let signKey = _signKey;
- let head = makeHeader("3001");
- let cmdId = "3001";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserID = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_usrId).PadRight(40, "0");
- let openMode
- if (blueKey) { //蓝牙扣
- openMode = '04'
- } else { //正常用户
- openMode = "03";
- }
- let keyType = "00";
- let startDate = _startTime;
- let expireDate = _endTime;
- var passWord = "".PadRight(40, "0");
- var token = "".PadRight(8, "0");
- var authCode = "";
- var authCodeLen = "00";
- if (_token != "") {
- token = _token;
- authCode = ab2hex(
- md5.digest(
- hexStr2Byte(authuserID4AuthCode + keyID4AuthCode + token + signKey)
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular =
- cmdId +
- lockId +
- authUserID +
- keyID +
- userId +
- openMode +
- keyType +
- startDate +
- expireDate +
- _role +
- passWord +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hexStr2Byte(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
- /**
- * *开门
- * @param {锁ID} _lockId
- * @param {开门的用户} usrID
- * @param {开门用户的signkey} _signKey
- * @param {开门用户的keyId} _keyId
- * @param {传入空字符串} _tokenOfOpenTheDoor
- * @param {开锁方式 '00' 离线 '01'在线} _openMode
- * @param {开门用户的commonKey} _commonKey
- * @param {回调} callback
- */
- static openTheDoor(
- _lockId,
- usrID,
- _signKey,
- _keyId,
- _tokenOfOpenTheDoor,
- _openMode,
- _commonKey,
- callback
- ) {
- console.log("开门参数", [...arguments]);
- deviceNameSaved = _lockId;
- userIdSaved = usrID;
- keyIdSaved = _keyId;
- signKeySaved = _signKey;
- encKeySaved = _commonKey;
- openModeSaved = _openMode;
- let authUserId = wx.getStorageSync("userSignKey");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let head = makeHeader("3005");
- let cmdId = "3005";
- let keyID4AuthCode = str2Hex(_keyId);
- let keyID = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(usrID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let openMode = _openMode;
- let openTime = parseInt(new Date().getTime() / 1000).toString(16);
- let token = "".PadRight(8, "0");
- let authCode = "";
- let authCodeLen = "00";
- if (_tokenOfOpenTheDoor != "") {
- token = _tokenOfOpenTheDoor;
- authCode = ab2hex(
- md5.digest(
- hexStr2Byte(keyID4AuthCode + userID4AuthCode + token + _signKey)
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular =
- cmdId +
- keyID +
- userId +
- openMode +
- openTime +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hexStr2Byte(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *重置门锁
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _usrID
- * @param {传入空字符串即可} _resetLockToken
- * @param {用户的signkey} _signkey
- * @param {用户的commonKey} _commonKey
- * @param {回调} callback
- */
- static resetLock(
- _lockId,
- _usrID,
- _resetLockToken,
- _signkey,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- userIdSaved = _usrID;
- signKeySaved = _signkey;
- encKeySaved = _commonKey;
-
- let head = makeHeader("3004");
- let cmdId = "3004";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_usrID).PadRight(40, "0");
- let token = "".PadRight(8, "0");
- var authCodeLen = "00";
- var authCode = "";
- if (_resetLockToken != "") {
- token = _resetLockToken;
- authCode = ab2hex(md5.digest(hex2Ab(lockId4AuthCode + token + _signkey)));
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular = cmdId + lockId + userId + token + authCodeLen + authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 同步时间
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} usrId
- * @param {时间- long型秒级时间戳} _time
- * @param {NB接入域名IP} _NBDomainIP
- * @param {用户的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static updateTime(_lockId, usrId, _time, _NBDomainIP, _commonKey, callback) {
- encKeySaved = _commonKey;
- let head = makeHeader("3009");
- let cmdId = "3009";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockerId = lockId4AuthCode.PadRight(80, "0");
- let userId = str2Hex(usrId).PadRight(40, "0");
- let time = parseInt(_time).toString(16);
- let NBDomainIPHex = str2Hex(_NBDomainIP);
- let NBDomainIP = NBDomainIPHex.PadRight(40, "0");
- let dataModular = cmdId + lockerId + userId + time + NBDomainIP;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
- /**
- * 更新固件确认token
- * @param {门锁ID – 最多40字节} _lockId
- * @param {系统管理员ID - 最多20字节} _systemUserId
- * @param {固件升级程序版本 - 4字节 16进制} _fileVersion
- * @param {升级文件总字节数 - 4字节 16进制} _fileSize
- * @param {升级文件crc校验码 - 4字节 16进制} _fileCRC
- * @param {传入空字符串} _updateFirewareToken
- * @param {系统管理员singkey} _signKey
- * @param {通讯密钥} _commonKey
- * @param {回调} callback
- */
- static updateFirmware(
- _lockId,
- _systemUserId,
- _fileVersion,
- _fileSize,
- _fileCRC,
- _updateFirewareToken,
- _signKey,
- _commonKey,
- callback
- ) {
- console.log("更新固件确认token参数", [...arguments]);
- deviceNameSaved = _lockId;
- authUserIdSaved = _systemUserId;
- fileVersionSaved = _fileVersion
- fileSizeSaved = _fileSize;
- fileCRCSaved = _fileCRC;
- signKeySaved = _signKey;
- encKeySaved = _commonKey;
- let head = makeHeader("300b");
- let cmdId = "300b";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockerId = lockId4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_systemUserId);
- let userId = userID4AuthCode.PadRight(40, "0");
- let fileVersion = _fileVersion;
- let fileSize = _fileSize;
- let fileCRC = _fileCRC;
- let token = "00000000";
- let authCodeLen = "00";
- let authCode = "";
- if (_updateFirewareToken != "") {
- token = _updateFirewareToken;
- authCode = ab2hex(md5.digest(hex2Ab(lockId4AuthCode + token + _signKey)));
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular =
- cmdId +
- lockerId +
- userId +
- fileVersion +
- fileSize +
- fileCRC +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 发送更新文件
- * @param {从更新固件获取的token} _token
- * @param {文件大小 - 4字节 16进制} _fileSize
- * @param {当前数据偏移量 - 4字节 16进制} _dataOffset
- * @param {数据长度 - 4字节 16进制 每次最大发送1K} _dataLength
- * @param {升级文件数据} _data
- * @param {通讯密钥} _commonKey
- */
- static transforUpdateFile(
- _token,
- _fileSize,
- _dataOffset,
- _dataLength,
- _data,
- _commonKey,
- callback
- ) {
- encKeySaved = _commonKey;
- let head = makeHeader("300c");
- let cmdId = "300c";
- let dataModular =
- cmdId + _token + _fileSize + _dataOffset + _dataLength + _data;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *删除用户
- * @param {门锁ID} _lockId
- * @param {超管ID – 最多20字节} _superAdminId
- * @param {用户ID – 最多20字节} usrId
- * @param {超管keyId} _keyId
- * @param {置空即可} delUserToken
- * @param {超管的signkey} _signkey
- * @param {用户的commonKey} _commonKey
- * @param {回调} callback
- */
- static deleteUser(
- _lockId,
- _superAdminId,
- usrId,
- _keyId,
- delUserToken,
- _signkey,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = usrId;
- keyIdSaved = _keyId;
- signKeySaved = _signkey;
- encKeySaved = _commonKey;
- let head = makeHeader("3002");
- let cmdId = "3002";
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let delUserId = str2Hex(usrId).PadRight(40, "0");
- let token = "".PadRight(8, "0");
- let authCodeLen = "00";
- let authCode = "";
- if (delUserToken != "") {
- token = delUserToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(authuserID4AuthCode + keyID4AuthCode + token + _signkey)
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let dataModular =
- cmdId +
- lockId +
- authUserId +
- keyId +
- delUserId +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *添加指纹
- * @param {门锁ID} _lockId
- * @param {超管ID – 最多20字节} _superAdminId
- * @param {用户ID – 最多20字节} _userId
- * @param {超管的keyId} _keyId
- * @param {置空即可} _fingerToken
- * @param {超管的signKey} _signKey
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'FFFFFFFF'} _endTime
- * @param {是否为报警指纹,'00'为否,'01'为是} _alarmFinger
- * @param {超管的commonKey} _commonKey
- * @param {回调方法} callback
- */
- static addFingerPrints(
- _lockId,
- _superAdminId,
- _userId,
- _keyId,
- _fingerToken,
- _signKey,
- _startTime,
- _endTime,
- _alarmFinger,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _userId;
- signKeySaved = _signKey;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- alarmFingerSaved = _alarmFinger;
- keyIdSaved = _keyId;
- encKeySaved = _commonKey;
- let head = makeHeader("3030");
- let cmdId = "3030";
- let subCmdId = "09";
- let lockId4AuthCode = str2Hex(_lockId);
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userId);
- let userId = userID4AuthCode.PadRight(40, "0");
- let alarmFinger = _alarmFinger;
- let authCodeLen = "00";
- let authCode = "";
- let token = "00000000";
- if (_fingerToken != "") {
- token = _fingerToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let reqData =
- authUserId +
- keyId +
- userId +
- _startTime +
- _endTime +
- alarmFinger +
- token +
- authCodeLen +
- authCode;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *指纹管理
- * @param {*门锁ID – 最多40字节} _lockId
- * @param {*超管ID – 最多20字节} _superAdminId
- * @param {*用户ID – 最多20字节} _userID
- * @param {*用户keyId} _keyId
- * @param {* 01为删除 02修改 03设置报警指纹 } _action
- * @param {*指纹编号 eg:'0001'’} _fingerNo
- * @param {*置空即可} _fingerToken
- * @param {*superAdmin的signKey} _signKey
- * @param {是否为报警指纹,'00'为否,'01'为是} _alarmFinger
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'FFFFFFFF'} _endTime
- * @param {超管的commonKey} _commonKey
- * @param {*回调} callback
- */
- static modifyFingerPrints(
- _lockId,
- _superAdminId,
- _userID,
- _keyId,
- _action,
- _fingerNo,
- _fingerToken,
- _signKey,
- _alarmFinger,
- _startTime,
- _endTime,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _userID;
- fingerNoSaved = _fingerNo;
- signKeySaved = _signKey;
- keyIdSaved = _keyId;
- actionSaved = _action;
- alarmFingerSaved = _alarmFinger;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- encKeySaved = _commonKey;
-
- let head = makeHeader("3030");
- let cmdId = "3030";
- let subCmdId = "0b";
- let lockId4AuthCode = str2Hex(_lockId);
-
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let alarmFinger = _alarmFinger;
- let startTime = _startTime;
- let endTime = _endTime;
- let authCodeLen = "00";
- let authCode = "";
- let fingerNo = _fingerNo;
- let token = "00000000";
- if (_fingerToken != "") {
- token = _fingerToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let reqData =
- authUserId +
- keyId +
- userId +
- startTime +
- endTime +
- fingerNo +
- alarmFinger +
- _action +
- token +
- authCodeLen +
- authCode;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *查询指纹列表
- * @param {*门锁ID – 最多40字节} _lockId
- * @param {*用户ID – 最多20字节} _userID
- * @param {*用户keyId} _keyId
- * @param {超管的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static queryFingerprintsList(_lockId, _userID, _keyId, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let subCmdId = "0a";
- let keyID4AuthCode = _keyId;
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_userID).PadRight(40, "0");
- let reqData = keyId + userId;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *密码管理
- * @param {门锁ID – 最多40字节} _lockId
- * @param {超管ID – 最多20字节} _superAdminId
- * @param {用户ID – 最多20字节} _userID
- * @param {开锁密码 - 6位数字的字符串} _pwd
- * @param {密码编号 - 取值范围 00-FF } _pwdNo
- * @param {超管的keyId} _keyId
- * @param {superAdmin的signKey} _signKey
- * @param {传入空字符串即可} _pwdToken
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'FFFFFFFF'} _endTime
- * @param {使用次数限制 - 整型,取值范围是0-255,0表示删除密码} _useCountLimit
- * @param {超管的commonKey} _commonKey
- * @param {回调} callback
- */
- static handlePwd(
- _lockId,
- _superAdminId,
- _userID,
- _pwd,
- _pwdNo,
- _keyId,
- _signKey,
- _pwdToken,
- _startTime,
- _endTime,
- _useCountLimit,
- _commonKey,
- callback
- ) {
- console.log("密码参数", [...arguments]);
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _userID;
- pwdSaved = _pwd;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- useCountLimitSaved = _useCountLimit;
- keyIdSaved = _keyId;
- signKeySaved = _signKey;
- pwdNoSaved = _pwdNo;
- encKeySaved = _commonKey;
- let head = makeHeader("3030");
- let cmdId = "3030";
- let subCmdId = "03";
- let lockId4AuthCode = str2Hex(_lockId);
-
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let pwd = str2Hex(_pwd).PadRight(40, "0");
- let useCountLimit = _useCountLimit.toString(16).PadLeft(2, "0");
- let token = "00000000".PadRight(8, "0");
- let startTime = _startTime.PadRight(8, "0");
- let endTime = _endTime.PadRight(8, "0");
- let authCodeLen = "00";
- let authCode = "";
- if (_pwdToken != "") {
- token = _pwdToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let reqData =
- authUserId +
- keyId +
- userId +
- _pwdNo +
- pwd +
- useCountLimit +
- token +
- startTime +
- endTime +
- authCodeLen +
- authCode;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *密码列表
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _userID
- * @param {用户keyId} _keyId
- * @param {用户的commonKey} _commonKey
- * @param {回调} callback
- */
- static queryPwdList(_lockId, _userID, _keyId, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_userID).PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let subCmdId = "05";
-
- let reqData = keyId + userId;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 读取开锁记录
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _userID
- * @param {2个字节 0000: 启动读取记录 0001:上条记录操作同步正常,读取下一条记录(确认存储完上次的记录,再传入0001,会删除上次记录) } _openStatus
- * @param {用户的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static queryLockRecord(_lockId, _userID, _openStatus, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3008";
- let head = makeHeader("3008");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_userID).PadRight(40, "0");
- let lockRecordCount = "0004";
- let dataModular = cmdId + lockId + userId + _openStatus + lockRecordCount;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 读取蓝扣ID
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static readBluetoothBuckle(_lockId, _commonKey, callback) {
- console.log('读取蓝牙扣id参数', [...arguments])
- encKeySaved = _commonKey.substring(0, 32)
- let cmdId = "3010";
- let head = makeHeader("3010");
- console.log('head', head)
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let dataModular = cmdId + lockId;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(encKeySaved)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 注册蓝牙扣
- * @param {授权用户ID – 最多20字节 } _authUserId
- * @param {蓝牙钥匙扣ID - 最多20字节 返回的蓝牙扣名称} _blueKeyId
- * @param {授权用户keyID - 最多40字节 蓝牙扣返回的id } _keyId
- * @param {开锁密码,该密码会写入锁内 - 最多20字节 40个0} _password
- * @param {传入空字符串即可} _bluetoothBuckleToken
- * @param {授权者的signkey } _singkey
- * @param {通讯密钥} _commonKey
- * @param {回调方法} callback
- */
- static registeBluetoothBuckle(
- _authUserId,
- _blueKeyId,
- _keyId,
- _password,
- _bluetoothBuckleToken,
- _signKey,
- _commonKey,
- callback
- ) {
- console.log('注册蓝牙扣参数', [...arguments])
- authUserIdSaved = _authUserId;
- blueKeyIdSaved = _blueKeyId;
- keyIdSaved = _keyId;
- pwdSaved = _password;
- signKeySaved = _signKey;
- encKeySaved = _commonKey.substring(0, 32)
- let cmdId = "3011";
- let head = makeHeader("3011");
- let authuserID4AuthCode = str2Hex(_authUserId);
- let authUserId = str2Hex(_authUserId).PadRight(40, "0");
- let blueKeyId = str2Hex(_blueKeyId).PadRight(40, '0')
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = str2Hex(_keyId).PadRight(80, "0");
- let password = _password;
- let token = "00000000";
- let authCodeLen = "00";
- let authCode = "";
- if (_bluetoothBuckleToken != "") {
- token = _bluetoothBuckleToken;
- let ii = getIIData();
- console.log('ii', ii)
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode + keyID4AuthCode + token + '7569594d4d5377657277313232405e23264038370a0d1112151A212A3542'
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
-
- let authSingkey = ab2hex(md5.digest(
- hex2Ab(
- authuserID4AuthCode + keyID4AuthCode + str2Hex(_blueKeyId) + _signKey
- )))
- console.log(_authUserId, _keyId, _blueKeyId, _signKey)
-
- let dataModular =
- cmdId +
- authUserId +
- blueKeyId +
- keyId +
- password +
- token +
- authCodeLen +
- authCode +
- authSingkey;
- console.log('authcode', authCode)
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
-
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(encKeySaved)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *查询RF卡列表
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _userID
- * @param {用户的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static queryRFCard(_lockId, _userID, _keyId, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let subCmdId = "10";
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userId = str2Hex(_userID).PadRight(40, "0");
- let reqData = keyId + userId;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *录制RF卡
- * @param {门锁ID – 最多40字节} _lockId
- * @param {超管ID – 最多20字节} _superAdminId
- * @param {用户ID – 最多20字节} _userID
- * @param {超管的keyId} _keyId
- * @param {RF卡的索引号-取值范围 00-FF} _index
- * @param {传入空字符串即可} _rfToken
- * @param {superAdmin的signKey} _signKey
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'FFFFFFFF'} _endTime
- * @param {超管的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static RfCardRegister(
- _lockId,
- _superAdminId,
- _userID,
- _keyId,
- _index,
- _rfToken,
- _signKey,
- _startTime,
- _endTime,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _userID;
- keyIdSaved = _keyId;
- indexSaved = _index;
- signKeySaved = _signKey;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let subCmdId = "0F";
-
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let index = _index;
- let token = "00000000";
- let authCodeLen = "00";
- let authCode = "";
- if (_rfToken != "") {
- token = _rfToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let reqData =
- authUserId +
- keyId +
- userId +
- index +
- _startTime +
- _endTime +
- token +
- authCodeLen +
- authCode;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *RF卡管理
- * @param {门锁ID – 最多40字节} _lockId
- * @param {超管ID – 最多20字节} _superAdminId
- * @param {用户ID – 最多20字节} _userID
- * @param {用户keyId} _keyId
- * @param {RF卡的索引号-取值范围 00-FF} _index
- * @param {置空即可} _rfToken
- * @param {01删除 02修改} _action
- * @param {superAdmin的signKey} _signKey
- * @param {设置开始时间-8位timestamp字符串,eg:'00000000'} _startTime
- * @param {设置结束时间-8位timestamp字符串,eg:'FFFFFFFF'} _endTime
- * @param {超管的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static modifyRFCard(
- _lockId,
- _superAdminId,
- _userID,
- _keyId,
- _index,
- _rfToken,
- _action,
- _signKey,
- _startTime,
- _endTime,
- _commonKey,
- callback
- ) {
- deviceNameSaved = _lockId;
- authUserIdSaved = _superAdminId;
- userIdSaved = _userID;
- keyIdSaved = _keyId;
- indexSaved = _index;
- signKeySaved = _signKey;
- startTimeSaved = _startTime;
- endTimeSaved = _endTime;
- actionSaved = _action;
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let subCmdId = "11";
-
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let index = _index;
- let token = "00000000";
- let authCodeLen = "00";
- let authCode = "";
- if (_rfToken != "") {
- token = _rfToken;
- authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
- }
- let reqData =
- authUserId +
- keyId +
- userId +
- index +
- _action +
- _startTime +
- _endTime +
- token +
- authCodeLen +
- authCode;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * rf卡添加非安全卡控制
- * @param {*} _superAdminId
- * @param {*} _userID
- * @param {*} _keyId
- * @param {*} _index
- * @param {*} _signKey
- * @param {*} _cardNo
- * @param {*} _cardFlag
- * @param {*} _commonKey
- * @param {*} callback
- */
- static rFcardAddControl(
- _superAdminId,
- _userID,
- _keyId,
- _index,
- _signKey,
- _cardNo,
- _cardFlag,
- _commonKey,
- callback
- ) {
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "12";
- let authuserID4AuthCode = str2Hex(_superAdminId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_keyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_userID);
- let userId = userID4AuthCode.PadRight(40, "0");
- let index = _index;
- let cardNo = _cardNo;
- let cardFlag = _cardFlag;
- let reqData = authUserId + keyId + userId + index + cardNo + cardFlag;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *设置音量
- * @param {门锁ID – 最多40字节} _lockId
- * @param {用户ID – 最多20字节} _userId
- * @param {声音选项(string) 00 静音 01 低音 02 高音} _volume
- * @param {用户的commonKey} _commonKey
- * @param {回调} callback
- */
- static setVolume(_lockId, _userId, _volume, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let lockId4AuthCode = str2Hex(_lockId);
- let lockId = lockId4AuthCode.PadRight(80, "0");
- let subCmdId = "0C";
- let userId = str2Hex(_userId).PadRight(40, "0");
-
- let reqData = lockId + userId + _volume;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *设置 NB 物联网关 IP
- * @param {NB物联网关IP地址 String 20字节} _NbGwIp
- * @param {端口号 String 6字节} _NbGwPort
- * @param {超管的commonKey} _commonKey
- * @param {回调函数} callback
- */
- static setIpOfNb(_NbGwIp, _NbGwPort, _commonKey, callback) {
- console.log("设置 ip参数", [...arguments]);
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "01";
- let NbGwIp = str2Hex(_NbGwIp).PadRight(40, "0");
- let NbGwPort = str2Hex(_NbGwPort).PadRight(12, "0");
- let reqData = NbGwIp + NbGwPort;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- //读取 NB IMEI 号码
- // Todo: 回复02 密码错误 暂不使用此指令
- static getNbImeiNumber(_lockId, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "02";
- let lockId = str2Hex(_lockId).PadRight(80, "0");
- let reqData = lockId;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * *设置 WIFI AP 信息
- * @param {wifi的名称} _wifiApSsid
- * @param {wifi密码} _wifiApPwd
- * @param {超管的commonKey} _commonKey
- * @param {回调} callback
- */
- static setWifiApInfo(_wifiApSsid, _wifiApPwd, _commonKey, callback) {
- console.log("设置wifi信息", [...arguments]);
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "13";
- let wifiApSsid = str2Hex(_wifiApSsid).PadRight(64, "0");
- let wifiApPwd = str2Hex(_wifiApPwd).PadRight(40, "0");
-
- let reqData = wifiApSsid + wifiApPwd;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- // 用户权限移交
- // Todo: 移交权限signkey
- static transferAuth(
- _lockId,
- _transferFromUserId,
- _transferToUserId,
- _transferFromkeyId,
- _transferFromUserRole,
- _transferToUserRole,
- _signKey,
- _commonKey,
- callback
- ) {
- encKeySaved = _commonKey;
- let head = makeHeader("3012");
- let cmdId = "3012";
- let lockId = str2Hex(_lockId).PadRight(80, "0");
- let authuserID4AuthCode = str2Hex(_transferFromUserId);
- let authUserId = authuserID4AuthCode.PadRight(40, "0");
- let keyID4AuthCode = str2Hex(_transferFromkeyId);
- let keyId = keyID4AuthCode.PadRight(80, "0");
- let userID4AuthCode = str2Hex(_transferToUserId);
- let userId = userID4AuthCode.PadRight(40, "0");
- let authUserNewRole = _transferFromUserRole;
- let userNewRole = _transferToUserRole;
- let token = _lockId.substring(4, 12);
- let authCode = ab2hex(
- md5.digest(
- hex2Ab(
- authuserID4AuthCode +
- keyID4AuthCode +
- userID4AuthCode +
- token +
- _signKey
- )
- )
- );
- let authCodeLen = (authCode.length / 2).toString(16).PadLeft(2, "0");
-
- let dataModular =
- cmdId +
- lockId +
- authUserId +
- keyId +
- userId +
- authUserNewRole +
- userNewRole +
- token +
- authCodeLen +
- authCode;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 获取锁端私钥
- * @param {门锁ID – 最多40字节} _lockId
- * @param {通讯密钥} _commonKey
- * @param {回调} callback
- */
- static getPirvateKey(_lockId, _commonKey, callback) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "15";
- let lockId = str2Hex(_lockId).PadRight(80, "0");
- let reqData = lockId;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * 添加五组密钥
- * @param {门锁ID – 最多40字节} _lockId
- * @param {写入时间-8位timestamp字符串 eg: "00000000"} _writeTime
- * @param {是否写入通讯密钥('01':写入;'00':不写入)} _isComKey
- * @param {通讯密钥} _comKey
- * @param {是否写入园区密钥('01':写入;'00':不写入)} _isParkKey
- * @param {园区密钥} _parkKey
- * @param {是否写入楼号密钥('01':写入;'00':不写入)} _isTowerKey
- * @param {楼号密钥} _towerKey
- * @param {是否写入层号密钥('01':写入;'00':不写入)} _isFloorKey
- * @param {层号密钥} _floorKey
- * @param {是否写入同层区域密钥('01':写入;'00':不写入)} _isAreaKey
- * @param {同层区域密钥} _areaKey
- * @param {通信密钥} _commonKey
- */
- static addFiveKeys(
- _lockId,
- _writeTime,
- _isComKey,
- _comKey,
- _isParkKey,
- _parkKey,
- _isTowerKey,
- _towerKey,
- _isFloorKey,
- _floorKey,
- _isAreaKey,
- _areaKey,
- _commonKey,
- callback
- ) {
- encKeySaved = _commonKey;
- let cmdId = "3030";
- let head = makeHeader("3030");
- let subCmdId = "14";
- let lockId = str2Hex(_lockId).PadRight(80, "0");
- let comKey = _comKey.PadRight(32, "0");
- let parkKey = _parkKey.PadRight(32, "0");
- let towerKey = _towerKey.PadRight(32, "0");
- let floorKey = _floorKey.PadRight(32, "0");
- let areaKey = _areaKey.PadRight(32, "0");
-
- let reqData =
- lockId +
- _writeTime +
- _isComKey +
- comKey +
- _isParkKey +
- parkKey +
- _isTowerKey +
- towerKey +
- _isFloorKey +
- floorKey +
- _isAreaKey +
- areaKey;
- let reqDataLength = (reqData.length / 2).toString(16).PadLeft(2, "0");
- let dataModular = cmdId + subCmdId + reqDataLength + reqData;
- let dataModularLength = (dataModular.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let dataModularSM4 = sm4.sm4_enc(
- hexStr2Byte(dataModular),
- dataModular.length / 2,
- hexStr2Byte(_commonKey)
- );
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log(
- "dataModularSM4String---------------------" + dataModularSM4HexString
- );
- let dataModularSM4Length = (dataModularSM4HexString.length / 2)
- .toString(16)
- .PadLeft(4, "0");
- let resultData =
- head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log(
- "加密前:" + head + dataModularSM4Length + dataModularLength + dataModular
- );
- let crcData = crc
- .crc16kermit(hex2Ab(resultData))
- .toString(16)
- .PadLeft(4, "0");
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
-
- /**
- * NBIOT通道转发
- * @param {*} _nbIotCmd
- * @param {*} _commonKey
- */
- static nbIotTransmit(_nbIotCmd,_commonKey,callback) {
- encKeySaved = _commonKey
- let head = makeHeader('3095');
- let cmdId = "3095";
- let dataModular = cmdId + _nbIotCmd;
- let dataModularLength = (dataModular.length / 2).toString(16).PadLeft(4, '0');
- let dataModularSM4 = sm4.sm4_enc(hexStr2Byte(dataModular), dataModular.length / 2, hexStr2Byte(_commonKey));
- let dataModularSM4HexString = byte2HexStr(dataModularSM4);
- console.log('dataModularSM4String---------------------' + dataModularSM4HexString)
- let dataModularSM4Length = (dataModularSM4HexString.length / 2).toString(16).PadLeft(4, '0');
- let resultData = head + dataModularSM4Length + dataModularLength + dataModularSM4HexString;
- console.log('加密前:' + head + dataModularSM4Length + dataModularLength + dataModular)
- let crcData = (crc.crc16kermit(hexStr2Byte(resultData)).toString(16)).PadLeft(4, '0');
- resultData += crcData;
- sendDataTolock(resultData);
- staticCallback = callback;
- }
- }
-
- String.prototype.PadLeft = function (len, charStr) {
- var s = this + "";
- return new Array(len - s.length + 1).join(charStr, "") + s;
- };
-
- String.prototype.PadRight = function (len, charStr) {
- var s = this + "";
- return s + new Array(len - s.length + 1).join(charStr, "");
- };
-
- /**
- * String转16进制
- * @param {字符串} str
- */
- function str2Hex(str) {
- var val = "";
- for (var i = 0; i < str.length; i++) {
- if (val == "") val = str.charCodeAt(i).toString(16);
- else val += str.charCodeAt(i).toString(16);
- }
- return val;
- }
-
- /**
- * 16进制转String
- */
- function hexToString(hex) {
- var arr = hex.split("");
- var out = "";
- for (var i = 0; i < arr.length / 2; i++) {
- var tmp = "0x" + arr[i * 2] + arr[i * 2 + 1];
- var charValue = String.fromCharCode(tmp);
- out += charValue;
- }
- return out;
- }
-
- function ab2hex(buffer) {
- var hexArr = Array.prototype.map.call(new Uint8Array(buffer), function (bit) {
- return ("00" + bit.toString(16)).slice(-2);
- });
- return hexArr.join("");
- }
-
- function getIIData() {
- let ii = 0;
- for (let i = 0; i < 8; i++) {
- ii = 0x11 + i * i;
- }
- return ii;
- }
-
- //分包
- function datasubpck(datahex) {
- var arrayObj = new Array();
- let dataPackageLength = packageSize
- console.log('分包大小', dataPackageLength)
- for (var i = 0; i < datahex.length; i += dataPackageLength) {
- // 预加 最大包长度,如果依然小于总数据长度,可以取最大包数据大小
- if (i + dataPackageLength < datahex.length) {
- arrayObj.push(datahex.substring(i, i + dataPackageLength));
- } else {
- arrayObj.push(datahex.substring(i));
- }
- }
- return arrayObj;
- }
-
- /**
- * 向锁端写入数据
- * @param {*} connectedDeviceId
- * @param {*} writeServicweId
- * @param {*} writeCharacteristicsId
- * @param {*} dataArray
- * @param {*} index
- */
- var totalLength = 0;
-
- function deviceWrite(
- connectedDeviceId,
- writeServicweId,
- writeCharacteristicsId,
- dataArray,
- index
- ) {
- totalLength = dataArray.length;
- var subhex = "";
- subhex = dataArray[index];
- index = index + 1;
- var bufferSuplied = hex2Ab(subhex);
-
- try {
- wx.writeBLECharacteristicValue({
- // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
- deviceId: connectedDeviceId,
- // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
- serviceId: writeServicweId,
- // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
- characteristicId: writeCharacteristicsId,
- value: bufferSuplied,
- success: function (res) {
- //递归发送
- if (index < totalLength) {
- deviceWrite(
- connectedDeviceId,
- writeServicweId,
- writeCharacteristicsId,
- dataArray,
- index
- );
- }
- },
- fail: function (res) {
- console.log("写入失败", res);
- //如果写入事变
- ICINLocker.connect(connectedDeviceId);
- throw new Error(res);
- },
- });
- } catch (e) {
- throw e;
- }
- }
-
- function calculateAuthKey(_superAdminId, _keyId, _userId, _signKey) {
- return ab2hex(
- md5.digest(hex2Ab(_superAdminId + _keyId + _userId + _signkey))
- );
- }
-
- /**
- * 向锁发送数据
- * @param {*} _hexData
- */
- function sendDataTolock(_hexData) {
- var receData = "";
-
- wx.setStorage({
- data: receData,
- key: "receData",
- });
- var hex = _hexData;
- console.log("发送的指令" + hex);
- var connectedDeviceId = wx.getStorageSync("connectedDeviceId");
- var writeServicweId = wx.getStorageSync("writeServicweId");
- var writeCharacteristicsId = wx.getStorageSync("writeCharacteristicsId");
- var dataArray = datasubpck(hex);
- deviceWrite(
- connectedDeviceId,
- writeServicweId,
- writeCharacteristicsId,
- dataArray,
- 0
- );
- }
-
- function makeHeader(type) {
- let normalHead = "EF01EE02";
- let headType = "01";
- let headNo = "0001";
- var headSta = "";
- if (type == "300a") {
- headSta = "10";
- } else if (type == "3093" || type == "3092" || type == "3094" || type == "3010" || type == "3011") {
- headSta = "12";
- } else {
- headSta = "13";
- }
- let result = normalHead + headType + headNo + headSta;
- return result;
- }
-
- function isLockID(value) {
- var rule = "^ICIN_[\\da-zA-Z]{12}$";
- var re = new RegExp(rule);
- if (re.test(value)) {
- return true;
- } else {
- return false;
- }
- }
-
- function str2Ascii(data) {
- var result = "";
- for (var i = data.length - 1; i >= 0; i--) {
- var str = data.charAt(i);
- var code = str.charCodeAt();
- result += code;
- }
- return result;
- }
-
- function hex2Ab(value) {
- var typedArray = new Uint8Array(
- value.match(/[\da-f]{2}/gi).map(function (h) {
- return parseInt(h, 16);
- })
- );
- return typedArray.buffer;
- }
-
- function hexStr2Byte(hexStr) {
- var pos = 0;
- var len = hexStr.length;
- if (len % 2 !== 0) {
- return null;
- }
- len /= 2;
- var hexA = [];
- for (var i = 0; i < len; i++) {
- var s = hexStr.substr(pos, 2);
- var v = parseInt(s, 16);
- hexA.push(v);
- pos += 2;
- }
- return hexA;
- }
-
- function ip2hex(_ip) {
- var REG =
- /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
- var xH = "",
- result = REG.exec(_ip);
- if (!result) return -1;
- for (var i = 1; i <= 4; i++) {
- var h = parseInt(result[i]);
- xH += (h > 15 ? "" : "0") + h.toString(16);
- }
- return parseInt(xH, 16).toString();
- }
-
- function timeConvert(timestamp, num) {
- //num:0 YYYY-MM-DD num:1 YYYY-MM-DD hh:mm:ss // timestamp:时间戳
- timestamp = timestamp + "";
- timestamp = timestamp * 1000;
- var date = new Date(timestamp);
- var y = date.getFullYear();
- var m = date.getMonth() + 1;
- m = m < 10 ? "0" + m : m;
- var d = date.getDate();
- d = d < 10 ? "0" + d : d;
- var h = date.getHours();
- h = h < 10 ? "0" + h : h;
- var minute = date.getMinutes();
- var second = date.getSeconds();
- minute = minute < 10 ? "0" + minute : minute;
- second = second < 10 ? "0" + second : second;
- if (num == 0) {
- return y + "-" + m + "-" + d;
- } else {
- return y + "-" + m + "-" + d + " " + h + ":" + minute + ":" + second;
- }
- }
-
- // 16进制数转10进制
- var ex16hex = function (value) {
- value = stripscript(value);
- value = value.replace("0x", "");
- var arr = value.split("");
- arr = arr.reverse();
- var len = arr.length;
- var res = 0;
- $.each(arr, function (i, v) {
- var num = hex_change(v);
- console.log(num);
- res += muti16(num, i);
- });
- return res;
- };
-
- function hex2int(hex) {
- var len = hex.length,
- a = new Array(len),
- code;
- for (var i = 0; i < len; i++) {
- code = hex.charCodeAt(i);
- if (48 <= code && code < 58) {
- code -= 48;
- } else {
- code = (code & 0xdf) - 65 + 10;
- }
- a[i] = code;
- }
- return a.reduce(function (acc, c) {
- acc = 16 * acc + c;
- return acc;
- }, 0);
- }
-
- function byte2HexStr(byteArray) {
- if (byteArray) {
- var str = "";
- for (var i = 0; i < byteArray.length; i++) {
- var tmp = byteArray[i].toString(16);
- if (tmp.length === 1) {
- tmp = "0" + tmp;
- }
- str += tmp;
- }
- return str;
- } else {
- return null;
- }
- }
|