const config = require('../config')
|
|
const util = require('./util1.js')
|
|
const plugin = requirePlugin("myPlugin")
|
|
var isConnected = false
|
|
var basecode = 29283991
|
|
class LwJ{
|
|
constructor(lockDevice,isConnected,connectedDeviceId,isInitReady,lockModel){
|
|
this.isConnected = isConnected
|
|
this.lockDevice = lockDevice
|
|
this.connectedDeviceId = connectedDeviceId
|
|
this.isInitReady = isInitReady
|
|
this.lockModel = lockModel
|
|
this.taskId = 0
|
|
this.isJack = false
|
|
}
|
|
getData(){
|
|
return {
|
|
isConnected:this.isConnected,
|
|
isConnected:this.lockDevice,
|
|
isConnected:this.connectedDeviceId,
|
|
isConnected:this.isInitReady,
|
|
isConnected:this.lockModel,
|
|
isConnected:this.taskId
|
|
}
|
|
}
|
|
initBluetooth () {
|
|
var that = this
|
|
wx.getConnectedBluetoothDevices({
|
|
services: [config.uuid.serviceUuid],
|
|
success: function (res) {
|
|
res.devices.map(function (it) {
|
|
if (it.deviceId == connectedDeviceId || it.name == name) {
|
|
this.isConnected = true
|
|
}
|
|
})
|
|
|
|
// that.setData({
|
|
// isConnected: this.isConnected
|
|
// })
|
|
console.log('isConnected', isConnected)
|
|
if (isConnected) {
|
|
if (that.isInitReady) {
|
|
that.doWork()
|
|
} else {
|
|
that.setupConnection()
|
|
}
|
|
} else {
|
|
that.connectTo()
|
|
}
|
|
},
|
|
})
|
|
}
|
|
connectTo () {
|
|
var that = this
|
|
wx.showLoading({
|
|
title: '连接中',
|
|
})
|
|
wx.createBLEConnection({
|
|
deviceId: this.lockDevice.deviceId,
|
|
timeout: config.ble.connectTimeOut,
|
|
success: function (res) {
|
|
console.debug('connectTo', res)
|
|
isConnected = true
|
|
wx.hideLoading()
|
|
setTimeout(function () {
|
|
that.setupConnection()
|
|
}, 500)
|
|
},
|
|
fail: function (e) {
|
|
console.debug('connectTo', e)
|
|
wx.hideLoading()
|
|
switch (e.errCode) {
|
|
case 10003: {
|
|
wx.showModal({
|
|
title: '连接失败',
|
|
content: '是否重新连接?',
|
|
success: function (res) {
|
|
if (res.confirm) {
|
|
that.connectTo()
|
|
}
|
|
}
|
|
})
|
|
break
|
|
}
|
|
case 10012: {
|
|
wx.showModal({
|
|
title: '连接失败',
|
|
content: '蓝牙连接超时',
|
|
showCancel: false
|
|
})
|
|
break
|
|
}
|
|
case 10002: {
|
|
wx.showModal({
|
|
title: '连接失败',
|
|
content: '没有找到指定设备',
|
|
showCancel: false
|
|
})
|
|
break
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
setupConnection () {
|
|
var that = this
|
|
wx.showLoading({
|
|
title: '初始化连接中',
|
|
})
|
|
wx.getBLEDeviceServices({
|
|
deviceId: that.lockDevice.deviceId,
|
|
success: function (res) {
|
|
console.log('Services', res)
|
|
wx.getBLEDeviceCharacteristics({
|
|
deviceId: that.lockDevice.deviceId,
|
|
serviceId: config.uuid.serviceUuid.toUpperCase(),
|
|
success: function (res) {
|
|
console.log('Characteristics', res)
|
|
wx.onBLECharacteristicValueChange(function (res) {
|
|
var bytes = new Uint8Array(res.value)
|
|
console.log('bytes', bytes)
|
|
var data = plugin.parseBytes(that.lockDevice.name, basecode, bytes)
|
|
console.log('data', data)
|
|
switch (data.cmd) {
|
|
case 'reportLockBattery': {
|
|
if (data.data.battery < 10) {
|
|
wx.showModal({
|
|
title: '电量报警',
|
|
content: `门锁当前电量${data.data.battery}%!\n电量严重不足,请立即更换电池!`,
|
|
showCancel: false
|
|
})
|
|
} else if (data.data.battery < 30) {
|
|
wx.showModal({
|
|
title: '电量预警',
|
|
content: `门锁当前电量${data.data.battery}%!\n请及时更换电池!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
break
|
|
}
|
|
case 'reportRfCardResult': {
|
|
if (that.taskId == 61) {
|
|
wx.showModal({
|
|
title: '检测到新卡',
|
|
content: `是否添加此房卡,卡号:${data.data.cardId}?`,
|
|
success: function (res) {
|
|
if (res.confirm) {
|
|
rfCardId = data.data.cardId
|
|
that.onAddRfCard()
|
|
}
|
|
}
|
|
})
|
|
} else {
|
|
if (that.lockModel > 70) {
|
|
if (data.data.isValid) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `房卡开锁成功,序号:${data.data.index}!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `多次刷房卡开锁失败!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
} else {
|
|
if (data.data.isValid) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `房卡开锁成功,卡号:${data.data.cardId}!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `房卡未授权,卡号:${data.data.cardId}!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
}
|
|
}
|
|
break
|
|
}
|
|
case 'reportPincodeResult': {
|
|
if (that.lockModel > 70) {
|
|
if (data.data.isValid) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `密码开锁成功,序号:${data.data.index}!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `多次密码开锁失败!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
} else {
|
|
if (data.data.isValid) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `密码:${data.data.pincode}开锁成功!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `密码:${data.data.pincode}未授权!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
}
|
|
break
|
|
}
|
|
case 'reportFingerprintResult': {
|
|
if (data.data.isValid) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `指纹开锁成功,序号:${data.data.index}!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `多次指纹开锁失败!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
break
|
|
}
|
|
case 'queryLockState': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '查询失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
// that.setData({
|
|
// lock: {
|
|
// mac: data.data.mac,
|
|
// lockType: util.getLockType(that.lockModel),
|
|
// },
|
|
// isBindLock: data.data.isBind
|
|
// })
|
|
// lockMac = data.data.mac
|
|
|
|
if (that.taskId > 0) {
|
|
if (data.data.isBind) {
|
|
wx.showModal({
|
|
title: data.data.mac,
|
|
content: '此设备已经硬件绑定!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: data.data.mac,
|
|
content: '此设备硬件未绑定!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
}
|
|
}
|
|
that.taskId = 0
|
|
break
|
|
}
|
|
case 'queryLockBattery': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '查询失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `此门锁电量为${data.data.battery}%`,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
case 'queryNbImei': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '查询失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `此NB设备IMEI为${data.data.imei}`,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
case 'setNbFun': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '设置Nb功能失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: that.data.isNbEnable ? 'NB功能已禁用' : 'NB功能已打开',
|
|
showCancel: false,
|
|
})
|
|
that.setData({
|
|
isNbEnable: !that.data.isNbEnable
|
|
})
|
|
break
|
|
}
|
|
case 'sendBindLock': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '绑定失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isBindLock: data.data.isBind
|
|
})
|
|
if (data.data.isBind) {
|
|
wx.showToast({
|
|
title: '绑定成功!',
|
|
})
|
|
} else {
|
|
wx.showToast({
|
|
title: '绑定失败!',
|
|
})
|
|
}
|
|
break
|
|
}
|
|
|
|
case 'sendUnbindLock': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '解绑失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isBindLock: data.data.isBind
|
|
})
|
|
if (data.data.isBind) {
|
|
wx.showToast({
|
|
title: '解绑失败!',
|
|
})
|
|
} else {
|
|
wx.showToast({
|
|
title: '解绑成功!',
|
|
})
|
|
}
|
|
break
|
|
}
|
|
case 'login1':
|
|
case 'sendOpenLockP1': {
|
|
if (data.code != 200) {
|
|
wx.hideLoading()
|
|
if (that.taskId == 41) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: that.data.isJack ? '上电失败!' : '解锁失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
} else if (that.taskId == 32) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '登录失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
}
|
|
|
|
break
|
|
}
|
|
if (that.taskId == 41) {
|
|
var bytes = plugin.sendOpenLockP2(that.lockDevice.name, basecode, data.data.randomN)
|
|
console.debug('bytes', bytes)
|
|
that.sendBytes(bytes)
|
|
} else if (that.taskId == 32) {
|
|
var bytes = plugin.login2(that.lockDevice.name, basecode, data.data.randomN)
|
|
console.debug('bytes', bytes)
|
|
that.sendBytes(bytes)
|
|
}
|
|
break;
|
|
}
|
|
case 'login':
|
|
case 'sendOpenLockP2': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
if (that.taskId == 41) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: that.data.isJack ? '上电失败!' : '解锁失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
} else if (that.taskId == 32) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '登录失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
}
|
|
break
|
|
}
|
|
|
|
isLockLogin = true
|
|
if (that.taskId == 41) {
|
|
wx.showToast({
|
|
title: that.data.isJack ? '上电成功!' : '解锁成功!',
|
|
})
|
|
} else if (that.taskId == 32) {
|
|
wx.showToast({
|
|
title: '登录成功!',
|
|
})
|
|
}
|
|
that.taskId = 0
|
|
break;
|
|
}
|
|
|
|
case 'syncClock': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '同步时间失败!' + data.data.msg,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '时间更新成功!',
|
|
showCancel: false
|
|
})
|
|
break;
|
|
}
|
|
case 'addPincode': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '添加密码失败!' + data.data.msg,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isPincodeAdd: true
|
|
})
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `添加密码${pincode}成功!`,
|
|
showCancel: false
|
|
})
|
|
break
|
|
}
|
|
|
|
case 'delPincode': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '删除密码失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `删除密码${pincode}成功!`,
|
|
showCancel: false,
|
|
})
|
|
that.setData({
|
|
isPincodeAdd: false
|
|
})
|
|
pincode = -1
|
|
pincodeIndex = -1
|
|
break
|
|
}
|
|
|
|
case 'addRfCard': {
|
|
wx.hideLoading()
|
|
if (data.code == 100) {
|
|
wx.showLoading({
|
|
title: data.data.msg,
|
|
})
|
|
break
|
|
} else if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '添加房卡失败!' + data.data.msg,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isRfCardAdd: true
|
|
})
|
|
if (that.lockModel > 70) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `添加房卡成功,序号${rfCardIndex}!`,
|
|
showCancel: false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `添加房卡成功,卡号${rfCardId}!`,
|
|
showCancel: false
|
|
})
|
|
}
|
|
break
|
|
}
|
|
|
|
case 'delRfCard': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '删除房卡失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isRfCardAdd: false
|
|
})
|
|
if (that.lockModel > 70) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `删除房卡成功,序号${rfCardIndex}!`,
|
|
showCancel: false,
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `删除房卡成功,卡号${rfCardId}!`,
|
|
showCancel: false,
|
|
})
|
|
}
|
|
rfCardId = -1
|
|
rfCardIndex = -1
|
|
break
|
|
}
|
|
|
|
case 'addFingerprint': {
|
|
wx.hideLoading()
|
|
if (data.code == 100) {
|
|
wx.showLoading({
|
|
title: data.data.msg,
|
|
})
|
|
break
|
|
} else if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '添加指纹失败!' + data.data.msg,
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
that.setData({
|
|
isFingerprintAdd: true
|
|
})
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `添加指纹成功,序号${fingerprintIndex}!`,
|
|
showCancel: false
|
|
})
|
|
break
|
|
}
|
|
|
|
case 'delFingerprint': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '删除指纹失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: `删除指纹成功,序号${fingerprintIndex}!`,
|
|
showCancel: false,
|
|
})
|
|
that.setData({
|
|
isFingerprintAdd: false
|
|
})
|
|
fingerprintIndex = -1
|
|
break
|
|
}
|
|
|
|
case 'changeAdminPincode': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '修改管理密码失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showToast({
|
|
title: '修改管理密码成功!',
|
|
})
|
|
}
|
|
|
|
case 'queryLockSlotState': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '查询失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: data.data.state == 0 ? '此门锁方舌关闭' : '此门锁方舌打开',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
|
|
case 'queryLockUnlockState': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '查询失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: data.data.state == 0 ? '此门锁已关闭' : '此门锁已打开',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
|
|
case 'setLockUnlockState': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '设置常开指令失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: data.data.state == 0 ? '常开模式已退出' : '常开模式已开启',
|
|
showCancel: false,
|
|
})
|
|
that.setData({
|
|
isUnloked: data.data.state == 1
|
|
})
|
|
break
|
|
}
|
|
|
|
case 'setLockMuteState': {
|
|
wx.hideLoading()
|
|
if (data.code != 200) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '设置静音指令失败!',
|
|
showCancel: false,
|
|
success: function (res) {}
|
|
})
|
|
break
|
|
}
|
|
that.taskId = 0
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: data.data.state == 1 ? '静音模式已退出' : '静音模式已开启',
|
|
showCancel: false,
|
|
})
|
|
that.setData({
|
|
isMuted: data.data.state == 0
|
|
})
|
|
break
|
|
}
|
|
}
|
|
})
|
|
|
|
wx.notifyBLECharacteristicValueChange({
|
|
deviceId: that.lockDevice.deviceId,
|
|
serviceId: config.uuid.serviceUuid.toUpperCase(),
|
|
characteristicId: config.uuid.notifyUuid.toUpperCase(),
|
|
state: true,
|
|
success: function (res) {
|
|
console.log('setupNotify', res)
|
|
that.isInitReady = true
|
|
setTimeout(function () {
|
|
wx.hideLoading()
|
|
that.onQueryBindState()
|
|
}, 500)
|
|
},
|
|
})
|
|
},
|
|
})
|
|
},
|
|
})
|
|
}
|
|
onQueryBindState () {
|
|
var that = this
|
|
wx.showLoading({
|
|
title: '查询中',
|
|
})
|
|
|
|
var bytes = plugin.queryLockState(this.lockDevice.name)
|
|
console.debug('bytes', bytes)
|
|
that.sendBytes(bytes)
|
|
}
|
|
openLock (taskId) {
|
|
var that = this
|
|
this.taskId = taskId
|
|
wx.showLoading({
|
|
title: that.isJack ? '上电中' : '解锁中',
|
|
})
|
|
var bytes = plugin.sendOpenLockP1(that.lockDevice.name, basecode)
|
|
console.debug('bytes', bytes)
|
|
that.sendBytes(bytes)
|
|
}
|
|
sendBytes(bytes) {
|
|
var that = this
|
|
setTimeout(function () {
|
|
wx.writeBLECharacteristicValue({
|
|
deviceId: that.lockDevice.deviceId,
|
|
serviceId: config.uuid.serviceUuid.toUpperCase(),
|
|
characteristicId: config.uuid.writeUuid.toUpperCase(),
|
|
value: bytes,
|
|
success: function (res) {
|
|
|
|
},
|
|
})
|
|
}, 50)
|
|
}
|
|
}
|
|
module.exports = LwJ
|