更新记录
2.5.0(2026-09-05) 下载此版本
2.5.0
2.4.5(2026-08-10) 下载此版本
2.4.5
2.4.4(2026-07-30) 下载此版本
2.4.4
查看更多平台兼容性
uni-app(4.73)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.73)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
Uascent-MarsGateSDK 插件文档
版本:2.5.0
目录
- Uascent-MarsGateSDK 插件文档
- 目录
- 插件介绍
- 接入指引
- 引入插件
- 交互流程
- A. 云云对接(accessToken / 设备绑定)
- B. 首次接入与订阅(SDK)
- C. accessToken 失效后更新(SDK)
- D. 绑定设备列表变化后的订阅调整(SDK)
- API 文档
- 初始化
- 通过蓝牙设备搜索
- 二维码相关
- 设备添加
- 添加网络
- 蓝牙相关
- 远程设备相关(支持WiFi设备、4G设备)
- connectSocket()
- disConnectSocket()
- getSocketStatus()
- subscribeDevice(list)
- unSubscribeDevice()
- onMessageChange(callback)
- offMessageChange(callback)
- onSocketStatusChange(callback)
- offSocketStatusChange(callback)
- sendControl(deviceInfo, properties)
- sendQuery(deviceInfo, properties)
- getWifiDeviceStatus(params)
- resetDevice(params)
- getUpgradeInfo(params)
- upgrade(params)
- 设备通用
- 状态码
- 注意事项
插件介绍
Uascent-MarsGateSDK 是一个用于在中实现蓝牙、WiFi、4G设备管理的插件。它提供了设备搜索、添加、连接、控制等完整功能。
接入指引
引入插件
import MarsGateSDK from '@/uni_modules/Uascent-MarsGateSDK/js_sdk/index.js'
交互流程
交互分为两层:
- 云云对接:获取 / 刷新
accessToken、维护 Token 绑定的设备列表(详见云云对接文档https://help.uascent-iot.com/marsgate/iot-doc-manage/doc-wiki#/page/share/view?pageId=361&space=2e0a8b9ba9724208b432ee335ad19ada) - SDK 交互:业务侧通过 MarsGateSDK 连接 WebSocket、订阅与收消息
请先完成云云侧能力,再进入对应的 SDK 流程。
A. 云云对接(accessToken / 设备绑定)
参与方:业务服务 ↔ 云云对接
业务服务 云云对接
| |
| 1. 获取 accessToken |
| (携带需绑定的设备列表) |
|--------------------------->|
| 2. 返回 accessToken |
|<---------------------------|
| |
| 3. Token 失效后重新获取 |
|--------------------------->|
| 4. 返回 newAccessToken |
|<---------------------------|
| |
| 5. 绑定设备变化:刷新列表 |
|--------------------------->|
| 6. 返回刷新成功 |
|<---------------------------|
说明:
- 获取 / 更新
accessToken、刷新绑定设备均在云云侧完成 - 完成后再进入下方 SDK 交互流程
B. 首次接入与订阅(SDK)
前置:已通过云云对接获取 accessToken
参与方:业务侧 → SDK → WebSocket 服务
业务侧 SDK WebSocket 服务
| | |
| 1. init({ clientId, accessToken }) |
| (仅写入配置,不连接 WebSocket) |
|------------------>| |
| 2. connectSocket()| |
|------------------>| 3. 建立连接 |
| |----------------------->|
| | 4. 连接成功 |
| |<-----------------------|
| 5. onMessageChange(callback) |
|------------------>| |
| 6. subscribeDevice(list) |
|------------------>| 7. 订阅设备主题 |
| |----------------------->|
| 8. 设备上报 / 业务消息(经 onMessageChange)|
|<-------------------------------------------|
流程摘要:init → connectSocket → onMessageChange → subscribeDevice → 接收设备消息
C. accessToken 失效后更新(SDK)
前置:已通过云云对接重新获取 newAccessToken
参与方:业务侧 → SDK → WebSocket 服务
业务侧 SDK WebSocket 服务
| | |
| | 1. authError / 鉴权失败|
| |<-----------------------|
| 2. onMessageChange(errCode: 30005) |
|<------------------| |
| 3. updateAccessToken({ accessToken }) |
|------------------>| |
| | 4. 写入新 Token; |
| | 若 WS 已连接或上次 |
| | 鉴权失败则继续 ↓ |
| | 5. 断开旧连接 |
| |----------------------->|
| | 6. 重新连接 |
| |----------------------->|
| | 7. 连接成功 |
| |<-----------------------|
| | 8. 自动恢复之前的订阅 |
| |----------------------->|
流程摘要:收到 30005 →(云云已换新 Token)→ updateAccessToken → SDK 自动重连并恢复订阅
一般无需再手动调用
connectSocket/subscribeDevice。
D. 绑定设备列表变化后的订阅调整(SDK)
前置:已通过云云对接刷新 accessToken 绑定的设备列表
参与方:业务侧 → SDK → WebSocket 服务
业务侧 SDK WebSocket 服务
| | |
| Token 字符串未变 → 一般无需 updateAccessToken
| | |
| 按业务自行决定是否调整订阅 |
| | |
| 【需要调整】 |
| 1. subscribeDevice(最新列表) |
|------------------>| 2. 更新订阅主题 |
| |----------------------->|
| | |
| 【暂不调整】保持当前订阅即可 |
说明:
- 流程摘要:
(云云已刷新绑定设备)→ 按需 subscribeDevice 最新列表 - Token 字符串未变时,一般无需调用
updateAccessToken - 若收到
errCode 30003(无权访问该设备):请先确认云云侧设备列表已刷新,再按需调整订阅
API 文档
初始化
init(config)
初始化插件配置。
说明:
init仅写入配置,不会连接或重建 WebSocket。
首次连接请调用connectSocket();更新accessToken请调用updateAccessToken。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| clientId | String |
是 | 客户端ID |
| accessToken | String |
是 | 访问令牌;获取与设备绑定说明见云云对接文档 https://help.uascent-iot.com/marsgate/iot-doc-manage/doc-wiki#/page/share/view?pageId=361&space=2e0a8b9ba9724208b432ee335ad19ada |
| env | String |
否 | 环境,可选值:'china'(中国), 'europe'(欧洲), 'overseas'(其他海外区域)默认'china' |
| isRepeatOnBluetoothDeviceFound | Boolean |
否 | 是否重复监听搜索到的设备, 默认false |
| isRepeatStopBluetoothDevicesDiscovery | Boolean |
否 | 是否重复关闭搜索, 默认false |
| isRepeatOperateBluetoothAdapter | Boolean |
否 | 适配器空闲时是否先关闭再打开蓝牙模块,默认 true。已有设备已连 / 建连中时不会关闭,避免 search 拆掉当前连接 |
返回值
Promise,返回数据结构:
{
code: 0,
data: undefined,
message: '成功'
}
推荐调用顺序
await MarsGateSDK.init({ clientId, accessToken })
await MarsGateSDK.connectSocket()
MarsGateSDK.onMessageChange((msg) => { /* ... */ })
await MarsGateSDK.subscribeDevice([{ productId, deviceId }])
// 1)accessToken 失效:云云重新获取后更新到 SDK
await MarsGateSDK.updateAccessToken({ accessToken: newAccessToken })
// SDK 自动重连 WebSocket 并恢复订阅
// 2)仅绑定设备列表变化:云云侧刷新 accessToken 绑定设备后
// 按需重新订阅最新设备列表(Token 字符串未变时一般无需 updateAccessToken)
await MarsGateSDK.subscribeDevice(latestDeviceList)
示例
MarsGateSDK.init({
clientId: 'xxxxxxxxxxxx',
accessToken: 'xxxxxxxxxxxx'
}).then((res) => {
console.log(res)
}).catch((err) => {
console.log(err)
})
updateAccessToken(options)
更新 accessToken。
需先成功调用
init。
适用于 accessToken 字符串发生变化(如失效后重新获取)的场景。
若 WebSocket 已连接,或上次因 Token 鉴权失败,会自动断开旧连接、重新连接,并恢复之前的订阅。
若仅是 Token 绑定的设备列表变化、Token 字符串本身未变,请先走云云对接刷新设备列表,再按需调用subscribeDevice,无需调用本方法。详见注意事项。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options | Object |
是 | 更新参数 |
| options.accessToken | String |
是 | 新的访问令牌 |
返回值
Promise,返回数据结构:
// 无需重建 WebSocket
{
code: 0,
data: undefined,
message: '成功'
}
// 触发 WebSocket 重建时
{
code: 0,
data: {
socketReconnected: true // true: 重建成功;false: Token 已更新但 WebSocket 重建失败
// socketError: {} // 仅 socketReconnected 为 false 时存在
},
message: '成功'
}
accessToken一定会先写入。即使 WebSocket 重建失败,方法仍会 resolve 成功;鉴权失败时会通过onMessageChange回调(如errCode: 30005)。
示例
MarsGateSDK.updateAccessToken({
accessToken: '新的accessToken'
}).then((res) => {
console.log(res)
}).catch((err) => {
console.log(err)
})
通过蓝牙设备搜索
search(options)
开始搜索设备(通过蓝牙搜索周围的设备)。
参数 无 返回值
Promise
onSearchListChange(callback)
监听通过蓝牙搜索到的设备列表变化。
参数
Function 回调函数,返回设备列表数据:
{
code: 0,
data: [], // 设备列表
message: '成功'
}
设备列表项数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| name | String |
设备名称 |
| bleName | String |
蓝牙设备名称 |
| imageUrl | String |
设备图片链接 |
| productId | String |
产品ID |
| mac | String |
MAC地址 |
| type | String |
设备类型 |
| isAddNetwork | Boolean |
当前状态是否是添加网络 |
| isSupportWiFiList | Boolean |
是否支持通过设备获取2.4G WiFi列表 |
| isSupport4G | Boolean |
是否支持4G网络 |
| productBrand | String |
产品品牌 |
| productModel | String |
产品型号 |
stopSearch()
停止蓝牙搜索设备。
二维码相关
getDeviceInfoByQRCode(params)
通过二维码查询设备信息。
params参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| qrcode | String |
是 | 二维码内容 |
返回值
Promise
成功
{
code: 0,
data: {
mac: 'xxxxxxxxx', // 设备mac
productId: 'xxxxxxx', // 产品id
deviceId: 'xxxxxxxxxxxxxxx', // 设备id
productName: 'xxxxxxxxxx', // 产品名称
productUrl: 'xxxxxxxxxx', // 产品图标
online: true // 是否在线
},
message: '成功'
}
data数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| mac | String |
设备mac |
| productId | String |
产品id |
| deviceId | String |
设备id |
| productName | String |
产品名称 |
| productUrl | String |
产品图标 |
| online | Boolean |
是否在线 |
设备添加
add(info, params, callback,logCallback)
添加设备(通过蓝牙添加设备,支持蓝牙设备、WiFi设备)。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| info | Object |
是 | 设备基本信息 |
| params | Object |
否 | WiFi设备配网参数, 仅WiFi设备需要 |
| callback | Function |
否 | WiFi设备配网状态回调, 仅WiFi设备需要 |
| logCallback | Function |
否 | 日志回调 |
info参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
| type | String |
否 | 设备类型, 可选值:'ble','wifi',默认为'ble' |
params参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| is4GActive | Boolean |
否 | 使用4G网络激活时必传,默认false |
| ssid | String |
否 | WiFi名称,非4G网络激活时必传 |
| bssid | String |
否 | WiFi BSSID |
| password | String |
否 | WiFi密码,非4G网络激活时必传 |
| timeout | Number |
否 | 蓝牙搜索连接超时时间,单位秒,默认120秒 |
callback参数结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| status | Number |
配网状态,1:寻找设备,2:注册到云 3:成功 4:失败 |
| data | Object |
设备返回数据 |
logCallback参数结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| trackId | String |
唯一标识符,用于区分日志 |
| title | String |
日志标题 |
| data | Object |
日志数据 |
| code | Number |
状态码 |
| desc | String |
日志描述 |
| header | Object |
日志头信息包含APP版本、环境、系统等信息 |
返回值 Promise 成功
{
code: 0,
data: {
deviceId: 'xxxxxxxxxxxx', // 设备的唯一标识
bindState: 1, // WiFi设备绑定状态 0: 添加中 1: 成功 2:失败
deviceName: 'xxxxxxxxxxxx', // WiFi设备名称
productId: 'xxxxxxxxxxxx', // WiFi产品ID
productName: 'xxxxxxxxxxxx', // WiFi产品名称
productBrand: 'xxxxxxxxxxxx', // WiFi产品品牌
productModel: 'xxxxxxxxxxxx', // WiFi产品型号
productUrl: 'xxxxxxxxxxxx', // WiFi产品图标
isAddNetwork: true, // 是否支持添加网络
isSupportWiFiList: true, // 是否支持通过设备获取2.4G WiFi列表
isSupport4G: true, // 是否支持通过4G网络
},
message: '成功'
}
data数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| deviceId | String |
设备的唯一标识 |
| bindState | Number |
WiFi设备绑定状态 0: 添加中 1: 成功 2:失败 |
| deviceName | String |
WiFi设备名称 |
| productId | String |
WiFi产品ID |
| productName | String |
WiFi产品名称 |
| productBrand | String |
WiFi产品品牌 |
| productModel | String |
WiFi产品型号 |
| productUrl | String |
WiFi产品图标 |
addByQRCodeInfo(params)
通过二维码添加设备。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| params | Object |
是 | 设备信息 |
params参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| productId | String |
是 | 产品ID |
| deviceId | String |
是 | 设备ID |
返回值
Promise
成功
{
code: 0,
data: {
bindState: 'xxxxxxxxxxxx', // 1是已绑定 0是未绑定 -1是绑定失败
deviceName: 'xxxxxxxxxxxx', // 设备名称
deviceId: 'xxxxxxxxxxxx', // 设备id
productName: 'xxxxxxxxxxxx', // 产品名称
productUrl: 'xxxxxxxxxxxx', // 产品图标
productBrand: 'xxxxxxxxxxxx', // 产品品牌
productModel: 'xxxxxxxxxxxx', // 产品型号
}
}
data数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| bindState | Number |
WiFi设备绑定状态 0: 添加中 1: 成功 2:失败 |
| deviceName | String |
WiFi设备名称 |
| deviceId | String |
设备ID |
| productName | String |
产品名称 |
| productUrl | String |
产品图标 |
| productBrand | String |
产品品牌 |
| productModel | String |
产品型号 |
添加网络
addNetwork(info, params, callback, logCallback)
通过蓝牙添加网络(支持WiFi设备)。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| info | Object |
是 | 设备基本信息 |
| params | Object |
否 | WiFi设备配网参数 |
| callback | Function |
否 | WiFi配网状态回调 |
| logCallback | Function |
否 | 日志回调 |
info参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
params参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ssid | String |
是 | WiFi名称 |
| bssid | String |
否 | WiFi BSSID |
| password | String |
是 | WiFi密码 |
| timeout | Number |
否 | 蓝牙搜索连接超时时间,单位秒,默认120秒 |
callback参数结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| status | Number |
配网状态,1:寻找设备,2:连接云服务 3:成功 4:失败 |
| data | Object |
设备返回数据 |
logCallback参数结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| trackId | String |
唯一标识符,用于区分日志 |
| title | String |
日志标题 |
| data | Object |
日志数据 |
| code | Number |
状态码 |
| desc | String |
日志描述 |
| header | Object |
日志头信息包含APP版本、环境、系统等信息 |
返回值
Promise
蓝牙相关
connect(options)
连接设备蓝牙。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
| onReport | Function |
否 | 上报回调 |
| onStateChange | Function |
否 | 状态变化回调 |
| dpInfo | Object |
否 | 设备DP点信息,蓝牙设备必传 |
| protocol | Array |
否 | 协议数组,蓝牙设备必传 |
| extraDpInfo | Object |
否 | 额外 DP 点下发值转换(仅对蓝牙设备生效,见下方说明) |
| extraProtocol | Object |
否 | 额外协议上报转换(仅对蓝牙设备生效,见下方说明) |
设备信息deviceInfo
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
| type | String |
否 | 设备类型, 可选值:'ble','wifi',默认为'ble' |
设备蓝牙状态变化回调onStateChange
回调函数的参数为Object 。
Object 键值对
| 参数名 | 类型 | 说明 |
|---|---|---|
| state | Number |
0: 连接中 1:连接成功 2:连接失败 3.设备状态同步中 -1: 已断开 |
onStateChange: (res) => {
console.log('onStateChange', res)
}
设备上报数据onReport
回调函数的参数为Object 。
Object 键值对
| 参数名 | 类型 | 说明 |
|---|---|---|
| data | Object |
设备上报的数据 |
onReport: (res) => {
console.log('onReport', res.data)
}
蓝牙设备DP点信息dpInfo
Object 键值对
| 参数名 | 类型 | 说明 |
|---|---|---|
| key | String |
属性上报的key |
| value | Number |
协议DP点 |
{
switch: 1, // 开关
level: 2, // 档位(数值)
timingPowerOff1: 3, // 定时关机(小时)
angleAutoLROnOff: 4, // 左右旋转/摇头/摆风
angleAutoUDOnOff: 5, // 上下旋转/摇头/摆风
anionOnOff: 10, // 负离子功能
mode: 12, // 风扇工作模式
}
蓝牙设备DP点信息protocol
全属性上报的数据协议,从协议数据位的第一字节开始,对应属性key,按顺序组成数组
- 如果在中间有未使用字节,使用
void 0undefinednull表示该字节未使用 - 如果某个字节按位上报,使用数组表示,规则和字节相似,数字下标
0表示bit 0['switch', 'level', void 0, 'timingPowerOff1', ['angleAutoLROnOff', 'angleAutoUDOnOff'] ,'anionOnOff', 'mode']
额外DP点下发值转换extraDpInfo
用于蓝牙 control 下发时,将业务值转换为协议值。Object 键为属性 key,值为「业务值 → 协议值」映射。
{
mode: {
0: 1, // 业务值 0 → 协议值 1
1: 2,
}
}
额外协议上报转换extraProtocol
用于蓝牙全属性上报后的二次转换。SDK 会先按 protocol 完成基础解析得到完整 data,再遍历 extraProtocol 中的转换函数。
Object 键为源属性 key,值为转换函数。
转换函数签名:(value, data) => Object
| 参数 | 类型 | 说明 |
|---|---|---|
| value | Any |
当前源属性值,即 data[key] |
| data | Object |
本次上报解析后的完整属性对象,可读取其它字段做联合计算 |
返回值:需要写入的派生属性键值对。
处理规则:
- 返回空对象或不返回有效字段:保留源属性,不删除
- 返回非空对象:写入派生字段,并删除源属性 key
- 转换抛错:保留源属性原始值,并打印错误日志
{
// 示例:将组合状态拆成多个业务字段,并可依赖其它已解析字段
combineStatus: (value, data) => {
return {
switch: value & 0b1,
mode: (value >> 1) & 0b11,
// 也可结合 data 中其它字段计算,例如:level: data.level
}
}
}
control(deviceInfo, data)
通过蓝牙控制设备。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
| data | Object |
是 | 控制的属性对象,键值对 |
deviceInfo参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
| type | String |
否 | 设备类型, 可选值:'ble','wifi',默认为'ble' |
searchWifi(deviceInfo)
通过蓝牙通知WiFi设备搜索附近WiFi,支持该方法的WiFi设备会在connect方法中onReport回调中返回WiFi列表,列表是分批上报,收到数据根据自身需求进行处理,WiFi列表为wifiList,每个WiFi项格式为:
| 参数名 | 类型 | 说明 |
|---|---|---|
| ssid | String |
WiFi名称 |
| bssid | String |
WiFi BSSID |
| rssi | Number |
信号强度 |
{
wifiList: [
{
ssid: 'WiFi名称',
bssid: 'WiFi BSSID',
rssi: -60
},
{
ssid: 'WiFi名称',
bssid: 'WiFi BSSID',
rssi: -80
}
]
}
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
deviceInfo参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
stopSearchWifi(deviceInfo)
通过蓝牙通知WiFi设备停止搜索WiFi。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
deviceInfo参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
closeConnect(param)
关闭蓝牙连接。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址 |
| productId | String |
是 | 产品ID |
远程设备相关(支持WiFi设备、4G设备)
connectSocket()
连接WebSocket。
调用前需先成功执行
init。首次使用远程设备能力时,必须主动调用本方法建立连接。
返回值
Promise
示例
MarsGateSDK.connectSocket().then((res) => {
console.log(res)
}).catch((err) => {
console.log(err)
})
disConnectSocket()
断开WebSocket连接。
返回值
Promise
getSocketStatus()
获取WebSocket连接状态。
返回值
Promise,返回数据结构:
{
code: 0,
data: {
status: 'connecting' // WebSocket连接状态CONNECTING: 'connecting: 连接中 'open': 已连接 'closing': 关闭中 'closed': 已关闭 'error': 连接错误
},
message: '成功'
}
subscribeDevice(list)
订阅设备消息。
参数
Array 远程设备(支持WiFi设备、4G设备)列表,每项结构:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| productId | String |
是 | 产品ID |
| deviceId | String |
是 | 设备ID |
unSubscribeDevice()
取消订阅设备消息。
参数
无
返回值 Promise
onMessageChange(callback)
监听设备消息变化,以及 WebSocket 鉴权失败、业务错误等通知。
callback参数
可能收到以下三类数据,请优先按 errCode 分支处理异常,无 errCode 时再按设备上报数据处理:
1. 设备上报消息
| 参数名 | 类型 | 说明 |
|---|---|---|
| xxx | Object |
设备ID |
以下字段按消息类型分别出现,一般不会在同一次回调中全部齐全。
// 设备消息变化回调(字段示例合集)
{
'xxxxxxx': { // 设备ID
data: { // 设备属性键值对
},
online_state: 'online', // 设备在线状态 online/offline
dev_reset: true, // 设备重置
firmwareInfo: { // 设备上报当前固件信息
type: 0, // 固件类型:0 WI-FI模组,1 电控MCU,3 资源包,10~19 扩展固件
version: '1.0.0', // 固件版本
},
// 固件升级进度 / 结果
upgrade: {
type: 0, // 固件类型:0 WI-FI模组,1 电控MCU,3 资源包,10~19 扩展固件
version: '1.0.0', // 目标 / 相关固件版本
messageId: 'xxx', // 升级消息 ID
timestamp: 123456789, // 时间戳
progress: 56, // 升级进度(进行中时返回)
result: 'success', // 升级结果 success / fail(完成或失败时返回)
error: '文件过大' // 失败原因
},
error: { // 设备错误信息(如控制时设备离线)
errCode: 40001, // 错误码
errMsg: '设备未在线' // 错误信息
}
}
}
2. AccessToken 失效
连接鉴权失败,或收到服务端 authError 时回调。此时应刷新 accessToken 后调用 updateAccessToken,SDK 会自动重建连接并恢复订阅。
{
type: 'tokenInvalid',
errCode: 30005, // 或其他鉴权错误码
errMsg: 'Access-token 失效'
}
3. 业务错误(如无权访问设备)
订阅或操作后,服务端通过 WebSocket 推送的业务错误。常见于订阅了未绑定到当前 accessToken 的设备:请先通过云云对接刷新绑定设备列表(参考文档),再按业务需要决定是否重新 subscribeDevice。
{
type: 'error', // 或服务端原始 type
errCode: 30003, // 无权访问该设备;其它业务错误见状态码表
errMsg: '无权访问该设备',
topic: '/device/...',
requestId: '1784949061472'
}
示例
MarsGateSDK.onMessageChange((msg) => {
const { errCode, errMsg } = msg || {}
// 优先按 errCode 处理异常
if (errCode != null) {
switch (errCode) {
case 30005: // Access-token 失效
// 刷新 accessToken 后调用 updateAccessToken
break
case 30003: // 无权访问该设备
// 多为设备未绑定到当前 accessToken:先云云刷新绑定设备列表,再按需重新订阅
console.log(errCode, errMsg)
break
case 40001: // 设备未在线
console.log(errCode, errMsg)
break
default:
// 其它错误(如 9999 系统异常)
console.log(errCode, errMsg)
break
}
return
}
// 无 errCode:设备上报数据
console.log(msg)
})
offMessageChange(callback)
取消监听设备消息。
callback参数
onSocketStatusChange(callback)
监听WebSocket连接状态变化。
callback参数
{
status: 'connecting' // WebSocket连接状态CONNECTING: 'connecting: 连接中 'open': 已连接 'closing': 关闭中 'closed': 已关闭 'error': 连接错误
}
offSocketStatusChange(callback)
取消WebSocket监听连接状态。
sendControl(deviceInfo, properties)
发送控制指令到远程设备(支持WiFi设备、4G设备)。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
| properties | Object |
是 | 控制属性对象 |
deviceInfo参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | String |
是 | 设备ID |
| productId | String |
是 | 产品ID |
返回值
Promise
示例
plugin.sendControl(deviceInfo, {switch: 1}).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
sendQuery(deviceInfo, properties)
发送查询指令到远程设备(支持WiFi设备、4G设备)。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceInfo | Object |
是 | 设备信息 |
| properties | Array |
否 | 属性数组 |
deviceInfo参数结构
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| deviceId | String |
是 | 设备ID |
| productId | String |
是 | 产品ID |
返回值
Promise
示例
plugin.sendQuery(deviceInfo).then(res => {
console.log(res)
}).catch(err => {
console.log(err)
})
getWifiDeviceStatus(params)
获取远程设备(支持WiFi设备、4G设备)最新状态。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| device_ids | String |
是 | 设备 ID ,多个 ID 以半角逗号(,)分隔,最多支持 10 个设备。 |
返回值
Promise
返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| data | Arrray |
设备列表 |
Array 设备列表
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | String |
设备ID |
| online_status | String |
在线状态: online, offline |
| status | Arrray |
设备状态列表 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| name | String |
属性名称 |
| value | String |
属性值 |
resetDevice(params)
重置远程设备(支持WiFi设备、4G设备)。
请求参数params
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| device_id | String |
是 | 设备ID |
| product_id | String |
是 | 产品ID |
| clean | Boolean |
是 | 是否清除设备数据 |
返回值
Promise
getUpgradeInfo(params)
查询设备升级信息。
请求参数params
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| device_id | String |
是 | 设备ID |
| product_id | String |
是 | 产品ID |
返回值
Promise
返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| data | Arrray |
升级信息列表 |
Array 设备列表
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | String |
主键id |
| version | String |
版本 |
| state | String |
升级状态 waitingOther : 等待其他设备升级noUpgrade : 不需要升级 waiting : 等待升级 processing :升级中 failed : 升级失败 success : 升级成功 canceled : 已取消 |
| type | Integer |
固件类型:0: WI-FI模组, 1: 电控MCU, 3:资源包,10~19: 扩展固件 |
| product_id | String |
产品ID |
| product_name | String |
产品名称 |
| name | String |
固件名称 |
| url | String |
固件文件地址 |
| sign | String |
固件文件签名 |
| sign_method | String |
固件文件签名方式,如:MD5,SHA256 |
| size | long |
固件文件大小 |
| create_time | long |
时间戳 |
| properties | Object |
其他配置信息 |
| description | String |
说明 |
| file_name | String |
文件名称 |
| currentVersion | String |
当前版本 |
upgrade(params)
升级设备。
请求参数params
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| device_id | String |
是 | 设备ID |
| id | String |
是 | 查询设备固件是否可以升级返回值id |
返回值
Promise
设备通用
getProductModel(productId)
获取产品物模型信息。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| productId | String |
是 | 产品ID |
返回值
Promise
返回参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| data | Object |
设备物模型信息 |
data 说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| properties | Object |
属性定义 |
| functions | Object |
功能定义 |
| events | Object |
事件定义 |
| expands | Object |
自定义功能 |
properties 说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| valueType | Object |
属性类型信息 |
| name | String |
属性名称 |
| id | String |
属性code |
| expands | Object |
扩展信息 |
valueType 说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| type | String |
数据类型 |
| expands | Object |
扩展信息 |
| elements | Array |
枚举信息 |
| max | Number |
最大值 |
| min | Number |
最小值 |
| unit | String |
单位 |
Expands 说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| readOnly | Boolean |
是否只读 |
| required | Boolean |
是否需要 |
getDeviceId(prams)
通过MAC地址和产品ID获取设备ID。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mac | String |
是 | MAC地址如 mac为 73:EA:EA:48:03:38,传参时去掉分隔符并转小写,传参为 73eaea480338 |
| productId | String |
是 | 产品ID |
返回值
Promise
成功
{
code: 0,
data: {
deviceId: 'xxxxxxxxxxxx', // 设备的唯一标识
productId: 'xxxxxxxxxxxx', // 产品ID
mac: 'xxxxxxxxxxxx', // MAC地址
},
message: '成功'
}
状态码
成功
{
code: 0,
data: {}, // 成功返回的数据,无数据是不存在该字段
message: '成功'
}
失败
{
errCode: 1001,
errMsg: '错误信息'
}
| 错误码 | 错误说明 |
|---|---|
| 1001 | 参数错误 |
| 1002 | 失败 |
| 1003 | 权限不足(含手机蓝牙/定位等权限) |
| 2001 | 未搜索到该设备 |
| 2002 | 目前不支持改类型设备 |
| 2003 | 设备配网超时 |
| 2004 | 添加网络超时 |
| 2005 | 目前不支持非wifi设备添加网络 |
| 2011 | 未找到WiFi,路由连接失败 |
| 2012 | 连接服务器失败或者断开服务器连接 |
| 2013 | WiFi密码错误,路由器连接失败 |
| 2014 | 设备当前状态不支持添加网络 |
| 2015 | 设备当前状态为添加网络状态,不支持添加设备 |
| 2016 | 获取不到IP地址,路由器连接失败 |
| 2017 | 数据中心参数错误,请检查数据中心参数 |
| 2018 | 请使用4G网络激活设备 |
| 2019 | CAT1连接失败:USB打开失败 |
| 2020 | CAT1连接失败:USB CDC打开失败 |
| 2021 | CAT1连接失败:AT连接参数设置失败 |
| 2022 | CAT1连接失败:PPP启动失败 |
| 2023 | CAT1连接失败:PPP连接失败 |
| 2024 | CAT1连接失败:CSQ信号强度异常 |
| 9999 | 系统错误 |
| 30001 | clientId不存在 |
| 30002 | 签名错误 |
| 30003 | 没有权限(如无权访问该设备) |
| 30004 | 批量查询设备信息,最大20个 |
| 30005 | Access-token 失效,调用 init或者updateAccessToken 更新(updateAccessToken方法SDK 会自动重建 WebSocket 并恢复订阅) |
| 30006 | 该地址拒绝请求 |
| 30007 | 请求过于频繁 |
| 30008 | 参数无效 |
| 30009 | 参数为空 |
| 30010 | 参数范围无效 |
| 30011 | 请求时间戳过期 |
| 30012 | secret无效 |
| 30013 | 数据不存在 |
| 30014 | 授权code 无效 |
| 30015 | 系统繁忙 |
| 30016 | 数据操作失败 |
| 30017 | 数据已经存在 |
| 30018 | 验证码错误 |
| 30019 | 不能修改 |
| 30022 | 客户端ip被限制 |
| 40001 | 设备不在线 |
| 40002 | 设备不存在 |
| 40003 | 设备网不存在 |
| 40004 | 设备id不能为空 |
| 40005 | 网关id不能为空 |
| 40006 | 用户不存在 |
| 40007 | app_code不存在 |
| 40008 | 用户名和密码错误 |
| 40009 | 房间不存在 |
| 40010 | 家庭不存在 |
| 40011 | 家庭成员不存在 |
| 40012 | ip查询城市失败 |
| 40013 | 没有配置模板 |
| 40014 | 短信或者邮件配置错误 |
| 40015 | 无对应的升级任务 |
| 40016 | 等待其他设备升级 |
| 40017 | 设备未启用 |
| 40018 | 设备已离线 |
其余的错误码请参考uni-app官方蓝牙相关接口错误码
注意事项
- 使用蓝牙功能时需要注意:
- Android 平台:android6.0+,需要打开蓝牙,打开位置开关,需要授权微信访问位置的权限,部分手机甚至要打开 GPS
- ios 平台:需要打开系统蓝牙,打开控制中心蓝牙,ios13+需要给微信蓝牙分享的权限
- WiFi配网注意事项:
- 需要确保设备处于配网模式
- 配网过程中,部分设备会在回调中上报错误信息,但设备还会继续尝试配网,直到成功或超时,可根据业务需求处理
- Socket / accessToken 注意事项(交互示意见交互流程):
- 首次
init不会连接 WebSocket,需调用connectSocket()后再subscribeDevice - 订阅会自动取消上一次订阅,订阅时请订阅所有需要的设备
- 订阅后才能收到设备消息
accessToken与设备列表存在绑定关系,详见云云对接文档:获取 / 更新 accessTokenhttps://help.uascent-iot.com/marsgate/iot-doc-manage/doc-wiki#/page/share/view?pageId=361&space=2e0a8b9ba9724208b432ee335ad19ada- accessToken 失效(如
errCode === 30005):业务侧通过云云对接重新获取accessToken后,调用updateAccessToken;若 WebSocket 已连接或上次因 Token 鉴权失败,SDK 会自动重建连接并恢复之前的订阅 - accessToken 绑定的设备列表发生变化(新增 / 移除设备等):
- 通过云云对接刷新该
accessToken绑定的设备列表(参考文档https://help.uascent-iot.com/marsgate/iot-doc-manage/doc-wiki#/page/share/view?pageId=361&space=2e0a8b9ba9724208b432ee335ad19ada) - 刷新成功后,若业务侧仍使用原
accessToken字符串,一般无需再调updateAccessToken(Token 值未变) - 是否重新订阅由业务自行决定:若订阅范围有变化,可调用
subscribeDevice传入最新设备列表;若设备减少且不再需要推送,也可unSubscribeDevice后按需再订阅
- 通过云云对接刷新该
- 收到
errCode === 30003(无权访问该设备)时:多为订阅了未绑定到当前accessToken的设备,请先确认云云侧设备列表已刷新,再按需调整订阅
- 首次
- 升级注意事项:
- 升级中和升级完成的设备不要重复调用升级接口
- 升级中需要处理设备离线的情况,离线时升级会失败
- 通过
onMessageChange可收到:firmwareInfo(设备上报固件信息)、upgrade(进度 / 成功 / 失败;type含义与getUpgradeInfo返回一致) upgrade.progress === 0表示升级成功(result: 'success');progress < 0表示失败;progress > 0表示进行中
- 蓝牙
extraProtocol注意事项:- 转换在全量
protocol解析完成后执行,函数第二参为完整data,可跨字段计算 - 返回非空派生对象后会删除源属性 key;返回空则保留源属性
- 与
extraDpInfo分工:extraProtocol用于上报解析,extraDpInfo用于下发值映射
- 转换在全量
- 通过设备获取周围WiFi列表
- 在设备支持的情况下,需要先连接设备蓝牙(调用connect),才能获取周围WiFi列表(调用searchWifi)
- 获取WiFi列表后,添加设备时,不需要断开蓝牙,直接调用添加设备(add)或者添加网络(addNetwork)即可

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 80
赞赏 0
下载 12566955
赞赏 1949
赞赏
京公网安备:11010802035340号