250 lines
8.4 KiB
JavaScript
250 lines
8.4 KiB
JavaScript
|
import { fetchData, stsFailContent } from '../utils/index';
|
|||
|
let wifiConfigTimer = null;
|
|||
|
let wifiConnectTimer = null;
|
|||
|
|
|||
|
class WeChat_EConnectWifi {
|
|||
|
constructor(params) {
|
|||
|
this.params = params;
|
|||
|
// const { accessToken, deviceSerial, validateCode, customId } = params;
|
|||
|
}
|
|||
|
|
|||
|
// 扫描二维码
|
|||
|
scanDevice(accessToken) {
|
|||
|
wx.scanCode({
|
|||
|
success (res) {
|
|||
|
console.log('扫描结果',res)
|
|||
|
const result = res.result;
|
|||
|
console.log(result);
|
|||
|
const temp = result.split('\r');
|
|||
|
console.log('temp', temp);
|
|||
|
if (temp && temp.length > 0) {
|
|||
|
// const res = temp[0];
|
|||
|
const deviceSerial = temp[1];
|
|||
|
const validateCode = temp[2];
|
|||
|
console.log(temp, deviceSerial, validateCode);
|
|||
|
wx.setStorage({
|
|||
|
key: 'deviceSerial',
|
|||
|
data: deviceSerial
|
|||
|
});
|
|||
|
|
|||
|
wx.setStorage({
|
|||
|
key: 'validateCode',
|
|||
|
data: validateCode
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
searchDeviceInfo = (accessToken = '', deviceSerial = '') => {
|
|||
|
const promise = new Promise((resolve, reject) => {
|
|||
|
if (!accessToken || !deviceSerial) {
|
|||
|
reject('searchDeviceInfo:fail:params error');
|
|||
|
}
|
|||
|
fetchData('/api/v3/device/searchDeviceInfo', '', {accessToken, deviceSerial}, 'POST' ,(res) => {
|
|||
|
|
|||
|
if (res) {
|
|||
|
resolve(res);
|
|||
|
} else {
|
|||
|
reject('searchDeviceInfo:fail:request fail')
|
|||
|
}
|
|||
|
}, (err) => {
|
|||
|
reject('searchDeviceInfo:fail:network error')
|
|||
|
});
|
|||
|
});
|
|||
|
|
|||
|
return promise
|
|||
|
}
|
|||
|
|
|||
|
connectWifi = (deviceSerial = '', validateCode = '', accessToken = '', BSSID, SSID, wifiPassword) => {
|
|||
|
const promise = new Promise((resolve, reject) => {
|
|||
|
if (!accessToken || !deviceSerial || !validateCode || !BSSID || !SSID || !wifiPassword) {
|
|||
|
reject('connectWifi:fail:params error');
|
|||
|
}
|
|||
|
|
|||
|
const deviceSSID = 'SoftAP_' + deviceSerial;
|
|||
|
const devicePassword = 'SoftAP_' + validateCode;
|
|||
|
wx.startWifi({
|
|||
|
success (res) {
|
|||
|
console.log(res.errMsg);
|
|||
|
wx.connectWifi({
|
|||
|
SSID: deviceSSID,
|
|||
|
password: devicePassword,
|
|||
|
success (res) {
|
|||
|
console.log('connectWifi success:', res);
|
|||
|
if (res.errCode == 0 || res.errMsg == 'connectWifi:ok') {
|
|||
|
|
|||
|
// 兼容不同机型,有些机型可以通过onWifiConnected识别是否连上目标wifi,有些机型不可以,因此设置定时器
|
|||
|
let timer = setTimeout(() => {
|
|||
|
console.log('超时调用');
|
|||
|
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
|||
|
clearTimeout(timer);
|
|||
|
// 如果设备超时无响应将重试一次
|
|||
|
// 存在设备超时无响应,此时将再次发送请求
|
|||
|
let wifiConfigTimer = setTimeout(() => {
|
|||
|
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
|||
|
clearTimeout(wifiConfigTimer);
|
|||
|
}, 30000);
|
|||
|
|
|||
|
// 设置第二次超时时间,仍超时,则默认跳转至配置失败页面
|
|||
|
// 设置响应超时时间为60s
|
|||
|
wifiConnectTimer = setTimeout(() => {
|
|||
|
clearTimeout(wifiConnectTimer);
|
|||
|
|
|||
|
reject('connectWifi:fail:connect deviceNetwork fail')
|
|||
|
}, 31000);
|
|||
|
|
|||
|
}, 3000);
|
|||
|
|
|||
|
// 判断是否连接上目标网络
|
|||
|
wx.onWifiConnected((result) => {
|
|||
|
console.log('onWifiConnected',result.wifi.SSID);
|
|||
|
if (deviceSSID === result.wifi.SSID) {
|
|||
|
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
|||
|
clearTimeout(timer);
|
|||
|
// 如果设备超时无响应将重试一次
|
|||
|
// 存在设备超时无响应,此时将再次发送请求
|
|||
|
let wifiConfigTimer = setTimeout(() => {
|
|||
|
wifiConfig(SSID, BSSID, wifiPassword,accessToken);
|
|||
|
clearTimeout(wifiConfigTimer);
|
|||
|
|
|||
|
}, 30000);
|
|||
|
|
|||
|
// 设置第二次超时时间,仍超时,则默认跳转至配置失败页面
|
|||
|
// 设置响应超时时间为30s
|
|||
|
wifiConnectTimer = setTimeout(() => {
|
|||
|
clearTimeout(wifiConnectTimer);
|
|||
|
|
|||
|
reject('connectWifi:fail:connect deviceNetwork fail')
|
|||
|
}, 31000);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
}
|
|||
|
},
|
|||
|
fail(err) {
|
|||
|
console.log(err);
|
|||
|
// that.setData({
|
|||
|
// pageLoading: false
|
|||
|
// });
|
|||
|
console.log('wifi connect fail');
|
|||
|
// wx.navigateTo({
|
|||
|
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
|||
|
// })
|
|||
|
reject('connectWifi:fail:connect deviceNetwork fail')
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
const wifiConfig = (SSID, BSSID, wifiPassword,accessToken) => {
|
|||
|
|
|||
|
console.log('正在给设备配置wifi');
|
|||
|
|
|||
|
wx.request({
|
|||
|
url: 'http://192.168.8.1:8682/PreNetwork/WifiConfig',
|
|||
|
method: 'PUT',
|
|||
|
data: {
|
|||
|
areaCode:"",
|
|||
|
token: accessToken,
|
|||
|
lbs_domain: 'open.ys7.com',
|
|||
|
wifi_info:{
|
|||
|
"bssid": BSSID,
|
|||
|
"ssid": SSID,
|
|||
|
"password":wifiPassword
|
|||
|
},
|
|||
|
token: ''
|
|||
|
},
|
|||
|
header: {
|
|||
|
'content-type': 'text/plain'
|
|||
|
},
|
|||
|
success:(res) =>{
|
|||
|
console.log('wifiConfig success:',res);
|
|||
|
clearTimeout(wifiConfigTimer);
|
|||
|
clearTimeout(wifiConnectTimer);
|
|||
|
if (res && res.data ) {
|
|||
|
if (wifiConfigTimer) {
|
|||
|
clearTimeout(wifiConfigTimer);
|
|||
|
}
|
|||
|
|
|||
|
console.log('wifi 配置接口返回',res);
|
|||
|
// 现关闭连接的设备wifi,因为其无法发送网络请求
|
|||
|
wx.startWifi({
|
|||
|
success (res) {
|
|||
|
console.log(res.errMsg);
|
|||
|
wx.connectWifi({
|
|||
|
SSID: SSID,
|
|||
|
password: wifiPassword,
|
|||
|
success (res) {
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
});
|
|||
|
// 设备响应需要一定的时间
|
|||
|
let timer = setTimeout(() => {
|
|||
|
|
|||
|
resolve()
|
|||
|
clearTimeout(timer)
|
|||
|
}, 10000);
|
|||
|
|
|||
|
} else {
|
|||
|
// this.setData({
|
|||
|
// pageLoading: false
|
|||
|
// });
|
|||
|
console.log('wifiConfig fail');
|
|||
|
|
|||
|
// wx.navigateTo({
|
|||
|
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
|||
|
// })
|
|||
|
reject('connectWifi:fail:device config fail')
|
|||
|
}
|
|||
|
},
|
|||
|
error:(err)=>{
|
|||
|
console.log('wifiConfig fail:',err);
|
|||
|
clearTimeout(wifiConfigTimer);
|
|||
|
clearTimeout(wifiConnectTimer);
|
|||
|
// this.setData({
|
|||
|
// pageLoading: false
|
|||
|
// });
|
|||
|
console.log('wifiConfig fail');
|
|||
|
// wx.navigateTo({
|
|||
|
// url: '/packageD/pages/connectWifiFail/index?accessToken='+accessToken+'&validateCode='+validateCode+'&deviceSerial='+deviceSerial,
|
|||
|
// })
|
|||
|
reject('connectWifi:fail:device config fail')
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
return promise
|
|||
|
}
|
|||
|
|
|||
|
// check network
|
|||
|
checkNetWork = () => {
|
|||
|
wx.getNetworkType({
|
|||
|
success(res) {
|
|||
|
const networkType = res.networkType;
|
|||
|
if (!networkType || networkType === 'none') {
|
|||
|
wx.showToast({
|
|||
|
title: '当前网络异常',
|
|||
|
icon: 'none',
|
|||
|
duration: 2000,
|
|||
|
});
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
export const EConnectWifi = (props) => {
|
|||
|
const wechat_econnectWif_sdk = new WeChat_EConnectWifi(props)
|
|||
|
return wechat_econnectWif_sdk;
|
|||
|
}
|