mini_program_gizwits_sdk 3.7.8-cozev5 → 3.7.8-kuka
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/README.md +235 -489
- package/dist/index.js +6 -4
- package/dist/src/crc/calculators/crc16modbus.d.ts +2 -0
- package/dist/src/crc/calculators/crc32.d.ts +2 -0
- package/dist/src/crc/crc16modbus.d.ts +7 -0
- package/dist/src/crc/crc32.d.ts +7 -0
- package/dist/src/crc/create_buffer.d.ts +4 -0
- package/dist/src/crc/define_crc.d.ts +7 -0
- package/dist/src/crc/index.d.ts +19 -0
- package/dist/src/crc/types.d.ts +10 -0
- package/dist/src/handler/EventListener.d.ts +9 -0
- package/dist/src/handler/ble.d.ts +128 -0
- package/dist/src/handler/lan.d.ts +78 -0
- package/dist/src/handler/socket.d.ts +161 -0
- package/dist/src/protocol/Bind.d.ts +7 -0
- package/dist/src/protocol/DeviceInfo.d.ts +11 -0
- package/dist/src/protocol/DiscoverUDP.d.ts +17 -0
- package/dist/src/protocol/GetDeviceStatus.d.ts +5 -0
- package/dist/src/protocol/Login.d.ts +12 -0
- package/dist/src/protocol/Ntp.d.ts +5 -0
- package/dist/src/protocol/OTA/AwaitNoti.d.ts +7 -0
- package/dist/src/protocol/OTA/CheckCanOTA.d.ts +10 -0
- package/dist/src/protocol/OTA/OTAPackPackage.d.ts +8 -0
- package/dist/src/protocol/OTA/OtaComplete.d.ts +8 -0
- package/dist/src/protocol/OTA/PreOTA.d.ts +11 -0
- package/dist/src/protocol/OTA/ResetPosition.d.ts +6 -0
- package/dist/src/protocol/OffLineData.d.ts +23 -0
- package/dist/src/protocol/ProtocolBase.d.ts +12 -0
- package/dist/src/protocol/Reset.d.ts +8 -0
- package/dist/src/protocol/SetReset.d.ts +7 -0
- package/dist/src/protocol/WifiConfig.d.ts +11 -0
- package/dist/src/protocol/dataPoint.d.ts +34 -0
- package/dist/src/protocol/tool.d.ts +14 -0
- package/dist/src/sdk.d.ts +146 -0
- package/dist/src/services/devices.d.ts +52 -0
- package/dist/src/services/login.d.ts +4 -0
- package/dist/src/services/monitor.d.ts +12 -0
- package/dist/src/services/ota.d.ts +7 -0
- package/dist/src/services/tool.d.ts +4 -0
- package/dist/src/services/uploadP0.d.ts +14 -0
- package/dist/src/types/index.d.ts +398 -0
- package/dist/src/utils/GizLog.d.ts +18 -0
- package/dist/src/utils/bleConfigLog.d.ts +11 -0
- package/dist/src/utils/connectedBssid.d.ts +6 -0
- package/dist/src/utils/errorCode.d.ts +3 -0
- package/dist/src/utils/globalData.d.ts +2 -0
- package/dist/src/utils/openApiRequest.d.ts +27 -0
- package/dist/src/utils/productConfigFileManage.d.ts +15 -0
- package/dist/src/utils/randomCode.d.ts +3 -0
- package/dist/src/utils/request.d.ts +1 -0
- package/dist/src/utils/sentry.d.ts +2 -0
- package/dist/src/utils/sleep.d.ts +2 -0
- package/dist/src/utils/utils.d.ts +55 -0
- package/dist/src/utils/wechatApi.d.ts +23 -0
- package/dist/src/utils/wifiConfigLogReport.d.ts +28 -0
- package/dist/src/wifiConfig/ConfigBase.d.ts +30 -0
- package/dist/src/wifiConfig/ap.d.ts +11 -0
- package/dist/src/wifiConfig/ble.d.ts +43 -0
- package/dist/src/wifiConfig/nfc/disposeData.d.ts +2 -0
- package/dist/src/wifiConfig/nfc/formatData.d.ts +3 -0
- package/dist/src/wifiConfig/nfc/formatSSID.d.ts +6 -0
- package/dist/src/wifiConfig/nfc/index.d.ts +22 -0
- package/dist/src/wifiConfig/nfc/isIncludedCH.d.ts +1 -0
- package/dist/src/wifiConfig/nfc/nfcAConnect.d.ts +6 -0
- package/dist/src/wifiConfig/nfc/nfcATransceive.d.ts +5 -0
- package/dist/src/wifiConfig/nfc/ssIDToASC.d.ts +1 -0
- package/dist/src/wifiConfig/nfc/stringToGbk.d.ts +1 -0
- package/dist/src/wifiConfig/nfc/transceive.wx.d.ts +2 -0
- package/dist/src/wifiConfig/nfc/types.d.ts +15 -0
- package/global.d.ts +19 -3
- package/index.ts +7 -0
- package/package.json +5 -5
- package/src/GizLog.ts +51 -0
- package/src/aepApi/aepApiRequest.ts +61 -0
- package/src/crc/calculators/crc16modbus.ts +36 -0
- package/src/crc/calculators/crc32.ts +47 -0
- package/src/crc/crc16modbus.ts +3 -0
- package/src/crc/crc32.ts +4 -0
- package/src/crc/create_buffer.ts +7 -0
- package/src/crc/define_crc.ts +9 -0
- package/src/crc/index.ts +10 -0
- package/src/crc/package.json +3 -0
- package/src/crc/types.ts +10 -0
- package/src/errorCode.ts +84 -0
- package/src/global.d.ts +53 -0
- package/src/globalData.ts +9 -0
- package/src/handler/EventListener.ts +44 -0
- package/src/handler/ble.ts +1513 -0
- package/src/handler/lan.ts +409 -0
- package/src/handler/socket.ts +625 -0
- package/src/openApiRequest.ts +62 -0
- package/src/productConfigFileManage.ts +58 -0
- package/src/protocol/Bind.ts +22 -0
- package/src/protocol/DeviceInfo.ts +49 -0
- package/src/protocol/DiscoverUDP.ts +80 -0
- package/src/protocol/GetDeviceStatus.ts +63 -0
- package/src/protocol/Login.ts +43 -0
- package/src/protocol/Ntp.ts +13 -0
- package/src/protocol/OTA/AwaitNoti.ts +14 -0
- package/src/protocol/OTA/CheckCanOTA.ts +23 -0
- package/src/protocol/OTA/OTAPackPackage.ts +36 -0
- package/src/protocol/OTA/OtaComplete.ts +17 -0
- package/src/protocol/OTA/PreOTA.ts +47 -0
- package/src/protocol/OTA/ResetPosition.ts +14 -0
- package/src/protocol/OffLineData.ts +81 -0
- package/src/protocol/ProtocolBase.ts +54 -0
- package/src/protocol/Reset.ts +15 -0
- package/src/protocol/SetReset.ts +11 -0
- package/src/protocol/WifiConfig.ts +42 -0
- package/src/protocol/dataPoint.ts +769 -0
- package/src/protocol/thirdProtocol/TqBleProtocol.ts +141 -0
- package/src/protocol/thirdProtocol/TqDeviceInfo.ts +31 -0
- package/src/protocol/thirdProtocol/YunZhiMianBleProtocolBase.ts +39 -0
- package/src/protocol/tool.ts +147 -0
- package/src/randomCode.ts +36 -0
- package/src/request.ts +22 -0
- package/src/sdk.ts +1648 -0
- package/src/sentry.ts +55 -0
- package/src/services/devices.ts +309 -0
- package/src/services/login.ts +15 -0
- package/src/services/ota.ts +30 -0
- package/src/services/tool.ts +10 -0
- package/src/services/uploadP0.ts +56 -0
- package/src/sleep.ts +2 -0
- package/src/thirdCloudProductKey.ts +29 -0
- package/src/types/index.ts +48 -0
- package/src/utils.ts +456 -0
- package/src/wechatApi.ts +299 -0
- package/src/wifiConfig/ConfigBase.ts +190 -0
- package/src/wifiConfig/ap.ts +192 -0
- package/src/wifiConfig/ble.ts +457 -0
- package/src/wifiConfig/ble_ailCloud.ts +531 -0
- package/src/wifiConfig/tq.ts +140 -0
- package/.vscode/launch.json +0 -19
- package/.vscode/settings.json +0 -3
- package/yarn-error.log +0 -6901
package/README.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
# 机智云小程序 SDK
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
## 🔴 破坏性更新
|
|
7
|
+
|
|
8
|
+
- 3.2.4(含)开始蓝牙广播包过滤增加了 `['ABF8', 'ABF0', 'F0AB', 'F8AB']` 四个过滤字段,为了兼容部分低端手机不过滤,长时间挂机会假死的问题。
|
|
9
|
+
- 乐鑫_0ESP32C3_0403000G 和 博流_00BL602L_0403000B 之后的版本都支持这个特性。
|
|
10
|
+
- 如果您使用的是更早期的固件,请联系我们。
|
|
11
|
+
|
|
12
|
+
|
|
5
13
|
## ⚠️ 重要
|
|
6
14
|
|
|
7
15
|
使用小程序 sdk 前,请在微信开发者后台-开发管理-开发设置-服务器域名添加以下请求地址。
|
|
@@ -11,7 +19,6 @@
|
|
|
11
19
|
```txt
|
|
12
20
|
https://api.gizwits.com
|
|
13
21
|
https://site.gizwits.com
|
|
14
|
-
https://agent.gizwitsapi.com
|
|
15
22
|
```
|
|
16
23
|
|
|
17
24
|
- socket 合法域名
|
|
@@ -21,16 +28,6 @@ wss://wxstage.gizwits.com
|
|
|
21
28
|
wss://wxm2m.gizwits.com
|
|
22
29
|
```
|
|
23
30
|
|
|
24
|
-
- 关于 services
|
|
25
|
-
|
|
26
|
-
为了搜索效率,sdk 会根据`services `过滤蓝牙设备。默认 ['ABF8', 'ABF0', 'F0AB', 'F8AB']。
|
|
27
|
-
如果有特殊情况,不想用`services `过滤设备,可以
|
|
28
|
-
|
|
29
|
-
```js
|
|
30
|
-
sdk.scanBleDevice(3000, []);
|
|
31
|
-
sdk.startAutoScan([]);
|
|
32
|
-
```
|
|
33
|
-
|
|
34
31
|
## 🔧 安装
|
|
35
32
|
|
|
36
33
|
```bash
|
|
@@ -43,13 +40,13 @@ yarn add mini_program_gizwits_sdk
|
|
|
43
40
|
|
|
44
41
|
> 采用小程序代码片段,安装新版小程序开发工具,点击链接即可打开
|
|
45
42
|
|
|
46
|
-
###
|
|
43
|
+
### 蓝牙和 softAp 配网
|
|
47
44
|
|
|
48
|
-
[点击打开微信开发者工具](https://developers.weixin.qq.com/s/
|
|
45
|
+
[点击打开微信开发者工具](https://developers.weixin.qq.com/s/UQI8fpm87jDI)
|
|
49
46
|
|
|
50
47
|
### 设备控制
|
|
51
48
|
|
|
52
|
-
[点击打开微信开发者工具](https://developers.weixin.qq.com/s/
|
|
49
|
+
[点击打开微信开发者工具](https://developers.weixin.qq.com/s/NZI5gpmX7qD1)
|
|
53
50
|
|
|
54
51
|
## 🏍 初始化 Sdk
|
|
55
52
|
|
|
@@ -62,7 +59,7 @@ export default class Index extends Component {
|
|
|
62
59
|
private gizSdk: GizwitsSdk;
|
|
63
60
|
|
|
64
61
|
componentDidMount() {
|
|
65
|
-
|
|
62
|
+
this.gizSdk = new GizwitsSdk({
|
|
66
63
|
appID: 'appID',
|
|
67
64
|
appSecret: 'appSecret',
|
|
68
65
|
productInfo: [
|
|
@@ -71,12 +68,9 @@ export default class Index extends Component {
|
|
|
71
68
|
productSecret: 'productSecret',
|
|
72
69
|
},
|
|
73
70
|
],
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
} else {
|
|
78
|
-
this.gizSdk.reInit(sdkInitParams);
|
|
79
|
-
}
|
|
71
|
+
uid: 'giz_uid', // 必填
|
|
72
|
+
token: 'giz_token', // 必填
|
|
73
|
+
});
|
|
80
74
|
}
|
|
81
75
|
|
|
82
76
|
render() {
|
|
@@ -86,492 +80,81 @@ export default class Index extends Component {
|
|
|
86
80
|
```
|
|
87
81
|
|
|
88
82
|
## 📋 日志
|
|
89
|
-
|
|
90
83
|
sdk.setLogLevel("debug")
|
|
91
84
|
|
|
92
|
-
##
|
|
93
|
-
|
|
94
|
-
SDK 提供了两种登录方式:匿名登录和微信登录。
|
|
95
|
-
|
|
96
|
-
### 匿名登录
|
|
97
|
-
|
|
98
|
-
```typescript
|
|
99
|
-
// 使用 唯一ID 进行匿名登录
|
|
100
|
-
// 适用于 已经有业务后台的场景
|
|
101
|
-
const result = await sdk.login(openID);
|
|
102
|
-
if (result.success) {
|
|
103
|
-
// 登录成功,可以获取到 token 和 uid
|
|
104
|
-
const { token, uid } = result.data;
|
|
105
|
-
}
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### 微信登录
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
// 使用微信登录 直接登录到 Gizwits
|
|
112
|
-
const result = await sdk.wxLogin();
|
|
113
|
-
if (result.success) {
|
|
114
|
-
// 登录成功,返回数据包含:
|
|
115
|
-
// - token: 访问令牌
|
|
116
|
-
// - uid: 用户ID
|
|
117
|
-
// - expire_at: 令牌过期时间
|
|
118
|
-
const { token, uid, expire_at } = result.data;
|
|
119
|
-
} else {
|
|
120
|
-
// 登录失败
|
|
121
|
-
console.error(result.message);
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### 登录结果说明
|
|
126
|
-
|
|
127
|
-
登录成功后会:
|
|
128
|
-
|
|
129
|
-
1. 自动保存 token 和 uid 到全局数据
|
|
130
|
-
2. 更新 WebSocket 连接的认证信息
|
|
131
|
-
3. 返回登录结果,包含:
|
|
132
|
-
- token: 访问令牌
|
|
133
|
-
- uid: 用户 ID
|
|
134
|
-
- expire_at: 令牌过期时间(仅微信登录返回)
|
|
85
|
+
## 📖 BLE API
|
|
135
86
|
|
|
136
|
-
|
|
87
|
+
小程序 BLE 相关 API。
|
|
137
88
|
|
|
138
|
-
|
|
139
|
-
2. 微信登录需要确保小程序已经获取了用户授权
|
|
140
|
-
3. 登录成功后,SDK 会自动处理 token 的存储和更新
|
|
141
|
-
|
|
142
|
-
#### 错误处理
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
try {
|
|
146
|
-
const result = await sdk.wxLogin();
|
|
147
|
-
if (!result.success) {
|
|
148
|
-
// 处理登录失败
|
|
149
|
-
console.error('登录失败:', result.message);
|
|
150
|
-
}
|
|
151
|
-
} catch (error) {
|
|
152
|
-
// 处理异常
|
|
153
|
-
console.error('登录异常:', error);
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## ota
|
|
158
|
-
|
|
159
|
-
### 获取设备当前版本
|
|
160
|
-
|
|
161
|
-
获取设备的软硬件版本信息。
|
|
162
|
-
|
|
163
|
-
```typescript
|
|
164
|
-
const result = await sdk.getDeviceVersion(deviceId);
|
|
165
|
-
if (result.success) {
|
|
166
|
-
// 获取成功
|
|
167
|
-
const { soft_version, hard_version } = result.data;
|
|
168
|
-
console.log('软件版本:', soft_version);
|
|
169
|
-
console.log('硬件版本:', hard_version);
|
|
170
|
-
} else {
|
|
171
|
-
// 获取失败
|
|
172
|
-
console.error('获取版本失败:', result.err);
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
#### 参数说明
|
|
177
|
-
|
|
178
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
179
|
-
| -------- | ------ | ---- | ------- |
|
|
180
|
-
| deviceId | string | 是 | 设备 ID |
|
|
181
|
-
|
|
182
|
-
#### 返回值说明
|
|
183
|
-
|
|
184
|
-
| 字段 | 类型 | 说明 |
|
|
185
|
-
| ------------ | ------ | ---------- |
|
|
186
|
-
| soft_version | string | 软件版本号 |
|
|
187
|
-
| hard_version | string | 硬件版本号 |
|
|
188
|
-
|
|
189
|
-
#### 注意事项
|
|
190
|
-
|
|
191
|
-
1. 设备必须已经绑定
|
|
192
|
-
2. 设备必须在线
|
|
193
|
-
3. 版本号格式通常为 x.y.z 的形式
|
|
194
|
-
|
|
195
|
-
#### 错误处理
|
|
196
|
-
|
|
197
|
-
```typescript
|
|
198
|
-
try {
|
|
199
|
-
const result = await sdk.getDeviceVersion(deviceId);
|
|
200
|
-
|
|
201
|
-
if (!result.success) {
|
|
202
|
-
// 处理获取失败
|
|
203
|
-
console.error('获取版本失败:', result.err);
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// 获取成功,可以开始使用版本信息
|
|
208
|
-
const { soft_version, hard_version } = result.data;
|
|
209
|
-
} catch (error) {
|
|
210
|
-
// 处理异常
|
|
211
|
-
console.error('获取版本异常:', error);
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### 检查更新
|
|
216
|
-
|
|
217
|
-
```typescript
|
|
218
|
-
const result = await sdk.checkAvailableUpdates(deviceInfo.id, deviceInfo.soft_version);
|
|
219
|
-
console.log('resultresultresult', result);
|
|
220
|
-
if (result.success && result.data) {
|
|
221
|
-
setUpdateInfo(result.data);
|
|
222
|
-
} else {
|
|
223
|
-
setUpdateInfo(null);
|
|
224
|
-
Taro.showToast({
|
|
225
|
-
title: '没有可用的更新',
|
|
226
|
-
icon: 'none',
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
### 开始更新
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
const sdk = getGlobalData('gizSdk');
|
|
235
|
-
const result = await sdk.startUpdate(deviceInfo.id);
|
|
236
|
-
console.log('resultresultresult', result);
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
### 查询进度
|
|
240
|
-
|
|
241
|
-
获取设备 OTA 更新的当前进度。
|
|
242
|
-
|
|
243
|
-
```typescript
|
|
244
|
-
const result = await sdk.getOtaStatus(deviceId);
|
|
245
|
-
if (result.success) {
|
|
246
|
-
if (result.data !== null) {
|
|
247
|
-
// 有进度信息,显示进度
|
|
248
|
-
console.log('OTA 更新进度:', result.data);
|
|
249
|
-
} else {
|
|
250
|
-
// 没有进度信息
|
|
251
|
-
console.log('暂无 OTA 更新进度');
|
|
252
|
-
}
|
|
253
|
-
} else {
|
|
254
|
-
// 获取进度失败
|
|
255
|
-
console.error('获取 OTA 进度失败:', result.err);
|
|
256
|
-
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
#### 参数说明
|
|
260
|
-
|
|
261
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
262
|
-
| -------- | ------ | ---- | ------- |
|
|
263
|
-
| deviceId | string | 是 | 设备 ID |
|
|
264
|
-
|
|
265
|
-
#### 返回值说明
|
|
266
|
-
|
|
267
|
-
| 字段 | 类型 | 说明 |
|
|
268
|
-
| ---- | -------------- | ----------------------------------------------------- |
|
|
269
|
-
| data | number \| null | 更新进度百分比(0-100),如果为 null 表示暂无进度信息 |
|
|
270
|
-
|
|
271
|
-
#### 注意事项
|
|
272
|
-
|
|
273
|
-
1. 设备必须已经绑定
|
|
274
|
-
2. 设备必须在线
|
|
275
|
-
3. 只有在进行 OTA 更新时才会返回进度信息
|
|
276
|
-
4. 进度信息有 1 分钟的有效期,超过 1 分钟未更新则返回 null
|
|
277
|
-
|
|
278
|
-
#### 错误处理
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
try {
|
|
282
|
-
const result = await sdk.getOtaStatus(deviceId);
|
|
283
|
-
|
|
284
|
-
if (!result.success) {
|
|
285
|
-
// 处理获取失败
|
|
286
|
-
console.error('获取 OTA 进度失败:', result.err);
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
// 获取成功,处理进度信息
|
|
291
|
-
if (result.data !== null) {
|
|
292
|
-
// 有进度信息
|
|
293
|
-
console.log('OTA 更新进度:', result.data);
|
|
294
|
-
} else {
|
|
295
|
-
// 没有进度信息
|
|
296
|
-
console.log('暂无 OTA 更新进度');
|
|
297
|
-
}
|
|
298
|
-
} catch (error) {
|
|
299
|
-
// 处理异常
|
|
300
|
-
console.error('获取 OTA 进度异常:', error);
|
|
301
|
-
}
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
## 蓝牙相关
|
|
305
|
-
|
|
306
|
-
### 初始化蓝牙
|
|
89
|
+
### sdk.initBle()
|
|
307
90
|
|
|
308
91
|
初始化 sdk 蓝牙能力。使用其他`BLE API`前**必须**进行初始化。
|
|
309
92
|
|
|
310
|
-
|
|
311
|
-
sdk.initBle();
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### 搜索蓝牙
|
|
93
|
+
### sdk.scanBleDevice(delay?:number, services?: string[])
|
|
315
94
|
|
|
316
95
|
搜索蓝牙设备。搜索到的蓝牙设备会被 [onScanListChange](#onScanListChange) 事件监听。
|
|
317
96
|
|
|
318
|
-
|
|
319
|
-
// 参数
|
|
320
|
-
// - delay: 超时时间。
|
|
321
|
-
// - services: 过滤services的条件,不传默认 ['ABF8', 'ABF0', 'F0AB', 'F8AB']
|
|
322
|
-
|
|
323
|
-
sdk.scanBleDevice(delay?:number, services?: string[])
|
|
324
|
-
```
|
|
97
|
+
#### 参数
|
|
325
98
|
|
|
326
|
-
|
|
99
|
+
- delay: 超时时间。
|
|
100
|
+
- services: 过滤services的条件,不传默认 ['ABF8', 'ABF0', 'F0AB', 'F8AB']
|
|
327
101
|
|
|
328
|
-
|
|
102
|
+
### sdk.startAutoScan(services?: string[])
|
|
329
103
|
|
|
330
104
|
间隔自动搜索蓝牙设备 [onScanListChange](#onScanListChange) 事件监听。
|
|
331
105
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
// - services: 过滤services的条件,不传默认 ['ABF8', 'ABF0', 'F0AB', 'F8AB']
|
|
335
|
-
sdk.startAutoScan(services?: string[])
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
## 设备管理
|
|
339
|
-
|
|
340
|
-
### 获取设备列表
|
|
341
|
-
|
|
342
|
-
刷新设备列表(同时也会在 GizDeviceListNotifications 事件里推送)
|
|
343
|
-
|
|
344
|
-
```typescript
|
|
345
|
-
const data = await sdk.getDevices();
|
|
346
|
-
console.log(data);
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### 开始配网
|
|
350
|
-
|
|
351
|
-
配网是将设备连接到 WiFi 网络的过程。SDK 支持多种配网方式:SoftAP、BLE 和 NFC(仅安卓)。
|
|
352
|
-
|
|
353
|
-
```typescript
|
|
354
|
-
const result = await sdk.setDeviceOnboardingDeploy({
|
|
355
|
-
ssid: 'wifi_ssid', // WiFi 名称
|
|
356
|
-
password: 'wifi_password', // WiFi 密码
|
|
357
|
-
mode: 3, // 配网模式:0-SoftAP, 3-BLE, 5-NFC
|
|
358
|
-
timeout: 60, // 配网超时时间(秒)
|
|
359
|
-
productKey: 'product_key', // 产品 Key
|
|
360
|
-
isBind: true, // 是否自动绑定设备
|
|
361
|
-
softAPSSIDPrefix: 'XPG-GAgent-', // SoftAP 模式下的设备热点前缀,蓝牙配网模式下的蓝牙设备名称
|
|
362
|
-
eventCallBack: event => {
|
|
363
|
-
// 配网过程事件回调
|
|
364
|
-
console.log('配网事件:', event);
|
|
365
|
-
},
|
|
366
|
-
mac: '123456', // BLE配网下使用mac对蓝牙设备进行过滤
|
|
367
|
-
});
|
|
368
|
-
|
|
369
|
-
if (result.success) {
|
|
370
|
-
// 配网成功,返回配网成功的设备列表
|
|
371
|
-
const devices = result.data;
|
|
372
|
-
console.log('配网成功:', devices);
|
|
373
|
-
} else {
|
|
374
|
-
// 配网失败
|
|
375
|
-
console.error('配网失败:', result.err);
|
|
376
|
-
}
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
#### 参数说明
|
|
380
|
-
|
|
381
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
382
|
-
| ---------------- | -------- | ---- | -------------------------------- |
|
|
383
|
-
| ssid | string | 是 | WiFi 网络名称 |
|
|
384
|
-
| password | string | 是 | WiFi 网络密码 |
|
|
385
|
-
| mode | number | 是 | 配网模式:0-SoftAP, 3-BLE, 5-NFC |
|
|
386
|
-
| timeout | number | 否 | 配网超时时间,单位秒,默认 60 |
|
|
387
|
-
| productKey | string | 否 | 产品 Key |
|
|
388
|
-
| isBind | boolean | 否 | 是否自动绑定设备,默认 true |
|
|
389
|
-
| softAPSSIDPrefix | string | 否 | SoftAP 模式下的设备热点前缀 |
|
|
390
|
-
| eventCallBack | function | 否 | 配网过程事件回调 |
|
|
391
|
-
|
|
392
|
-
#### 配网模式说明
|
|
393
|
-
|
|
394
|
-
1. **SoftAP 模式 (mode: 0)**
|
|
395
|
-
|
|
396
|
-
- 设备会创建一个 WiFi 热点
|
|
397
|
-
- 手机需要先连接到设备热点
|
|
398
|
-
- 适用于大多数 WiFi 设备
|
|
399
|
-
|
|
400
|
-
2. **BLE 模式 (mode: 3)**
|
|
401
|
-
|
|
402
|
-
- 通过蓝牙传输配网信息
|
|
403
|
-
- 设备需要支持蓝牙功能
|
|
404
|
-
- 适用于支持蓝牙的 WiFi 设备
|
|
405
|
-
|
|
406
|
-
3. **NFC 模式 (mode: 5)**
|
|
407
|
-
- 通过 NFC 传输配网信息
|
|
408
|
-
- 仅支持安卓设备
|
|
409
|
-
- 设备需要支持 NFC 功能
|
|
410
|
-
|
|
411
|
-
#### 注意事项
|
|
412
|
-
|
|
413
|
-
1. 配网前确保设备处于配网状态
|
|
414
|
-
2. 确保 WiFi 密码正确
|
|
415
|
-
3. 配网过程中不要切换网络或关闭蓝牙
|
|
416
|
-
4. 如果配网超时,可以调用 `stopDeviceOnboardingDeploy` 停止配网
|
|
417
|
-
5. 配网成功后,设备会自动连接到指定的 WiFi 网络
|
|
418
|
-
|
|
419
|
-
#### 错误处理
|
|
420
|
-
|
|
421
|
-
```typescript
|
|
422
|
-
try {
|
|
423
|
-
const result = await sdk.setDeviceOnboardingDeploy({
|
|
424
|
-
ssid: 'wifi_ssid',
|
|
425
|
-
password: 'wifi_password',
|
|
426
|
-
mode: 3,
|
|
427
|
-
});
|
|
428
|
-
|
|
429
|
-
if (!result.success) {
|
|
430
|
-
// 处理配网失败
|
|
431
|
-
console.error('配网失败:', result.err);
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
// 配网成功,可以开始使用设备
|
|
436
|
-
const devices = result.data;
|
|
437
|
-
} catch (error) {
|
|
438
|
-
// 处理异常
|
|
439
|
-
console.error('配网异常:', error);
|
|
440
|
-
}
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
### 停止配网
|
|
444
|
-
|
|
445
|
-
取消当前正在进行的配网过程。
|
|
446
|
-
|
|
447
|
-
```typescript
|
|
448
|
-
sdk.stopDeviceOnboardingDeploy();
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
### 绑定设备
|
|
452
|
-
|
|
453
|
-
绑定设备到机智云平台,绑定成功后才能进行设备控制和数据交互。
|
|
454
|
-
|
|
455
|
-
```typescript
|
|
456
|
-
const result = await sdk.bindRemoteDevice({
|
|
457
|
-
mac: 'device_mac', // 设备 MAC 地址
|
|
458
|
-
productKey: 'product_key', // 产品 Key
|
|
459
|
-
alias: 'device_name', // 可选,设备别名
|
|
460
|
-
beOwner: true, // 可选,是否作为设备所有者
|
|
461
|
-
});
|
|
462
|
-
|
|
463
|
-
if (result.success) {
|
|
464
|
-
// 绑定成功
|
|
465
|
-
const device = result.data;
|
|
466
|
-
console.log('设备绑定成功:', device);
|
|
467
|
-
} else {
|
|
468
|
-
// 绑定失败
|
|
469
|
-
console.error('设备绑定失败:', result.err);
|
|
470
|
-
}
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
#### 参数说明
|
|
474
|
-
|
|
475
|
-
| 参数 | 类型 | 必填 | 说明 |
|
|
476
|
-
| ---------- | ------- | ---- | ------------------------------- |
|
|
477
|
-
| mac | string | 是 | 设备的 MAC 地址 |
|
|
478
|
-
| productKey | string | 是 | 产品 Key,用于标识设备类型 |
|
|
479
|
-
| alias | string | 否 | 设备别名,用于自定义设备名称 |
|
|
480
|
-
| beOwner | boolean | 否 | 是否作为设备所有者,默认为 true |
|
|
481
|
-
|
|
482
|
-
#### 注意事项
|
|
106
|
+
#### 参数
|
|
107
|
+
- services: 过滤services的条件,不传默认 ['ABF8', 'ABF0', 'F0AB', 'F8AB']
|
|
483
108
|
|
|
484
|
-
|
|
485
|
-
2. 绑定成功后,设备会自动添加到设备列表中
|
|
486
|
-
3. 一个设备只能被一个用户绑定为所有者,但可以被多个用户共享
|
|
109
|
+
### sdk.deviceSafetyRegister(Object object)
|
|
487
110
|
|
|
488
|
-
|
|
111
|
+
安全注册目标设备,否则无法发起设备绑定。返回值中可以拿到注册结果。
|
|
489
112
|
|
|
490
|
-
|
|
491
|
-
try {
|
|
492
|
-
const result = await sdk.bindRemoteDevice({
|
|
493
|
-
mac: 'device_mac',
|
|
494
|
-
productKey: 'product_key',
|
|
495
|
-
});
|
|
113
|
+
#### 参数
|
|
496
114
|
|
|
497
|
-
|
|
498
|
-
// 处理绑定失败
|
|
499
|
-
console.error('绑定失败:', result.err);
|
|
500
|
-
return;
|
|
501
|
-
}
|
|
115
|
+
- Object object
|
|
502
116
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
console.error('绑定异常:', error);
|
|
508
|
-
}
|
|
509
|
-
```
|
|
117
|
+
| 属性 | 类型 | 描述 |
|
|
118
|
+
| ---------- | ------ | ------------------ |
|
|
119
|
+
| mac | string | 待注册设备 mac |
|
|
120
|
+
| productKey | string | 待注册设备所属产品 |
|
|
510
121
|
|
|
511
|
-
###
|
|
122
|
+
### sdk.bindRemoteDevice(Object object)
|
|
512
123
|
|
|
513
|
-
|
|
514
|
-
sdk.unbindDevice({ devices: [{ mac: string, productKey: string }] });
|
|
515
|
-
```
|
|
124
|
+
绑定远程设备,否则无法发起设备订阅。返回值中可以拿到绑定结果。
|
|
516
125
|
|
|
517
126
|
#### 参数
|
|
518
127
|
|
|
128
|
+
- Object object
|
|
129
|
+
|
|
519
130
|
| 属性 | 类型 | 描述 |
|
|
520
131
|
| ---------- | ------ | ------------------ |
|
|
521
132
|
| mac | string | 待绑定设备 mac |
|
|
522
133
|
| productKey | string | 待绑定设备所属产品 |
|
|
523
134
|
|
|
524
|
-
###
|
|
135
|
+
### sdk.subscribe(device:[IDevice](#IDevice) )
|
|
525
136
|
|
|
526
|
-
|
|
137
|
+
订阅目标设备,订阅成功后可控制设备。返回值中可以拿到订阅结果。
|
|
527
138
|
|
|
528
|
-
|
|
529
|
-
sdk.getDeviceStatus(device:[IDevice], attrNames?: string[])
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
### 下发控制指令
|
|
139
|
+
### sdk.write(device:[IDevice](#IDevice),cmd:{[key]:value})
|
|
533
140
|
|
|
534
141
|
向目标设备发送指令。 其中`key`为数据点名称,value 为数据点的值。
|
|
535
142
|
|
|
536
|
-
|
|
537
|
-
sdk.write(device:[IDevice])
|
|
538
|
-
```
|
|
143
|
+
### sdk.unSubscribe(device:[IDevice](#IDevice))
|
|
539
144
|
|
|
540
|
-
|
|
145
|
+
取消订阅目标设备。蓝牙设备会断开连接。返回值中可拿到取消订阅结果。
|
|
541
146
|
|
|
542
|
-
###
|
|
147
|
+
### sdk.addEventListener(type,listener)
|
|
543
148
|
|
|
544
|
-
|
|
545
|
-
sdk.addEventListener(type, listener);
|
|
546
|
-
```
|
|
149
|
+
#### 概览
|
|
547
150
|
|
|
548
|
-
| 事件种类 type
|
|
549
|
-
|
|
|
550
|
-
|
|
|
551
|
-
|
|
|
552
|
-
|
|
|
553
|
-
| onScanListChange | [IDevice[]](#IDevice) | 扫描设备列表变更通知 |
|
|
554
|
-
| onBleHandleError | [IError](#IError) | ble 错误通知 |
|
|
151
|
+
| 事件种类 type | 回调参数类型 | 回调参数描述 |
|
|
152
|
+
| --------------------------- | ------------------------------------- | -------------------- |
|
|
153
|
+
| onScanListChange | [IDevice[]](#IDevice) | 扫描设备列表变更通知 |
|
|
154
|
+
| GizDeviceAttrsNotifications | [IDeviceAttrsNoti](#IDeviceAttrsNoti) | 设备数据点变更通知 |
|
|
155
|
+
| onBleHandleError | [IError](#IError) | ble 错误通知 |
|
|
555
156
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
```ts
|
|
559
|
-
this.gizSdk.addEventListener('GizDeviceListNotifications', (deviceList: IDevice[]) => {
|
|
560
|
-
console.log('列表发生变化', deviceList);
|
|
561
|
-
});
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
#### GizDeviceStatusNotifications
|
|
565
|
-
|
|
566
|
-
```ts
|
|
567
|
-
this.gizSdk.addEventListener('GizDeviceStatusNotifications', (e: IDeviceStatusNoti) => {
|
|
568
|
-
console.log('设备在线状态变化', e);
|
|
569
|
-
});
|
|
570
|
-
```
|
|
571
|
-
|
|
572
|
-
#### onScanListChange
|
|
573
|
-
|
|
574
|
-
蓝牙扫描的设备回调
|
|
157
|
+
- <a id="onScanListChange">onScanListChange</a>
|
|
575
158
|
|
|
576
159
|
```ts
|
|
577
160
|
const initBle = () => {
|
|
@@ -592,7 +175,7 @@ initBle();
|
|
|
592
175
|
scanBle();
|
|
593
176
|
```
|
|
594
177
|
|
|
595
|
-
|
|
178
|
+
- <a id="GizDeviceAttrsNotifications">GizDeviceAttrsNotifications</a>
|
|
596
179
|
|
|
597
180
|
监听设备上报数据。
|
|
598
181
|
|
|
@@ -605,9 +188,9 @@ this.gizSdk.addEventListener(
|
|
|
605
188
|
);
|
|
606
189
|
```
|
|
607
190
|
|
|
608
|
-
|
|
191
|
+
#### 类型定义
|
|
609
192
|
|
|
610
|
-
|
|
193
|
+
- <a id="IDevice">IDevice</a>
|
|
611
194
|
|
|
612
195
|
```ts
|
|
613
196
|
interface IDevice {
|
|
@@ -620,47 +203,210 @@ interface IDevice {
|
|
|
620
203
|
isOnline: boolean; // 代表大循环在线
|
|
621
204
|
isLanOnline: boolean; // 代表小循环在线
|
|
622
205
|
isBleOnline: boolean; // 代表蓝牙在线
|
|
623
|
-
bleWorkStatus?: number; // 蓝牙设备状态 0 默认状态 1 配网状态
|
|
624
|
-
connectType: TConnectType; // 当前连接类型
|
|
625
206
|
}
|
|
626
207
|
```
|
|
627
208
|
|
|
628
|
-
|
|
209
|
+
- <a id="IDeviceAttrsNoti">IDeviceAttrsNoti</a>
|
|
629
210
|
|
|
630
211
|
```ts
|
|
631
|
-
|
|
212
|
+
interface IDeviceAttrsNoti {
|
|
213
|
+
device: IDevice;
|
|
214
|
+
data: object; // 设备上报数据点
|
|
632
215
|
}
|
|
633
216
|
```
|
|
634
217
|
|
|
635
|
-
|
|
218
|
+
- <a id="IError">IError</a>
|
|
636
219
|
|
|
637
220
|
```ts
|
|
638
|
-
interface
|
|
639
|
-
|
|
640
|
-
|
|
221
|
+
interface IError {
|
|
222
|
+
errorCode: number;
|
|
223
|
+
errorMessage?: string; // 错误信息
|
|
641
224
|
}
|
|
642
225
|
```
|
|
643
226
|
|
|
644
|
-
###
|
|
227
|
+
### sdk.removeEventListener(type:K,func:TListenerType[K])
|
|
645
228
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
229
|
+
销毁事件监听。
|
|
230
|
+
|
|
231
|
+
# 机智云小程序 wifi SDK
|
|
232
|
+
|
|
233
|
+
## 使用方法
|
|
234
|
+
|
|
235
|
+
```javascript
|
|
236
|
+
import GizwitsSdk, { errorCode } from 'mini_program_gizwits_sdk';
|
|
237
|
+
|
|
238
|
+
const sdk = new GizwitsSdk({
|
|
239
|
+
appID: '8f187b1deb9e44b6aa1374b8f13bccb1',
|
|
240
|
+
appSecret: 'd73fa6d6d7c04d37b6b2cc13a18a9f37',
|
|
241
|
+
specialProductKeys: ['00e7e327afa74a3d8ff1cc190bad78c0'],
|
|
242
|
+
specialProductKeySecrets: ['aa3d301fa291466fbed20e4204609abc'],
|
|
243
|
+
token: token,
|
|
244
|
+
uid: uid,
|
|
245
|
+
cloudServiceInfo: null,
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
try {
|
|
249
|
+
const data = await sdk.setDeviceOnboardingDeploy({
|
|
250
|
+
ssid: SSID,
|
|
251
|
+
password: password,
|
|
252
|
+
mode: 3, // 蓝牙配网
|
|
253
|
+
// mode:0 // softAp
|
|
254
|
+
timeout: 60,
|
|
255
|
+
softAPSSIDPrefix: 'XPG-GAgent-',
|
|
256
|
+
});
|
|
257
|
+
} catch (error) {
|
|
258
|
+
console.log(error);
|
|
650
259
|
}
|
|
651
260
|
```
|
|
652
261
|
|
|
653
|
-
|
|
262
|
+
其中`data`代表配网成功的设备。
|
|
263
|
+
|
|
264
|
+
如果失败的话会返回数据
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
{
|
|
268
|
+
success: false,
|
|
269
|
+
err: {
|
|
270
|
+
errorCode: 'code',
|
|
271
|
+
errorMessage: 'message',
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```ts
|
|
277
|
+
const errorCode: IErrorCode = {
|
|
278
|
+
GIZ_OPENAPI_DEVICE_NOT_BOUND: {
|
|
279
|
+
errorCode: 9017,
|
|
280
|
+
errorMessage: 'not bind',
|
|
281
|
+
},
|
|
282
|
+
GIZ_SDK_HTTP_REQUEST_FAILED: {
|
|
283
|
+
errorCode: 8099,
|
|
284
|
+
errorMessage: '网络请求失败',
|
|
285
|
+
},
|
|
286
|
+
GIZ_SDK_SDK_NOT_INITIALIZED: {
|
|
287
|
+
errorCode: 8300,
|
|
288
|
+
errorMessage: 'not init',
|
|
289
|
+
},
|
|
290
|
+
CONFIG_TIME_OUT: {
|
|
291
|
+
errorCode: 8023,
|
|
292
|
+
errorMessage: 'Config Timeout',
|
|
293
|
+
},
|
|
294
|
+
WECHAT_ERROR: {
|
|
295
|
+
errorCode: 10000,
|
|
296
|
+
errorMessage: 'wechat error',
|
|
297
|
+
},
|
|
298
|
+
GIZ_SDK_ONBOARDING_STOPPED: {
|
|
299
|
+
errorCode: 8318,
|
|
300
|
+
errorMessage: '配网中断',
|
|
301
|
+
},
|
|
302
|
+
GIZ_SDK_DEVICE_CONFIG_IS_RUNNING: {
|
|
303
|
+
errorCode: 8022,
|
|
304
|
+
errorMessage: '配置正在进行中',
|
|
305
|
+
},
|
|
306
|
+
GIZ_OPENAPI_TOKEN_INVALID: {
|
|
307
|
+
errorCode: 9004,
|
|
308
|
+
errorMessage: 'token 失效',
|
|
309
|
+
},
|
|
310
|
+
GIZ_SDK_BIND_DEVICE_FAILED: {
|
|
311
|
+
errorCode: 8039,
|
|
312
|
+
errorMessage: '设备绑定失败',
|
|
313
|
+
},
|
|
314
|
+
GIZ_SDK_BLE_BLUETOOTH_FUNCTION_NOT_TURNED_ON: {
|
|
315
|
+
errorCode: 8281,
|
|
316
|
+
errorMessage: '蓝牙未启用',
|
|
317
|
+
},
|
|
318
|
+
GIZ_SDK_OTHERWISE: {
|
|
319
|
+
errorCode: 8100,
|
|
320
|
+
errorMessage: '',
|
|
321
|
+
},
|
|
322
|
+
GIZ_SDK_DEVICE_NOT_SUBSCRIBED: {
|
|
323
|
+
errorCode: 8029,
|
|
324
|
+
errorMessage: '设备还未订阅',
|
|
325
|
+
},
|
|
326
|
+
GIZ_SDK_PRODUCTKEY_NOT_IN_SPECIFY: {
|
|
327
|
+
errorCode: 8250,
|
|
328
|
+
errorMessage: '产品类型不在指定范围内',
|
|
329
|
+
},
|
|
330
|
+
};
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### 探趣 BLE 配网
|
|
334
|
+
|
|
335
|
+
SDK 将 `name` / `localName` 以“探趣”开头的设备映射到
|
|
336
|
+
`188c3f02286f472b898f9fadc8058372`,仍需在 `productInfo` 中配置该产品。
|
|
337
|
+
广播不含 MAC,扫描阶段以 `bleDeviceID` 区分设备,不生成虚假 MAC。
|
|
654
338
|
|
|
655
339
|
```ts
|
|
656
|
-
|
|
340
|
+
// 先初始化蓝牙并扫描,从设备列表选择探趣设备。
|
|
341
|
+
const deviceId = device.bleDeviceID;
|
|
342
|
+
// 选择设备时不用连接,输入 Wi-Fi 后直接调用统一配网接口。
|
|
343
|
+
const result = await sdk.setDeviceOnboardingDeploy({
|
|
344
|
+
mode: 11,
|
|
345
|
+
bleDeviceID: deviceId,
|
|
346
|
+
ssid: '家庭WiFi',
|
|
347
|
+
password: 'your-password', // 开放网络可传空字符串
|
|
348
|
+
timeout: 60,
|
|
349
|
+
isBind: false,
|
|
350
|
+
softAPSSIDPrefix: '',
|
|
351
|
+
});
|
|
352
|
+
// result.success 表示设备报告网络配置成功,不代表云端注册或绑定完成。
|
|
353
|
+
// SDK 自动连接、进入配网、发送凭据、查询状态,并在结束后清理连接。
|
|
657
354
|
```
|
|
658
355
|
|
|
659
|
-
|
|
356
|
+
直接调用 mode 11 即可完成配网。SDK 缓存已发现设备的身份,实时扫描列表过期不会阻止已选设备连接。
|
|
357
|
+
`prepareTqOnboarding()` 仍可选用来读取设备 Wi-Fi 列表,但不再是 demo 的前置步骤。
|
|
358
|
+
取消使用 `stopDeviceOnboardingDeploy()`,会中断请求并断开当前配网连接。
|
|
359
|
+
SDK 销毁会清理探趣连接、通知监听和未完成请求。
|
|
360
|
+
|
|
361
|
+
探趣设备也可通过统一接口查询信息,无需先绑定或进入配网模式:
|
|
660
362
|
|
|
661
363
|
```ts
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
364
|
+
const result = await sdk.getDeviceInfo({ device });
|
|
365
|
+
if (result.success) {
|
|
366
|
+
console.log(result.data.deviceID, result.data.deviceHardVersion, result.data.deviceSoftVersion);
|
|
665
367
|
}
|
|
666
368
|
```
|
|
369
|
+
|
|
370
|
+
SDK 使用 L2 `ver=1, fun=0x01, cmd=0x01`,请求数据为空。发送失败、响应超时或
|
|
371
|
+
响应长度不为 29 字节时,改用 `ver=2` 重试;成功后使用回复中的 `ver` 作为当前
|
|
372
|
+
会话后续命令的协议版本。独立查询结束会断开连接;已有配网会话会保持连接。
|
|
373
|
+
|
|
374
|
+
|返回字段|协议来源|格式|
|
|
375
|
+
|---|---|---|
|
|
376
|
+
|`deviceTypeID`|Byte[0–3]|8 位十六进制字符串,保留字节顺序|
|
|
377
|
+
|`deviceID`|Byte[4–20]|UTF-8 文本,去掉末尾 NUL;无法解码时保留十六进制原值|
|
|
378
|
+
|`deviceHardVersion`|Byte[21–24]|8 位十六进制字符串,保留字节顺序|
|
|
379
|
+
|`deviceSoftVersion`|Byte[25–28]|8 位十六进制字符串,保留字节顺序|
|
|
380
|
+
|`protocolVersion`|L2 回复的 `ver`|数字|
|
|
381
|
+
|
|
382
|
+
协议未说明版本编码,暂保留原始十六进制值。没有分别提供模组、MCU 和业务版本,
|
|
383
|
+
因此 `moduleHardVersion`、`moduleSoftVersion`、`mcuHardVersion`、`mcuSoftVersion`
|
|
384
|
+
和 `businessVersion` 均为空字符串。
|
|
385
|
+
|
|
386
|
+
仅探趣设备支持设置设备 ID,接口参数中的 `deviceId` 是要写入设备的新 ID,
|
|
387
|
+
蓝牙连接仍使用 `device.bleDeviceID`:
|
|
388
|
+
|
|
389
|
+
```ts
|
|
390
|
+
const result = await sdk.setDeviceId({ device, deviceId: 'TQ123456789012345' });
|
|
391
|
+
// result.success 为 true 表示设备返回 status code 0。
|
|
392
|
+
// 有效的设备回复会在 result.data.statusCode 中保留原始单字节状态码。
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
ID 必须是字符串,UTF-8 编码后恰好 17 字节;长度不符不会连接或发送命令,
|
|
396
|
+
不会自动截断、补零或去除空格。中文等多字节字符按编码字节数计算。
|
|
397
|
+
SDK 先通过查询设备信息确定当前会话的协议版本,再发送 `fun=0x01, cmd=0x10`。
|
|
398
|
+
回复必须为 1 字节,状态码非 0 返回失败。独立调用结束清理连接,已有配网会话保持连接。
|
|
399
|
+
|
|
400
|
+
服务 `18FF`,写入 `2B02`,通知 `2B01`。L0 每包最多 20 字节,CRC8
|
|
401
|
+
多项式 `0x07`、初始值 `0`,校验 Data;L2 长度为大端。每包匹配序号
|
|
402
|
+
等待 ACK,超时 2 秒,最多发送 3 次。该实现依据 tq_ble_tools,未添加加密。
|
|
403
|
+
收到开始配网确认后等待 2 秒,每秒查询状态,最多 20 次,外层 timeout
|
|
404
|
+
限制整个配网过程。云端绑定及其他设备控制功能不在此接口支持范围内。
|
|
405
|
+
|
|
406
|
+
协议及模拟设备测试(需要安装 TypeScript):
|
|
407
|
+
|
|
408
|
+
```sh
|
|
409
|
+
node tests/tq-protocol.cjs
|
|
410
|
+
node tests/tq-session.cjs
|
|
411
|
+
node tests/tq-device-info.cjs
|
|
412
|
+
```
|