qcloud-iotexplorer-h5-panel-sdk
Advanced tools
Comparing version 1.2.8 to 1.2.9
{ | ||
"name": "qcloud-iotexplorer-h5-panel-sdk", | ||
"version": "1.2.8", | ||
"version": "1.2.9", | ||
"description": "", | ||
"main": "dist/release/qcloud-iotexplorer-h5-panel-sdk", | ||
"scripts": { | ||
"dev": "npx webpack --config webpack/webpack.config.js --env.mode=development --watch", | ||
"build": "npx webpack --config webpack/webpack.config.js --env.mode=production", | ||
"dev": "npx webpack --config webpack/webpack.config.js --mode=development --watch", | ||
"build": "npx webpack --config webpack/webpack.config.js --mode=production", | ||
"release": "sh ./bin/release.sh" | ||
}, | ||
"author": "xiaoyuze88", | ||
"files": [ | ||
"dist/release/qcloud-iotexplorer-h5-panel-sdk.37ae673064.js" | ||
], | ||
"author": "", | ||
"license": "MIT", | ||
@@ -13,0 +16,0 @@ "dependencies": { |
898
README.md
@@ -1,897 +0,21 @@ | ||
# (DEPRECATED) qcloud-iotexplorer-h5-panel-sdk | ||
# sdk 说明 | ||
腾讯连连小程序自定义H5面板SDK开发文档 | ||
## DEPRECATED | ||
## 开发说明 | ||
*为保证 sdk 的问题修复和特性更新的时效性,原 npm 引入模式已废弃,现 sdk 将直接挂载在 h5 面板页面的 window 对象上,可直接通过 `window.h5PanelSdk` 或通过 webpack 配置 externals 来访问 h5 sdk。* | ||
该项目 主要有两个目录 | ||
*该 npm 包后续仍可使用,但将不再维护,为保证能够及时获取最新 sdk 特性,建议改由全局变量获取 sdk 实例。* | ||
## 开始使用 | ||
(已废弃)~~npm i qcloud-iotexplorer-h5-panel-sdk~~ | ||
``` | ||
// 直接通过 window 访问 | ||
window.h5PanelSdk; | ||
// 或webpack配置 externals | ||
// webpack.config.js | ||
module.exports = { | ||
externals: { | ||
'qcloud-iotexplorer-h5-panel-sdk': 'h5PanelSdk', | ||
}, | ||
}; | ||
├── dist # 编译后文件 | ||
| | ||
├── src # 源码目录 | ||
├── qcloud-iotexplorer-h5-panel-sdk # h5 面板的 sdk | ||
└── wechat-jssdk # 微信h5的 jssdk | ||
``` | ||
## API | ||
### sdk.controlDeviceData: (data, deviceId?: string) => Promise | ||
## 构建发布 | ||
* data: any; | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
通过触发蓝盾流水线进行发布,流水线地址:http://devops.oa.com/console/pipeline/iotprivate/p-2af1831f8474406b91fdecfb0cd23250/edit | ||
控制设备属性,如: | ||
``` | ||
sdk.controlDeviceData({ | ||
power_switch: 1 | ||
}); | ||
``` | ||
### sdk.getDeviceDataHistory: (options) => Promise<{ RequestId: string, Context: string, FieldName: string, Listover: boolean, Results: any[] }> | ||
* options.FieldName: string; 查询的属性名称 | ||
* options.MaxTime: number; 结束时间,毫秒时间戳 | ||
* options.MinTime: number; 开始时间,毫秒时间戳 | ||
* options.Context?: string; 翻页游标,首次查询时,可不带 | ||
* options.Limit: number; 单页数据量 | ||
查询设备历史数据,具体用法参见: [AppGetDeviceDataHistory 接口文档](https://cloud.tencent.com/document/product/1081/43119) | ||
### sdk.getUserInfo() | ||
拉取用户信息,具体用法参考 AppGetUser 接口文档 | ||
### sdk.getProductInfo: ({ productId?: string }) => Promise<ProductInfo> | ||
* productId?: string; 可选,不传则使用当前产品 ProductId | ||
拉取设备所属产品信息,具体用法参考 AppGetProducts 接口文档 | ||
### sdk.getDeviceInfo: ({ deviceId?: string }) => Promise<DeviceInfo> | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
拉取设备信息 | ||
### sdk.getDeviceData: ({ deviceId?: string }) => Promise<any> | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
拉取设备最新的属性,具体用法参考 AppGetDeviceData 接口文档 | ||
### sdk.getDeviceStatus: ({ deviceId?: string }) => Promise<0 | 1> | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
拉取设备当前在线状态,0 - 离线,1 - 在线 | ||
### sdk.deleteDevice: ({ deviceId?: string }) => Promise | ||
删除设备,deviceId可选,不传则使用当前设备deviceId | ||
### sdk.getShareParams({ deviceId?: string }) => Promise<any> | ||
若该设备是分享设备,且分享方设置了自定义分享参数,则被分享人在接受分享后可通过调用该接口获取自定义分享参数 | ||
### sdk.showDeviceDetail(options) => void; | ||
* options.deviceInfo?: Object; 展示详情的设备信息,不传则使用当前设备信息 | ||
* options.labelWidth?: number; 设备详情的label宽度,默认 110,单位 px | ||
* options.marginTop?: number; 设备详情的上间距,默认 10,单位 px | ||
* options.shareParams?: object | string; 自定义分享参数 | ||
* options.extendItems?: ExtendItemConfig[]; 自定义菜单配置 | ||
* options.extendItems.labelIcon?: string; 展示在 label 前的 icon 地址 | ||
* options.extendItems.label: string; 自定义菜单项的标题 | ||
* options.extendItems.content?: string; 自定义菜单项的内容 | ||
* options.extendItems.className?: string; 自定义菜单项的样式类名 | ||
* options.extendItems.onClick?: () => any; 点击自定义菜单项后触发的回调 | ||
* options.extendButtons?: ExtendButtonConfig[]; 自定义按钮配置 | ||
* options.extendButtons.text: string; 自定义按钮文案 | ||
* options.extendButtons.className?: string; 自定义按钮的样式类名 | ||
* options.extendButtons.type?: 'danger' | 'primary' | 'warning'; 自定义按钮的风格 | ||
* options.extendButtons.onClick: () => any; 自定义按钮点击后触发的回调 | ||
* options.containerClassName?: string; 容器的样式名 | ||
在当前 H5 展示一个铺满全屏的设备详情视图,支持自定义拓展菜单项及按钮。 | ||
### sdk.hideDeviceDetail() => void; | ||
关闭设备详情视图 | ||
### sdk.triggerVibrateShort(type?: 'heavy' | 'medium' | 'light'): Promise; | ||
触发一次小程序的短震动,参考:https://developers.weixin.qq.com/miniprogram/dev/api/device/vibrate/wx.vibrateShort.html#%E5%8F%82%E6%95%B0 | ||
### sdk.setTriggerVibrateShortFilter(filter: (property) => boolean, { vibrateShortType: 'heavy' | 'medium' | 'light' }) => void; | ||
设置需要触发震动的物模型filter,当调用 controlDeviceData 时,会将变换的所有属性的物模型依次调用 filter 函数,当 filter 返回 true 时则会触发一次震动,如: | ||
``` | ||
sdk.setTriggerVibrateShortFilter((property) => { | ||
// 当变更的属性的物模型类型是 bool 类型且 id = 'power_switch' 时,触发一次震动 | ||
return property.define.type === 'bool' && property.id === 'power_switch'; | ||
}, { vibrateShortType: 'heavy' }); | ||
``` | ||
### sdk.requestTokenApi: (action, data, options) => Promise | ||
* action: string 具体api名称,如:`AppGetUser` | ||
* data: object 接口调用参数 | ||
* options: 参数参考 [appDevSdk.requestApi 文档](https://github.com/tencentyun/qcloud-iotexplorer-appdev-miniprogram-sdk#sdkrequestapiaction-string-payload-object-options-object--promise-response-) | ||
### sdk.checkFirmwareUpgrade: ({ deviceId?: string, silent?: boolean }) => Promise<FirmwareUpgradeInfo> | ||
- deviceId?: string; 可选,不传则使用当前设备 deviceId | ||
- silent?: boolean; 静默检查固件升级,不弹出提示框,可选,默认为 false | ||
#### FirmwareUpgradeInfo.CurrentVersion: string | ||
设备当前固件版本 | ||
#### FirmwareUpgradeInfo.DstVersion: string | ||
固件可升级版本 | ||
### sdk.goDeviceDetailPage: (options) => void | ||
* options.reload?: boolean; 如果传了 reload=true,则进入详情页后会重新拉取一次该设备的数据 | ||
* options.deviceId?: string; 可选,不传则使用当前设备deviceId | ||
* options.isShareDevice?: boolean; 可选,设备是否分享设备,不传则使用当前 sdk.isShareDevice | ||
* options.shareParams?: object | string; 可选,设备自定义分享参数 | ||
跳转到腾讯连连通用的产品详情页(小程序页面) | ||
### sdk.goFeedBackPage() | ||
前往连连小程序反馈页面 | ||
### sdk.goDeviceInfoPage: ({ deviceId?: string }) => Promise | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
前往设备信息页 | ||
### sdk.goEditDeviceNamePage: ({ deviceId?: string, name?: string }) => Promise | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
* name?: string; 可选,不传则使用当前设备的aliasName | ||
前往修改设备名称页 | ||
### sdk.goRoomSettingPage: ({ deviceId?: string }) => Promise | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
前往房间设置页 | ||
### sdk.goShareDevicePage: ({ deviceId?: string, shareParams?: object | string }) => Promise | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
* shareParams?: object | string; 可选,自定义分享参数 | ||
前往设备分享页 | ||
### sdk.goFirmwareUpgradePage: ({ deviceId?: string }) => Promise | ||
* deviceId?: string; 可选,不传则使用当前设备deviceId | ||
前往固件升级页 | ||
### sdk.reloadAfterUnmount() | ||
退出当前h5页面返回连连小程序后,让小程序主动刷新一次当前数据。 | ||
### sdk.setShareConfig: ({ title, imgUrl }) => Promise | ||
* title: string 分享的标题 | ||
* imgUrl?: string 分享图片的地址,默认会取当前页面截图 | ||
设置当前页面的分享内容,通过 [wx.miniProgram.postMessage](https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html) 向小程序推送分享信息,具体参考 [小程序页面分享文档](https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object) | ||
### sdk.getSubDeviceList(): Promise<{ subDeviceList: DeviceInfo[]; syncFailList: DeviceInfo[] }>; | ||
拉取网关设备的子设备列表 | ||
### sdk.navBack: () => Promise | ||
调用 wx.miniProgram.navigateBack 返回上一级页面 | ||
### sdk.appDevSdk | ||
应用开发 SDK 实例,H5面板sdk底层依赖 [应用开发小程序端SDK](https://github.com/tencentyun/qcloud-iotexplorer-appdev-miniprogram-sdk#readme),更多调用能力请参考应用开发SDK文档 | ||
### sdk.wx | ||
微信 JS-SDK 实例,具体用法参考[官方文档](https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html),使用前必须保证已经调用 sdk.wxSdkReady 方法 | ||
### sdk.wxSdkReady: () => Promise | ||
确保微信 jssdk 已注册完成,完成后会触发 resolve,该方法多次调用,若成功会返回缓存的 Promise 对象,如: | ||
``` | ||
sdk.wxSdkReady().then(() => wx.miniProgram.navigateBack()); | ||
``` | ||
### sdk.on(EventName, callback) | ||
### sdk.off(EventName, callback) | ||
监听/解绑事件 | ||
#### 事件 | ||
##### Event: 'wsClose' | ||
* code: number; | ||
* reason: string; | ||
websocket 的 close 事件 | ||
##### Event: 'wsError' | ||
* error websocket的错误事件 | ||
websocket 的 error 事件 | ||
##### Event: 'wsControl' | ||
* deviceId 设备id | ||
* deviceData 设备数据 | ||
当 websocket 收到 `control` 指令后触发 | ||
##### Event: 'wsReport' | ||
* deviceId 设备id | ||
* deviceData 设备数据 | ||
当 websocket 收到 `report` 指令后触发 | ||
##### Event: 'wsStatusChange' | ||
* deviceId 设备id | ||
* deviceStatus: 0 | 1; 设备状态 | ||
当 websocket 收到 `wsStatusChange` 后触发 | ||
##### Event: 'appShow' | ||
当 App.onShow 执行后触发 | ||
##### Event: 'appHide' | ||
当 App.onHide 执行后触发 | ||
##### Event: 'pageShow' | ||
当 Page.onShow 执行后触发 | ||
##### Event: 'pageHide' | ||
当 Page.onHide 执行后触发 | ||
### (Deprecated) sdk.onWsClose: (callback) => void; | ||
**已废弃,请用 sdk.on('wsClose', callback) 代替** | ||
* callback: ({ code, reason }) => void; | ||
当 websocket close 事件触发后执行回调 | ||
### (Deprecated) sdk.onWsError: (callback) => void; | ||
**已废弃,请用 sdk.on('wsError', callback) 代替** | ||
* callback: (error) => void; | ||
当 websocket 触发 error 事件后触发回调 | ||
### (Deprecated) sdk.onWsControl: (callback) => void; | ||
**已废弃,请用 sdk.on('wsControl', callback) 代替** | ||
* callback: ({ deviceId, deviceData }) => void; | ||
当 websocket 收到 `control` 指令后触发 | ||
### (Deprecated) sdk.onWsReport: (callback) => void; | ||
**已废弃,请用 sdk.on('wsReport', callback) 代替** | ||
* callback: ({ deviceId, deviceData }) => void; | ||
当 websocket 收到 `report` 指令后触发 | ||
### (Deprecated) sdk.onWsStatusChange: (callback) => void; | ||
**已废弃,请用 sdk.on('wsStatusChange', callback) 代替** | ||
* callback: ({ deviceId, deviceStatus }) => void; | ||
当 websocket 收到设备状态改变推送后触发回调 | ||
### sdk.tips | ||
tips模块,样式和风格与连连小程序一致 | ||
#### sdk.tips.show: (message, options) => Promise | ||
* options.type?: 'info' | 'danger' | 'loading' | 'success'; | ||
* options.waitForHide?: boolean; 若为true,则 show 方法返回一个Promise,并且当关闭后才会触发 resolve | ||
* options.duration?: number; 展示提示的时间,单位毫秒,默认 1500 | ||
* options.delayDuration?: number; 默认0,单位毫秒,提示会在该延时后展示 | ||
* options.canClickClose?: boolean; 默认true,点击mask是否能够关闭提示 | ||
* options.canBeReplace?: boolean; 默认false,为false时上一个提示未关闭前,再次调用 tips.show会被忽略 | ||
展示tips | ||
#### sdk.tips.hide: () => Promise | ||
关闭tips | ||
#### sdk.tips.showLoading: (message, options) => Promise | ||
封装后的 tips.show 方法,等价于: | ||
``` | ||
this.show(message, { | ||
type: 'loading', | ||
canBeReplace: true, | ||
duration: 0, | ||
delayDuration: 200, | ||
canClickClose: false, | ||
...options, | ||
}) | ||
``` | ||
#### sdk.tips.hideLoading: () => Promise | ||
关闭loading tips | ||
> 注意,showLoading后必须主动调用hideLoading,否则tips永远不会消失 | ||
#### sdk.tips.showSuccess: (message, options) => Promise | ||
封装后的 tips.show 方法,等价于: | ||
``` | ||
this.show(message, { type: 'success', ...opts }); | ||
``` | ||
#### sdk.tips.showInfo: (message, options) => Promise | ||
封装后的 tips.show 方法,等价于: | ||
``` | ||
this.show(message, { type: 'info', ...options }); | ||
``` | ||
#### sdk.tips.showError: (error, options) => Promise | ||
* error: any; 可以为一个原生Error对象,可以为标准的api响应 { code, msg },也可以为一个字符串。 | ||
会先标准化处理错误展示信息后展示tips,等价于: | ||
#### sdk.tips.showModal: (options: ShowModalOptions) => Promise<boolean> | ||
* ShowModalOptions.title?: string; 弹窗标题 | ||
* ShowModalOptions.content? string; 弹窗内容 | ||
* ShowModalOptions.showCancel?: boolean; 是否展示取消按钮,默认为 true | ||
* ShowModalOptions.cancelText?: string; 取消按钮文案,默认:"取消" | ||
* ShowModalOptions.cancelColor?: string; 取消按钮颜色,默认:"#6c7078" | ||
* ShowModalOptions.confirmText?: string; 确认按钮文案,默认:"确定" | ||
* ShowModalOptions.confirmColor?: string; 确认按钮颜色,默认: "#0066ff" | ||
展示一个弹窗,参数、功能、样式同小程序原生 showModal 基本一致,返回一个 Promise<boolean>,为 true 代表用户点击确认,返回 false 表示用户点击取消。 | ||
#### sdk.tips.confirm: (title, content, options) => Promise<boolean> | ||
* title?: string; | ||
* content?: string; | ||
* options?: ShowModalOptions; | ||
基于 showModal 封装,用于向用户进行二次确认操作时使用,用法: | ||
``` | ||
const isConfirm = await sdk.tips.confirm('确认删除该设备吗?') | ||
if (isConfirm) { | ||
// do something | ||
} | ||
``` | ||
#### sdk.tips.alert: (content, options) => Promise<boolean> | ||
* content?: string; | ||
* options?: ShowModalOptions; | ||
基于 showModal 封装,用于向用户进行消息提示操作时使用,用法: | ||
``` | ||
await sdk.tips.alert('该功能暂时无法使用,请稍后再试'); | ||
// do something else | ||
``` | ||
### sdk.offlineTip | ||
设备离线提示组件,样式和风格与连连小程序一致 | ||
#### sdk.offlineTip.show: () => void; | ||
展示离线提示 | ||
#### sdk.showOfflineTip: () => void; | ||
用法同 sdk.offlineTip.show() | ||
#### sdk.offlineTip.hide: () => void; | ||
关闭离线提示 | ||
#### sdk.hideOfflineTip: () => void; | ||
用法同 sdk.offlineTip.hide() | ||
## 属性 | ||
### sdk.deviceId: string | ||
设备id,由 `{productId}/{deviceName}` 组成 | ||
### sdk.productId: string | ||
产品id | ||
### sdk.deviceName: string | ||
设备名称 | ||
### sdk.deviceInfo | ||
设备信息,如: | ||
``` | ||
{ | ||
AliasName: "设备别名", | ||
CreateTime: 1583739344, | ||
DeviceId: "{productId}/{deviceName}", | ||
DeviceName: "{deviceName}", | ||
DeviceType: 0, | ||
FamilyId: "家庭ID", | ||
IconUrl: "设备ICON", | ||
ProductId: "{productId}", | ||
RoomId: "房间id", | ||
UpdateTime: 1583739344, | ||
UserID: "用户Id" | ||
} | ||
``` | ||
### sdk.roomList | ||
当前家庭的房间列表 | ||
### sdk.roomName | ||
当前设备的房间名称 | ||
### sdk.dataTemplate | ||
设备所在产品的物模型,如: | ||
``` | ||
{ | ||
"version": "1.0", | ||
"profile": { | ||
"ProductId": "xxxx", | ||
"CategoryId": "1" | ||
}, | ||
"properties": [ | ||
{ | ||
"id": "int", | ||
"name": "int", | ||
"desc": "", | ||
"mode": "rw", | ||
"define": { | ||
"type": "int", | ||
"min": "0", | ||
"max": "100", | ||
"start": "0", | ||
"step": "1", | ||
"unit": "" | ||
}, | ||
"required": false | ||
}, | ||
], | ||
"events": [], | ||
"actions": [] | ||
} | ||
``` | ||
### sdk.deviceStatus: number | ||
设备在线状态,在线: 1,非在线: 0 | ||
### sdk.deviceDisplayName: string | ||
设备展示名称,会依次取:`AliasName > productInfo.name > deviceName` 来展示 | ||
### sdk.isShareDevice: boolean | ||
是否是分享设备 | ||
### sdk.familyId: string | ||
设备所在家庭id,如果是分享设备则无此值 | ||
### sdk.roomId: string; | ||
设备所在房间id,如果是分享设备则无此值 | ||
### sdk.familyInfo | ||
设备所在家庭详情,如果是分享设备则无此值 | ||
### sdk.isFamilyOwner: boolean | ||
用户是否是当前家庭的管理员 | ||
### sdk.userInfo | ||
用户信息,如: | ||
``` | ||
{ | ||
Avatar: "头像url", | ||
CountryCode: "国家代码", | ||
Email: "email", | ||
NickName: "昵称", | ||
PhoneNumber: "电话号码", | ||
UserID: "用户id" | ||
} | ||
``` | ||
## 蓝牙模块 | ||
由于h5中无法直接调用小程序蓝牙相关接口,sdk封装了特殊的蓝牙模块,通过一个单独的websocket通道打通了h5到小程序直接的蓝牙通信 | ||
### 名词介绍 | ||
介绍蓝牙模块中使用到的一些名词 | ||
#### serviceId | ||
服务id,蓝牙服务的uuid,搜索设备时主要通过 serviceId 来过滤我们需要的设备。 | ||
#### deviceId | ||
小程序api搜索出来的设备的标识,连接设备时主要通过 deviceId 来标识需要连接的设备 | ||
#### explorerDeviceId | ||
物联网开发平台侧定义的设备ID,查询设备数据和上报设备数据时以该 id 作为设备标识。 | ||
#### BlueToothAdapter 蓝牙适配器 | ||
全局单例,实例上声明了蓝牙搜索、连接等方法 | ||
#### DeviceAdapter 设备适配器 | ||
真正用来连接设备以及跟设备进行通信的模块,每一个设备连接对应一个设备适配器实例,设备适配器会在连接设备后实例化,并在设备断开连接后销毁。 | ||
根据不同的 serviceId 来区别不同类型设备的适配器构造函数。 | ||
### API | ||
#### sdk.blueToothAdapter | ||
#### sdk.blueToothAdapter.addAdapter: (DeviceAdapter) => void; | ||
添加一个设备适配器,默认无任何设备适配器,使用时需要根据具体设备情况创建一个设备适配器,并将其构造函数添加到蓝牙适配器中。 | ||
如: | ||
``` | ||
class DemoDeviceAdapter extends DeviceAdapter { | ||
static serviceId = '0000FFF0-0000-1000-8000-00805F9B34CC'; | ||
static deviceFilter(deviceInfo) { | ||
if (deviceInfo.advertisServiceUUIDs) { | ||
const matchedServiceId = deviceInfo.advertisServiceUUIDs.find(id => id === DemoDeviceAdapter.serviceId); | ||
if (matchedServiceId && deviceInfo.advertisData) { | ||
try { | ||
const macArr = deviceInfo.advertisData.slice(2); | ||
const mac = macArr.join(':'); | ||
return { | ||
...deviceInfo, | ||
deviceName: mac, | ||
serviceId: matchedServiceId, | ||
} | ||
} catch (err) { | ||
console.error('parse mac error', err); | ||
} | ||
} | ||
} | ||
} | ||
handleBLEMessage(hex) { | ||
return { | ||
type: 'unknown', | ||
data: hex, | ||
}; | ||
} | ||
} | ||
sdk.blueToothAdapter.addAdapter(DemoDeviceAdapter); | ||
``` | ||
#### sdk.blueToothAdapter.init() => Promise<void>; | ||
初始化蓝牙模块,包括初始化蓝牙模块,打通小程序间蓝牙通信,注册全局回调等。返回一个带缓存的Promise,可重复调用,可在每次使用前调用 | ||
#### sdk.blueToothAdapter.startSearch(startSearchParams) => Promise<void> | ||
开始搜索蓝牙设备(将会调用 wx.startBluetoothDevicesDiscovery,比较耗费系统资源,务必在不需要搜索后调用 blueToothAdapter.stopSearch,如离开页面后) | ||
该方法返回一个 Promise,注意务必要等待 Promise 响应 resolve 才代表操作指行成功。 | ||
##### startSearchParams.serviceId?: string; | ||
##### startSearchParams.serviceIds?: string[]; | ||
指定需要搜索的serviceId,不传的话会使用当前支持的所有 DeviceAdapter 的 serviceId 来匹配。 | ||
##### startSearchParams.ignoreDeviceIds?: string[] | ||
可选,需要过滤掉的 deviceId 列表(比如刚添加完的设备),搜索结果中将不会出现这些设备 | ||
##### startSearchParams.onSearch: (DeviceInfo[]) => void; | ||
当搜索结果更新后调用,返回搜索到的设备列表 | ||
##### startSearchParams.onError: (Error) => void; | ||
当搜索过程中发生错误后调用,触发后设备搜索将会中止 | ||
##### startSearchParams.timeout: number | ||
可选,默认 20000,单位毫秒,超过多久没搜索到设备后将会触发超时错误 | ||
#### blueToothAdapter.stopSearch() => void; | ||
停止搜索设备 | ||
#### [DEPRECATED] blueToothAdapter.searchDevice(searchDeviceParams) => Promise<DeviceInfo> | ||
[DEPRECATED] 请使用 blueToothAdapter.searchAndConnectDevice 方法代替 searchDevice + connectDevice 的流程 | ||
搜索蓝牙设备,并将在找到第一个满足条件的设备后 resolve,与 startSearch 的区别在于 searchDevice 在搜到第一个匹配设备后即会中止搜索。 该方法常用于已经绑定过设备后,在连接设备时来定向搜索该设备。 | ||
##### startSearchParams.serviceId?: string; | ||
##### startSearchParams.serviceIds?: string[]; | ||
指定需要搜索的serviceId,不传的话会使用当前支持的所有 DeviceAdapter 的 serviceId 来匹配。 | ||
##### searchDeviceParams.deviceName | ||
指定需要搜索的设备 deviceName | ||
##### searchDeviceParams.productId | ||
指定需要搜索设备的 productId | ||
##### searchDeviceParams.ignoreDeviceIds | ||
指定需要忽略的设备 deviceId(微信搜索设备返回的deviceId,非explorerDeviceId) | ||
##### searchDeviceParams.timeout | ||
搜索超时时间,单位毫秒,默认 5000 | ||
##### searchDeviceParams.extendInfo | ||
拓展参数,可以在搜索时调用 DeviceAdapter 实例的 deviceFilter 时拿到 | ||
##### searchDeviceParams.ignoreCache | ||
忽略缓存,默认 false,开启缓存后已经连过的设备在本机默认不会再次搜索,而会尝试直连 | ||
##### searchDeviceParams.ignoreDeviceIds | ||
同 startSearchParams.ignoreDeviceIds | ||
#### blueToothAdapter.connectDevice(DeviceInfo, options?: { autoNotify?: boolean }) => Promise<deviceAdapter> | ||
* options.autoNotify; 可选,默认为 true。指定为 true时,在连接设备后,会自动去拉取服务列表,以及主服务下的特征值列表,并会自动订阅第一个 notifyId 或 indicateId 特征值的 notify。若设备含有多个服务或多个 notify 特征值,请传 false,并自行通过 getBLEDeviceServices、getBLEDeviceCharacteristics、notifyBLECharacteristicValueChange等方法获取及订阅特征值。 | ||
连接指定设备,传入 searchDevice 或 startSearch 接口搜索出来的 DeviceInfo,连接成功后返回设备适配器 | ||
#### blueToothAdapter.getDeviceAdapter(deviceId) => deviceAdapter | ||
根据 deviceId 查询对应的设备适配器实例,如果设备未连接或已断开,则返回空 | ||
#### blueToothAdapter.reportDeviceInfo({ productId: string, deviceName: string, deviceInfo: any }); | ||
上报设备信息,deviceInfo参考代码: | ||
``` | ||
deviceInfo: { | ||
"module_hardinfo": "模组具体硬件型号 N10", | ||
"module_softinfo": "模组软件版本", | ||
"fw_ver": "mcu固件版本", | ||
"imei": "设备imei号,可选上报", | ||
"mac": "设备mac地址,可选上报", | ||
"device_label": { | ||
"append_info": "设备商自定义的产品附加信息" | ||
} | ||
``` | ||
#### 事件 | ||
##### blueToothAdapter.on('adapterStateChange', ({ available, discovering }) => {}) | ||
当适配器状态变化时触发。 | ||
### DeviceAdapter | ||
设备适配器构造函数 | ||
#### DeviceAdapter.serviceId | ||
子类在继承基类后需要设置该属性,代表该设备的主服务ID | ||
#### DeviceAdapter.deviceFilter: (deviceInfo: DeviceInfo) => { deviceName: string, serviceId: string, ...deviceInfo } | ||
子类在继承基类后需要实现该静态方法,在搜索蓝牙设备时会将每个搜出的设备信息传入该方法,如果判断是本产品的设备,则需在除入参deviceInfo之外返回设备唯一标识 deviceName 及 serviceId,否则返回空; | ||
### deviceAdapter | ||
设备适配器 | ||
#### deviceAdapter.explorerDeviceId | ||
getter,设备的 explorerDeviceId | ||
#### deviceAdapter.isConnected | ||
getter,设备当前是否连接状态 | ||
#### deviceAdapter.deviceId | ||
getter,设备的 deviceId | ||
#### deviceAdapter.serviceId | ||
getter,设备的主服务ID,实际上既是挂在构造函数上的静态属性 DeviceAdapter.serviceId | ||
#### deviceAdapter.originName | ||
getter,设备的原始名称,即小程序接口搜索出来时的 name 字段 | ||
#### deviceAdapter.explorerDeviceId | ||
getter,设备的 explorerDeviceId | ||
#### deviceAdapter.disconnectDevice() => void | ||
主动断开设备连接 | ||
#### deviceAdapter.getBLEDeviceServices() => Promise<serviceList> | ||
拉取设备的服务列表 | ||
#### deviceAdapter.getBLEDeviceCharacteristics({ serviceId }) => Promise<characteristicsList> | ||
* serviceId?: string; 可选,默认为主服务id | ||
拉取设备某服务的特征值列表,并会将特征值按照如下数据结构存放在 deviceAdapter实例上: | ||
``` | ||
deviceAdapter.characteristicsMap[serviceId] = { | ||
notifyIds: string[]; | ||
indicateIds: string[]; | ||
writeIds: string[]; | ||
readIds: string[]; | ||
} | ||
``` | ||
#### deviceAdapter.readBLECharacteristicValue({ serviceId, characteristicId }); | ||
* serviceId?: string; 可选,默认为主服务id | ||
* characteristicId: string; 需要读取的特征值id,默认会取主服务下的第一个read特征值 | ||
接口读取到的信息需要在 onBLECharacteristicValueChange 方法注册的回调中获取。具体参考[官方文档](https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.readBLECharacteristicValue.html)。 | ||
#### deviceAdapter.getBLEDeviceRSSI() | ||
获取蓝牙设备的信号强度。 | ||
#### deviceAdapter.notifyBLECharacteristicValueChange({ characteristicId?: string; serviceId?: string; state?: boolean }) => Promise<void> | ||
* serviceId: string; 需要订阅的服务id,默认会取主服务id | ||
* characteristicId: string; 需要订阅的特征值id,默认会取主服务下的第一个notify或indicate特征值 | ||
* state: boolean; 是否启用 notify,默认为 true | ||
#### deviceAdapter.write: (hexString, options?: { writeId?: string; serviceId?: string }) => Promise | ||
* hexString: string; 需要写给蓝牙设备的16进制字符串 | ||
* options.writeId; 可选,需要写入的特征值id,默认会取主服务下的第一个writeId | ||
* options.serviceId; 可选,需要写入的服务id,默认会取主服务id | ||
往蓝牙设备写数据。 | ||
#### deviceAdapter.handleBLEMessage: (hexString, { serviceId, characteristicId }) => { reportData?: any, ...any } | ||
子类继承基类后需要实现该方法,用于处理收到 onBLECharacteristicValueChange 回调后的协议解析。 | ||
返回值中如果返回 reportData,则会将该部分数据上报到云端(注意需与产品定义物模型匹配),其他字段则会透传到 `message` 事件的 payload 中。 | ||
#### deviceAdapter 事件 | ||
##### Event: 'connect' | ||
设备连接后触发 | ||
##### Event: 'disconnect' | ||
设备断开后触发 | ||
##### Event: 'message' | ||
* timestamp: number; 收到设备消息的时间戳,单位毫秒 | ||
* dataReported: boolean; 收到设备的消息是否已上报云端 | ||
* 其他; handleBLEMessage 函数返回的其他参数将会透传到 message 事件中 | ||
当收到 onBLECharacteristicValueChange 回调,并经过 handleBLEMessage 处理后触发 | ||
##### Event: 'bLEConnectionStateChange' | ||
* connected: boolean; 设备是否连接 | ||
当 onBleConnectionStateChange 触发时触发,若 connected 为 true,则接下来会触发事件 'connect',否则会触发事件 'disconnect' | ||
### 标准蓝牙adapter新增的功能 | ||
从`blueToothAdapter.getDeviceAdapter(deviceId) => deviceAdapter`中获取到标准蓝牙的设备适配器 | ||
#### deviceAdapter.reconnectDevice({ deviceName: string }) => void | ||
首次绑定之后,重新连接蓝牙设备,这个过程中,涉及到设备端和手机端的双向认证 | ||
#### deviceAdapter.unbindDevice({ familyId: string, deviceName: string }) => void | ||
在跟云端解绑设备之前需要跟设备端交互解绑协议,此过程会清除设备端的鉴权信息 | ||
#### deviceAdapter.controlDevice({ deviceData: Object }) => void | ||
手机端控制设备 | ||
#### deviceAdapter.controlAction({ actionData }) => void | ||
手机端行为调用 | ||
#### deviceAdapter.startListenLLEvents() | ||
监听云端事件,从而进行设备端的数据交互 | ||
### 设备分享时设置自定义分享参数 | ||
1. 前往设备详情/分享列表页时,带上 shareParams 参数 | ||
2. 被分享人接受分享后,可通过调用 sdk.getShareParams() 方法获取分享时设置的 shareParams 参数 | ||
# CHANGELOG | ||
### v1.2.5(2021.1.14) | ||
* 支持在腾讯连连 APP 环境中调用以下方法 | ||
* sdk.goDeviceDetailPage | ||
* sdk.goFeedBackPage | ||
* sdk.goDeviceInfoPage | ||
* sdk.goEditDeviceNamePage | ||
* sdk.goRoomSettingPage | ||
* sdk.goShareDevicePage | ||
* sdk.navBack | ||
* sdk.reloadAfterUnmount | ||
* sdk.setShareConfig | ||
* 注意:运行于腾讯连连 APP 环境的 H5 面板不支持调用微信 JSSDK。在腾讯连连 APP 环境,sdk.wxSdkReady 返回一个 rejected 的 Promise | ||
### v1.2.1(2020.12.18) | ||
* 优化蓝牙模块,增加已连接蓝牙设备缓存deviceId特性,增加断开后不清理deviceAdapter特性 | ||
* 增加 searchAndConnect 方法,自动处理尝试缓存及缓存失效后重搜逻辑 | ||
### v1.1.22(2020.12.16) | ||
* 完善文档:setBLEMTU | ||
### v1.1.21(2020.11.18) | ||
* 支持标准蓝牙协议的设备搜索,设备绑定,设备控制,设备属性/事件上报,设备行为调用等功能 | ||
### v1.1.20(2020.11.17) | ||
* 升级 appdev-sdk,修复 token 失效后可能导致死循环问题 | ||
### v1.1.19(2020.9.23) | ||
* 蓝牙支持多服务、多特征值订阅,调整特征值内部储存方式; | ||
* 蓝牙暴露 getBLEDeviceServices、getBLEDeviceCharacteristics、notifyBLECharacteristicValueChange 方法; | ||
* 蓝牙 write 方法支持指定服务id及特征值id | ||
* connectDevice 支持不自动处理订阅特征值notify | ||
* 增加readBLECharacteristicValue、getBLEDeviceRSSI 方法 | ||
* 修复固件升级功能 checkFirmwareUpgrade 方法通过参数传入 deviceId 时,设备在线状态判断有误的问题 | ||
* 修复蓝牙搜索页面 sdk.productId 值为空的问题 | ||
* 适配 H5 面板新样式风格 | ||
### v1.1.18(2020.9.21) | ||
* 增加固件升级功能 | ||
### v1.1.16(2020.7.10) | ||
* 修复设备收到 report 推送时会抛出错误问题 | ||
* 修复蓝牙未正常断开后重新调用 createBLEConnection 会抛出 already connect 错误问题 | ||
### v1.1.15(2020.7.8) | ||
* 修复蓝牙事件未触发问题 | ||
### v1.1.11(2020.6.24) | ||
* sdk 增加 eventEmitter 能力,原 sdk.onWsClose 等方法增加 sdk.on('wsClose') 等监听事件方法 | ||
* sdk 增加 appShow/appHide/pageShow/pageHide 等四个事件 | ||
### v1.1.10(2020.6.19) | ||
* 修复蓝牙发现页无设备id导致js报错问题 | ||
### v1.1.9(2020.6.17) | ||
* 增加分享设备可以带上自定义参数特性 | ||
### v1.1.8(2020.6.16) | ||
* getDeviceData等若干方法支持传入 deviceId 等参数来指定需要获取数据的设备 | ||
* sdk 增加暴露当前家庭下的房间列表 roomList 属性 | ||
* 修复文档若干错误及遗漏 | ||
### v1.1.6(2020.6.15) | ||
* 离线tips和设备详情页面 .btn 类名加上命名空间 | ||
### v1.1.5(2020.6.12) | ||
* sdk.tips 增加 showModal/confirm/alert 方法 | ||
* 增加 sdk.themeColorMap,内置了连连默认的几种风格的色值 | ||
* 增加 sdk.goDeviceInfoPage 方法,跳转小程序设备信息页 | ||
* 增加 sdk.goEditDeviceNamePage 方法,跳转小程序设置设备名称页 | ||
* 增加 sdk.goRoomSettingPage 方法,跳转小程序设置设备房间页 | ||
* 增加 sdk.goShareDevicePage 方法,跳转小程序分享设备页 | ||
* 增加 sdk.deleteDevice 方法,可在h5内删除当前设备 | ||
* 增加 sdk.showDeviceDetail 方法,在当前h5展示一个铺满全屏的设备详情界面,支持自定义菜单项 | ||
自动将静态资源上传到CDN |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Trivial Package
Supply chain riskPackages less than 10 lines of code are easily copied into your own project and may not warrant the additional supply chain risk of an external dependency.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
483203
1
2
22
3