@ray-js/lock-sdk 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/index.js +13 -15
- package/lib/api/linkage.d.ts +0 -18
- package/lib/api/linkage.js +61 -81
- package/lib/api/lock.d.ts +0 -69
- package/lib/api/lock.js +91 -113
- package/lib/api/log.d.ts +0 -33
- package/lib/api/log.js +33 -38
- package/lib/api/setting.d.ts +0 -11
- package/lib/api/setting.js +17 -30
- package/lib/api/temp.d.ts +0 -48
- package/lib/api/temp.js +85 -115
- package/lib/api/user.d.ts +5 -54
- package/lib/api/user.js +40 -52
- package/lib/api/video.d.ts +0 -5
- package/lib/api/video.js +9 -15
- package/lib/config/dp-code/index.d.ts +0 -117
- package/lib/config/dp-code/index.js +79 -221
- package/lib/config/dp-map/common.d.ts +0 -3
- package/lib/config/dp-map/common.js +101 -116
- package/lib/config/dp-map/normal.js +29 -50
- package/lib/config/dp-map/open.d.ts +0 -16
- package/lib/config/dp-map/open.js +62 -63
- package/lib/config/dp-map/unlock-method-big.d.ts +0 -60
- package/lib/config/dp-map/unlock-method-big.js +196 -233
- package/lib/config/dp-map/unlock-method.d.ts +0 -63
- package/lib/config/dp-map/unlock-method.js +189 -227
- package/lib/config/index.d.ts +0 -25
- package/lib/config/index.js +21 -54
- package/lib/constant.d.ts +12 -40
- package/lib/constant.js +83 -136
- package/lib/event.d.ts +0 -6
- package/lib/event.js +1 -8
- package/lib/index.d.ts +0 -7
- package/lib/index.js +45 -71
- package/lib/interface.d.ts +0 -523
- package/lib/interface.js +1 -1
- package/lib/linkage.d.ts +0 -18
- package/lib/linkage.js +125 -162
- package/lib/log.d.ts +0 -50
- package/lib/log.js +255 -290
- package/lib/media.d.ts +0 -34
- package/lib/media.js +6 -77
- package/lib/open.d.ts +0 -35
- package/lib/open.js +129 -224
- package/lib/other.d.ts +0 -24
- package/lib/other.js +98 -159
- package/lib/parse/index.d.ts +0 -4
- package/lib/parse/index.js +13 -19
- package/lib/signal.d.ts +0 -13
- package/lib/signal.js +17 -31
- package/lib/sleep.d.ts +0 -42
- package/lib/sleep.js +41 -98
- package/lib/state.d.ts +0 -38
- package/lib/state.js +223 -369
- package/lib/sync/remote-serect-key.d.ts +0 -4
- package/lib/sync/remote-serect-key.js +33 -49
- package/lib/sync/t0.d.ts +0 -3
- package/lib/sync/t0.js +14 -21
- package/lib/sync/temp.d.ts +0 -5
- package/lib/sync/temp.js +68 -77
- package/lib/sync/unlock-mothod.d.ts +0 -3
- package/lib/sync/unlock-mothod.js +28 -40
- package/lib/temporary.d.ts +0 -149
- package/lib/temporary.js +469 -593
- package/lib/unlock-method.d.ts +0 -185
- package/lib/unlock-method.js +479 -650
- package/lib/user.d.ts +2 -81
- package/lib/user.js +202 -336
- package/lib/utils/base64-to-hex.js +10 -10
- package/lib/utils/byte.d.ts +0 -16
- package/lib/utils/byte.js +57 -68
- package/lib/utils/constant.js +7 -11
- package/lib/utils/device.d.ts +46 -83
- package/lib/utils/device.js +294 -322
- package/lib/utils/errors.js +75 -122
- package/lib/utils/event.js +79 -135
- package/lib/utils/hex-to-base64.js +5 -5
- package/lib/utils/hex-to-bytes.d.ts +0 -5
- package/lib/utils/hex-to-bytes.js +10 -15
- package/lib/utils/index.d.ts +0 -42
- package/lib/utils/index.js +247 -377
- package/lib/utils/log.d.ts +1 -4
- package/lib/utils/log.js +71 -74
- package/lib/utils/publishDps.d.ts +0 -5
- package/lib/utils/publishDps.js +58 -80
- package/package.json +3 -4
package/lib/state.js
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import "core-js/modules/esnext.iterator.constructor.js";
|
|
2
|
-
import "core-js/modules/esnext.iterator.reduce.js";
|
|
3
|
-
/**
|
|
4
|
-
* 数据状态管理
|
|
5
|
-
*/
|
|
6
1
|
import config from "./config";
|
|
7
|
-
import { onDpDataChange, onDeviceInfoUpdated, offDeviceInfoUpdated, offDpDataChange, registerDevice, getDeviceOnlineType, onOnlineChange, offOnlineChange, onBleChange, offBleChange, registerBleStatus, getDeviceInfo, onMqttMessage, registerMQTTDeviceListener, registerMQTTProtocolListener, offMqttMessage } from "./utils/device";
|
|
2
|
+
import { onDpDataChange, onDeviceInfoUpdated, offDeviceInfoUpdated, offDpDataChange, registerDevice, getDeviceOnlineType, onOnlineChange, offOnlineChange, onBleChange, offBleChange, registerBleStatus, getDeviceInfo, onMqttMessage, registerMQTTDeviceListener, registerMQTTProtocolListener, offMqttMessage, } from "./utils/device";
|
|
8
3
|
import { getDeviceProperties } from "./api/setting";
|
|
9
4
|
import { parseCapabilities } from "./parse";
|
|
10
5
|
import emitter from "./utils/event";
|
|
11
6
|
import { DPCHANGE, LOGCHANGE } from "./utils/constant";
|
|
12
7
|
import dpCodes, { latLogDpCodes } from "./config/dp-code";
|
|
13
8
|
import { getCurrentUserInfo } from "./api/user";
|
|
14
|
-
import { equels, getDataWithPreFetch, isOnlineByType } from "./utils";
|
|
9
|
+
import { equels, getDataWithPreFetch, isOnlineByType, } from "./utils";
|
|
15
10
|
import { getRotateInfo } from "./api/video";
|
|
16
11
|
import syncT0 from "./sync/t0";
|
|
17
12
|
import syncRemoteSerectKey from "./sync/remote-serect-key";
|
|
@@ -20,410 +15,269 @@ import { autoSyncTemp } from "./sync/temp";
|
|
|
20
15
|
import { DEVICE_STATUS_CHANGE_EVENT, SLEEP_EVENT } from "./event";
|
|
21
16
|
import { getSleepPeriod, isSleep } from "./sleep";
|
|
22
17
|
import { ProductCommunicationType } from "./constant";
|
|
23
|
-
|
|
24
|
-
// 设备详细信息
|
|
25
18
|
let dpState = {};
|
|
26
19
|
let logRefreshTimer = 0;
|
|
27
20
|
export const clearState = () => {
|
|
28
|
-
|
|
21
|
+
dpState = {};
|
|
29
22
|
};
|
|
30
|
-
export const getDpValue = code => {
|
|
31
|
-
|
|
23
|
+
export const getDpValue = (code) => {
|
|
24
|
+
return dpState[code];
|
|
32
25
|
};
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* 更新设备在线类型
|
|
36
|
-
*/
|
|
37
26
|
const updateOnlineType = async () => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
const [devInfo, onlineType] = await Promise.all([
|
|
28
|
+
getDeviceInfo(config.devInfo.devId),
|
|
29
|
+
getDeviceOnlineType(config.devInfo.devId),
|
|
30
|
+
]);
|
|
31
|
+
config.onlineType = onlineType;
|
|
32
|
+
config.devInfo = devInfo;
|
|
33
|
+
updateDeviceStatus();
|
|
42
34
|
};
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* 获取设备状态信息
|
|
46
|
-
* @returns
|
|
47
|
-
*/
|
|
48
35
|
export const getDeviceStatus = () => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
status.type = "online";
|
|
80
|
-
status.onlineType = "cloud";
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
83
|
-
case ProductCommunicationType.BLUETOOTH:
|
|
84
|
-
status.connectEanble = true;
|
|
85
|
-
if (isOnline) {
|
|
86
|
-
status.type = "online";
|
|
87
|
-
status.onlineType = "ble";
|
|
36
|
+
const { onlineType, dpSchema, communication, capabilities, devInfo: { isCloudOnline, isLocalOnline, isOnline }, } = config;
|
|
37
|
+
const status = {
|
|
38
|
+
type: isOnline ? "online" : "offline",
|
|
39
|
+
connectEanble: false,
|
|
40
|
+
onlineType: "unknown",
|
|
41
|
+
};
|
|
42
|
+
switch (communication.length) {
|
|
43
|
+
case 1: {
|
|
44
|
+
switch (communication[0]) {
|
|
45
|
+
case ProductCommunicationType.WIFI:
|
|
46
|
+
const hasWirelessAwakeDp = !!dpSchema[dpCodes.wirelessWwake];
|
|
47
|
+
const isDeviceOnline = hasWirelessAwakeDp
|
|
48
|
+
? getDpValue(dpCodes.wirelessWwake) && isCloudOnline
|
|
49
|
+
: isCloudOnline;
|
|
50
|
+
if (!isDeviceOnline) {
|
|
51
|
+
const sleep = isSleep();
|
|
52
|
+
status.type = sleep ? "sleep" : "offline";
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
status.type = "online";
|
|
56
|
+
status.onlineType = "cloud";
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
case ProductCommunicationType.BLUETOOTH:
|
|
60
|
+
status.connectEanble = true;
|
|
61
|
+
if (isOnline) {
|
|
62
|
+
status.type = "online";
|
|
63
|
+
status.onlineType = "ble";
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
88
66
|
}
|
|
89
67
|
break;
|
|
90
68
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
69
|
+
case 2: {
|
|
70
|
+
if (communication.includes(ProductCommunicationType.WIFI) &&
|
|
71
|
+
communication.includes(ProductCommunicationType.BLUETOOTH)) {
|
|
72
|
+
const hasWirelessAwakeDp = !!dpSchema[dpCodes.wirelessWwake];
|
|
73
|
+
const isDeviceOnline = hasWirelessAwakeDp
|
|
74
|
+
? getDpValue(dpCodes.wirelessWwake) && isCloudOnline
|
|
75
|
+
: isCloudOnline;
|
|
76
|
+
if (!isDeviceOnline) {
|
|
77
|
+
if (isOnline && isOnlineByType(onlineType, 2)) {
|
|
78
|
+
status.type = "online";
|
|
79
|
+
status.onlineType = "ble";
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
const sleep = isSleep();
|
|
83
|
+
status.type = sleep ? "sleep" : "offline";
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
status.type = "online";
|
|
87
|
+
status.onlineType = "cloud";
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
107
90
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
status.type = "online";
|
|
113
|
-
status.onlineType = "cloud";
|
|
114
|
-
}
|
|
115
|
-
break;
|
|
91
|
+
if (communication.includes(ProductCommunicationType.THREAD) &&
|
|
92
|
+
communication.includes(ProductCommunicationType.BLUETOOTH)) {
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
116
95
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
96
|
+
}
|
|
97
|
+
if (status.type === "sleep") {
|
|
98
|
+
if (getDpValue(dpCodes.dormantSwitch) || getDpValue(dpCodes.onlineSwitch)) {
|
|
99
|
+
status.sleepPeriod = getSleepPeriod();
|
|
120
100
|
}
|
|
121
|
-
break;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (status.type === "sleep") {
|
|
125
|
-
if (getDpValue(dpCodes.dormantSwitch) || getDpValue(dpCodes.onlineSwitch)) {
|
|
126
|
-
status.sleepPeriod = getSleepPeriod();
|
|
127
101
|
}
|
|
128
|
-
|
|
129
|
-
return status;
|
|
102
|
+
return status;
|
|
130
103
|
};
|
|
131
104
|
const updateDeviceStatus = () => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
105
|
+
const status = getDeviceStatus();
|
|
106
|
+
if (!equels(config.deviceStatus, status)) {
|
|
107
|
+
config.deviceStatus = status;
|
|
108
|
+
emitter.emit(DEVICE_STATUS_CHANGE_EVENT, status);
|
|
109
|
+
}
|
|
138
110
|
};
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* 处理dp上报
|
|
142
|
-
* @param dps
|
|
143
|
-
*/
|
|
144
111
|
const handleDpChange = (dps, notEmit) => {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
112
|
+
let refleshLogsEnabled = false;
|
|
113
|
+
const dpData = Object.keys(dps).reduce((acc, key) => {
|
|
114
|
+
const code = config.codesById[key];
|
|
115
|
+
if (code) {
|
|
116
|
+
acc[code] = dps[key];
|
|
117
|
+
if (!refleshLogsEnabled && latLogDpCodes.includes(code)) {
|
|
118
|
+
refleshLogsEnabled = true;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return acc;
|
|
122
|
+
}, {});
|
|
123
|
+
if (dpData["device_info"]) {
|
|
124
|
+
config.capabilities = parseCapabilities(dpData["device_info"]);
|
|
154
125
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
});
|
|
126
|
+
Object.assign(dpState, dpData);
|
|
127
|
+
if (!notEmit) {
|
|
128
|
+
emitter.emit(DPCHANGE, dpData);
|
|
129
|
+
if (typeof dpData[dpCodes.linkMode] !== "undefined") {
|
|
130
|
+
emitter.emit(SLEEP_EVENT, {
|
|
131
|
+
sleep: isSleep(),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (refleshLogsEnabled) {
|
|
135
|
+
clearTimeout(logRefreshTimer);
|
|
136
|
+
logRefreshTimer = setTimeout(() => {
|
|
137
|
+
emitter.emit(LOGCHANGE, dpData);
|
|
138
|
+
}, 2000);
|
|
139
|
+
}
|
|
170
140
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
// @ts-expect-error
|
|
177
|
-
logRefreshTimer = setTimeout(() => {
|
|
178
|
-
emitter.emit(LOGCHANGE, dpData);
|
|
179
|
-
}, 2000);
|
|
141
|
+
};
|
|
142
|
+
const handleDeviceDpsChange = ({ dps, deviceId, }) => {
|
|
143
|
+
if (deviceId === config.devInfo.devId) {
|
|
144
|
+
handleDpChange(dps);
|
|
145
|
+
updateDeviceStatus();
|
|
180
146
|
}
|
|
181
|
-
}
|
|
182
147
|
};
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const handleDeviceDpsChange = _ref => {
|
|
189
|
-
let {
|
|
190
|
-
dps,
|
|
191
|
-
deviceId
|
|
192
|
-
} = _ref;
|
|
193
|
-
if (deviceId === config.devInfo.devId) {
|
|
194
|
-
// 处理dp
|
|
195
|
-
handleDpChange(dps);
|
|
196
|
-
|
|
197
|
-
// 更新设备状态
|
|
148
|
+
const handleDeviceInfoChange = ({ dps, deviceId, }) => {
|
|
149
|
+
if (deviceId === config.devInfo.devId && dps) {
|
|
150
|
+
handleDpChange(dps);
|
|
151
|
+
}
|
|
152
|
+
updateOnlineType();
|
|
198
153
|
updateDeviceStatus();
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* 设备信息变化事件
|
|
204
|
-
* @param param0
|
|
205
|
-
*/
|
|
206
|
-
const handleDeviceInfoChange = _ref2 => {
|
|
207
|
-
let {
|
|
208
|
-
dps,
|
|
209
|
-
deviceId
|
|
210
|
-
} = _ref2;
|
|
211
|
-
if (deviceId === config.devInfo.devId && dps) {
|
|
212
|
-
// 处理dp
|
|
213
|
-
handleDpChange(dps);
|
|
214
|
-
}
|
|
215
|
-
// 更新在线状态
|
|
216
|
-
updateOnlineType();
|
|
217
|
-
|
|
218
|
-
// 更新设备状态
|
|
219
|
-
updateDeviceStatus();
|
|
220
154
|
};
|
|
221
155
|
let currentUser = null;
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
156
|
+
export const getCurrentUser = async (isForce) => {
|
|
157
|
+
if (currentUser && !isForce) {
|
|
158
|
+
return currentUser;
|
|
159
|
+
}
|
|
160
|
+
if (isForce) {
|
|
161
|
+
currentUser = await getCurrentUserInfo(config.devInfo.devId);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
currentUser = await getDataWithPreFetch("getCurrentUser", () => getCurrentUserInfo(config.devInfo.devId));
|
|
165
|
+
}
|
|
166
|
+
currentUser.allOpenDps = currentUser.allOpenDps || "";
|
|
230
167
|
return currentUser;
|
|
231
|
-
}
|
|
232
|
-
if (isForce) {
|
|
233
|
-
currentUser = await getCurrentUserInfo(config.devInfo.devId);
|
|
234
|
-
} else {
|
|
235
|
-
currentUser = await getDataWithPreFetch("getCurrentUser", () => getCurrentUserInfo(config.devInfo.devId));
|
|
236
|
-
}
|
|
237
|
-
currentUser.allOpenDps = currentUser.allOpenDps || "";
|
|
238
|
-
return currentUser;
|
|
239
168
|
};
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* 获取当前用户信息
|
|
243
|
-
* 注意:此方法只能在初始化后使用
|
|
244
|
-
* @returns
|
|
245
|
-
*/
|
|
246
169
|
export const getCurrentUserSync = () => {
|
|
247
|
-
|
|
170
|
+
return currentUser;
|
|
248
171
|
};
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* 获取设备旋转角度
|
|
252
|
-
* @returns
|
|
253
|
-
*/
|
|
254
172
|
export const getMediaRotate = () => {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
173
|
+
return {
|
|
174
|
+
imageAngle: config.imageAngle,
|
|
175
|
+
videoAngle: config.videoAngle,
|
|
176
|
+
};
|
|
259
177
|
};
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
/**
|
|
267
|
-
* 初始化数据状态
|
|
268
|
-
*/
|
|
178
|
+
export const permissions = [
|
|
179
|
+
"adminsOnly",
|
|
180
|
+
"everyOne",
|
|
181
|
+
"noOne",
|
|
182
|
+
];
|
|
269
183
|
export const initState = async () => {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
}, 2000);
|
|
302
|
-
|
|
303
|
-
// 近场通讯时,尝试临时密码同步
|
|
304
|
-
setTimeout(() => {
|
|
305
|
-
autoSyncTemp();
|
|
306
|
-
}, 3000);
|
|
307
|
-
|
|
308
|
-
// TODO 近场通讯时,尝试同步用户删除状态
|
|
309
|
-
|
|
310
|
-
// 异步获取总倒计时时间
|
|
311
|
-
getDataWithPreFetch("getDeviceProperties", () => {
|
|
312
|
-
return getDeviceProperties(devId, ["REMOTE_UNLOCK_AUTH", "UNLOCK_PHONE_REMOTE"]);
|
|
313
|
-
}).then(data => {
|
|
314
|
-
// 远程开锁是否开启
|
|
315
|
-
config.remoteOpenEnabled = data["UNLOCK_PHONE_REMOTE"] === "true";
|
|
316
|
-
// 远程开锁权限
|
|
317
|
-
config.remoteOpenPermission = permissions[+data["REMOTE_UNLOCK_AUTH"] || 0];
|
|
318
|
-
}).catch(() => {
|
|
319
|
-
// 不处理
|
|
320
|
-
});
|
|
184
|
+
const { devInfo: { dps, devId }, } = config;
|
|
185
|
+
handleDpChange(dps, true);
|
|
186
|
+
config.deviceStatus = getDeviceStatus();
|
|
187
|
+
const [, , rotateInfo] = await Promise.all([
|
|
188
|
+
updateOnlineType(),
|
|
189
|
+
getCurrentUser(),
|
|
190
|
+
getDataWithPreFetch("getRotate", () => getRotateInfo(devId)),
|
|
191
|
+
]);
|
|
192
|
+
config.imageAngle = rotateInfo.angle;
|
|
193
|
+
config.videoAngle = rotateInfo.actualAngle;
|
|
194
|
+
syncRemoteSerectKey();
|
|
195
|
+
setTimeout(() => {
|
|
196
|
+
syncT0();
|
|
197
|
+
autoSyncUnlockMethod();
|
|
198
|
+
}, 2000);
|
|
199
|
+
setTimeout(() => {
|
|
200
|
+
autoSyncTemp();
|
|
201
|
+
}, 3000);
|
|
202
|
+
getDataWithPreFetch("getDeviceProperties", () => {
|
|
203
|
+
return getDeviceProperties(devId, [
|
|
204
|
+
"REMOTE_UNLOCK_AUTH",
|
|
205
|
+
"UNLOCK_PHONE_REMOTE",
|
|
206
|
+
]);
|
|
207
|
+
})
|
|
208
|
+
.then((data) => {
|
|
209
|
+
config.remoteOpenEnabled = data["UNLOCK_PHONE_REMOTE"] === "true";
|
|
210
|
+
config.remoteOpenPermission =
|
|
211
|
+
permissions[+data["REMOTE_UNLOCK_AUTH"] || 0];
|
|
212
|
+
})
|
|
213
|
+
.catch(() => {
|
|
214
|
+
});
|
|
321
215
|
};
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
if (signal > -50) {
|
|
346
|
-
signalText = "good";
|
|
347
|
-
} else if (signal <= -50 && signal > -65) {
|
|
348
|
-
signalText = "normal";
|
|
349
|
-
} else if (signal <= -65 && signal > -75) {
|
|
350
|
-
signalText = "weak";
|
|
216
|
+
const handleMqttMessage = ({ deviceId, messageData, protocol }) => {
|
|
217
|
+
const { devId } = config.devInfo;
|
|
218
|
+
if (devId === deviceId) {
|
|
219
|
+
switch (+protocol) {
|
|
220
|
+
case 23: {
|
|
221
|
+
if (messageData?.data?.signal || messageData?.data?.signal === 0) {
|
|
222
|
+
const signal = messageData.data.signal;
|
|
223
|
+
let signalText = "bad";
|
|
224
|
+
if (signal > -50) {
|
|
225
|
+
signalText = "good";
|
|
226
|
+
}
|
|
227
|
+
else if (signal <= -50 && signal > -65) {
|
|
228
|
+
signalText = "normal";
|
|
229
|
+
}
|
|
230
|
+
else if (signal <= -65 && signal > -75) {
|
|
231
|
+
signalText = "weak";
|
|
232
|
+
}
|
|
233
|
+
emitter.emit("onWiFiSignalChange", {
|
|
234
|
+
signal,
|
|
235
|
+
level: signalText,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
break;
|
|
351
239
|
}
|
|
352
|
-
emitter.emit("onWiFiSignalChange", {
|
|
353
|
-
signal,
|
|
354
|
-
level: signalText
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
break;
|
|
358
240
|
}
|
|
359
241
|
}
|
|
360
|
-
}
|
|
361
242
|
};
|
|
362
243
|
let hasEvent = false;
|
|
363
|
-
const handleBleChange =
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
// 当蓝牙连接成功时,尝试同步密钥
|
|
370
|
-
syncRemoteSerectKey();
|
|
371
|
-
// 近场通讯时,尝试临时密码同步
|
|
372
|
-
autoSyncTemp();
|
|
373
|
-
// TODO 尝试同步 T0 时间
|
|
374
|
-
syncT0();
|
|
375
|
-
}
|
|
244
|
+
const handleBleChange = ({ deviceId, status }) => {
|
|
245
|
+
if (status === "CONNECTED") {
|
|
246
|
+
syncRemoteSerectKey();
|
|
247
|
+
autoSyncTemp();
|
|
248
|
+
syncT0();
|
|
249
|
+
}
|
|
376
250
|
};
|
|
377
|
-
|
|
378
|
-
/**
|
|
379
|
-
* 添加事件
|
|
380
|
-
*/
|
|
381
251
|
export const addEvents = () => {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
onOnlineChange(updateOnlineType);
|
|
397
|
-
onBleChange(handleBleChange);
|
|
252
|
+
if (hasEvent) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const { devId } = config.devInfo;
|
|
256
|
+
hasEvent = true;
|
|
257
|
+
registerDevice([devId]);
|
|
258
|
+
registerBleStatus(devId);
|
|
259
|
+
registerMQTTDeviceListener(devId);
|
|
260
|
+
registerMQTTProtocolListener(23);
|
|
261
|
+
onMqttMessage(handleMqttMessage);
|
|
262
|
+
onDpDataChange(handleDeviceDpsChange);
|
|
263
|
+
onDeviceInfoUpdated(handleDeviceInfoChange);
|
|
264
|
+
onOnlineChange(updateOnlineType);
|
|
265
|
+
onBleChange(handleBleChange);
|
|
398
266
|
};
|
|
399
|
-
|
|
400
|
-
/**
|
|
401
|
-
* 添加事件
|
|
402
|
-
*/
|
|
403
267
|
export const removeEvents = () => {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
268
|
+
if (hasEvent) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
hasEvent = false;
|
|
272
|
+
offDpDataChange(handleDeviceDpsChange);
|
|
273
|
+
offDeviceInfoUpdated(handleDeviceInfoChange);
|
|
274
|
+
offOnlineChange(updateOnlineType);
|
|
275
|
+
offBleChange(handleBleChange);
|
|
276
|
+
offMqttMessage(handleMqttMessage);
|
|
277
|
+
};
|
|
278
|
+
export const onDeviceStatusChange = (callback) => {
|
|
279
|
+
emitter.on(DEVICE_STATUS_CHANGE_EVENT, callback);
|
|
413
280
|
};
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
* 注册设备状态信息变更事件
|
|
417
|
-
* @param callback 回调函数
|
|
418
|
-
*/
|
|
419
|
-
export const onDeviceStatusChange = callback => {
|
|
420
|
-
emitter.on(DEVICE_STATUS_CHANGE_EVENT, callback);
|
|
281
|
+
export const offDeviceStatusChange = (callback) => {
|
|
282
|
+
emitter.off(DEVICE_STATUS_CHANGE_EVENT, callback);
|
|
421
283
|
};
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* 注销设备状态信息变更事件
|
|
425
|
-
* @param callback 回调函数
|
|
426
|
-
*/
|
|
427
|
-
export const offDeviceStatusChange = callback => {
|
|
428
|
-
emitter.off(DEVICE_STATUS_CHANGE_EVENT, callback);
|
|
429
|
-
};
|