sg-ble-next v1.0.2
乐心蓝牙设备小程序插件接入指南
版本更新日志
1.0.1
- 增加stopBluetoothDevicesDiscovery与startBluetoothDevicesDiscovery方法,用于如果有多个蓝牙sdk的时候可能产生冲突的情况
1.0.0
- 完成小程序插件的接入
1 插件使用说明
1.1 插件声明
在app.json中声明插件的引用及小程序的appId:wxe3d2a6ab8dd5b49b,此时如果你之前没有使用过该插件,则会在console中报错“插件未授权 添加插件”
{
"plugins": {
"lzbluetooth": {
"version": "{{最新版本}}",
"provider": "wxe3d2a6ab8dd5b49b"
}
}
}1.2 插件引入
const lsPlugin = requirePlugin("lzbluetooth");1.3 插件初始化
plugin.init({
//用邮件乐心分配的appId替换掉下面字符串
appId: "你申请的appkey",
logger: null,
onBluetoothDeviceFound: privateOnBluetoothDeviceFound,
onBLECharacteristicValueChange: privateOnBLECharacteristicValueChange,
onBLEConnectionStateChange: privateOnBLEConnectionStateChange,
onBluetoothAdapterStateChange: privateOnBluetoothAdapterStateChange,
<<<<<<< HEAD
=======
stopBluetoothDevicesDiscovery: privateStopBluetoothDevicesDiscovery,
startBluetoothDevicesDiscovery: privateStartBluetoothDevicesDiscovery,
>>>>>>> 1.0.13.plugin
});请求参数:
| 属性 | 类型 | 是否必要 | 说明 |
|---|---|---|---|
| appId | string | 是 | 搜索到的设备对象的回调 |
| logger | obj | 否 | 日志打印器,需要实现console的一些打印的方法, |
| onBluetoothDeviceFound | func | 否 | 微信发现设备的回调方法,默认使用wx.onBluetoothDeviceFound,如果该方法在其他地方有使用,则需要你自己去避免冲突 |
| onBLECharacteristicValueChange | func | 否 | 微信设备特征之的回调, 默认使用wx.onBLECharacteristicValueChange, 如果该方法在其他地方有使用,则需要你自己去避免冲突 |
| onBLEConnectionStateChange | func | 否 | 微信连接回调,默认使用wx.onBLEConnectionStateChange,如果该方法在其他地方有使用,则需要你自己去避免冲突 |
| onBluetoothAdapterStateChange | func | 否 | 微信蓝牙开关回调,默认使用wx.onBluetoothAdapterStateChange,如果该方法在其他地方有使用,则需要你自己去避免冲突 |
<<<<<<< HEAD
| stopBluetoothDevicesDiscovery | func | 否 | 微信蓝牙设备结束扫描,默认使用wx.stopBluetoothDevicesDiscovery,如果该方法在其他地方有使用,则需要你自己去避免冲突 | | startBluetoothDevicesDiscovery | func | 否 | 微信蓝牙开始扫描,默认使用wx.startBluetoothDevicesDiscovery,如果该方法在其他地方有使用,则需要你自己去避免冲突 |
1.0.13.plugin | appKey | string | 否 | 与appId一致,只有在使用UI的时候需要 | | tenantName | string | 否 | 租户名称,只有在使用UI的时候需要 | | tenantId | number | 否 | 租户id,只有在使用UI的时候需要 | | subscriptionId | number | 否 | 订阅id,只有在使用UI的时候需要 | | associatedId | string | 否 | 第三方关联userId,只有在使用UI的时候需要 | | debug | boolean | 否 | 订打开H5的vconsole,只有在使用UI的时候需要 | | env | string | 否 | 接口环境:beta测试,online生产,只有在使用UI的时候需要 |
2 设备相关
2.1 搜索&发现设备
蓝牙设备在绑定前,需要先通过扫描获得需要绑定的设备信息,
首先需要调用startScanning接口获取device对象,
您可能需要自己去判断释放有重复的蓝牙设备信号上报并做过滤,在实际应用过程中,
您可能需要经过多个扫描周期才能获得蓝牙搜索结果,调用示例:
// 开始扫描设备
plugin.startScanning(device => {
// 将扫描到的设备保存,具体参数参考具体接口
scanResults.push(device);
// 刷新UI
this.setData({
scanResults
})
}) 请求参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| callback(device) | func | 搜索到的设备对象的回调 |
device 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| name | String | 蓝牙设备名称,某些设备可能没有 |
| localName | String | 设当前蓝牙设备的广播数据段中的 LocalName 数据段 |
| deviceId | string | 用于区分设备的id,安卓为mac地址,IOS为系统分配的唯一ID |
| RSSI | number | 当前蓝牙设备的信号强度 |
| serviceData | object | 当前蓝牙设备的广播数据段中的 ServiceData 数据段 |
| mac | String | 设备mac地址 |
| battery | number | 电量 |
| lzDeviceId | string | 乐心id,只有乐心的设备才有 |
| manufacture | string | 厂商 |
| model | string | 型号 |
| softwareVersion | string | 软件版本 |
| hardwareVersion | string | 硬件版本 |
| firmwareVersion | string | 固件版本 |
| protoName | string | 协议名称 |
| sn | string | sn |
| connectStatus | ConnectionState | 连接状态 |
2.2 停止搜索
强制中断蓝牙搜索,执行搜索过程中中断搜索或页面销毁时,请务必调用停止搜索接口,否则会影响正常的连接流程:
// 关闭搜索
plugin.stopScanning();2.3 绑定设备
搜索完成后, 向用户展示搜索到的设备列表信息, 用户选择目标设备后, 进行设备绑定操作(绑定设备是为了获取你选择设备的信息, 绑定不是必须的,如果您知道用户当前使用的设备信息, 可以不经过绑定直接调用plugin.addMonitorDevice去连接设备并同步数据)调用示例:
// 用户选择某个设备绑定
// 如果是安卓设备,则需要判断位置是否可用,位置权限是否可用 let { locationEnabled, locationAuthorized } = wx.getSystemInfoSync();
plugin.bindDevice({
mac: mac,
callback: res => {
// 绑定结果
let mac = res.mac;
let bindState = res.bindState;
/// 只有在绑定错误的时候才有错误码
let errorCode = res.errorCode;
}
}); 请求参数:Object object
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 绑定设备的mac |
callback(res) | func | 绑定设备的回调 |
res 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 绑定设备的mac |
| bindState | number | 绑定设备的状态 |
| deviceInfo | Object | 设备信息 |
| errorCode | number | 绑定失败的错误码 |
res.bindState 的可能值
| 枚举 | 值 | 说明 |
|---|---|---|
| InputRandomNumber | 0 | 输入随机数 (手环专用) |
| Successful | 4 | 绑定成功 |
| Failure | 5 | 绑定失败 |
res.errorCode 的可能值
| 枚举 | 值 | 说明 |
|---|---|---|
| success | 0 | 成功 |
| disconnect | 1 | 未连接 |
| nocharactor | 2 | 没有特征服务 |
| timeout | 3 | 超时 |
| discard | 4 | 丢弃 |
| ackError | 5 | ack错误 |
| bluetoothError | 6 | 蓝牙错误 |
| workBusy | 7 | 工作繁忙 |
| fileUnsupported | 8 | 文件错误 |
| lowBattery | 9 | 低电量 |
| unsupported | 10 | 不支持的类型 |
| authorizeError | 11 | 授权失败 |
| notfind | 12 | 未找到设备 |
| cancelBind | 13 | 取消绑定 |
| alreadyBinded | 14 | 用户已绑定 |
| paramsError | 15 | 参数错误 |
| noMem | 16 | 没有内存 |
| tooBig | 17 | 文件太大 |
| notInit | 18 | 没有初始化 |
| notFind | 19 | 未找到设备 |
| notUserLocation | 20 | 定位权限未开 |
| blueNotAvailible | 21 | 蓝牙授权未开 |
res.deviceInfo的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| deviceId | String | 设备的广播id |
| model | string | 设备的型号 |
| lzDeviceId | string | id(内部使用的id) |
| sn | string | 一般对用户可见(比如手环在表带上) |
| hardwareVersion | string | 硬件版本 |
| firmwareVersion | string | 固件版本 |
| softwareVersion | string | 软件版本 |
| manufacture | string | 厂家名字 |
| battery | number | 电量 |
2.4 取消绑定
当前状态是正在绑定的页面,此时退出绑定页面,则需要需要绑定 调用示例:
// 取消绑定
plugin.cancelBind({ mac });请求参数:Object object
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 设备的mac |
2.5 添加用户已经绑定的设备
用户打开app时, 若之前已经绑定过设备, 需要将已经绑定的设备的mac地址添加到sdk, sdk会自动连接设备,建议您将用户和设备的绑定关系持久化在云端, sdk初始化成功之后立即添加mac地址到sdk, 调用示例:
/// 添加监听
// 如果是安卓设备,则需要判断位置是否可用,位置权限是否可用 let { locationEnabled, locationAuthorized } = wx.getSystemInfoSync();
plugin.addMonitorDevice({
mac: this.data.mac,
model: this.data.model,
})
// 替换目前已监听的
plugin.setMonitroDevice({
mac: this.data.mac,
model: this.data.model,
})请求参数:Object object | Object object[]
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 绑定设备的mac |
| model | String | 设备型号 |
2.6 删除用户正在连接或者同步的设备
当用户需要解除监听设备或正在绑定中断绑定时,解绑后会删除SDK中的缓存的设备信息并断开蓝牙连接,建议您在解绑成功后,清除您App本地或者云端存储的设备信息,并删除和用户的绑定关系, 调用示例:
/// 删除某个正在监听的设备
plugin.deleteMonitorDevice({
mac: this.data.mac,
})
// 删除全部正在监听的设备
plugin.deleteAllMonitorDevice({
mac: this.data.mac,
model: this.data.model,
})2.7 设备状态的获取
如果你想获取某个设备的连接状态,可以通过getConnectionState方法获取,如果你想蓝牙的可用状态可以调用isBluetoothAvailable判断是否可用,调用示例:
// 当前蓝牙是否可用
let bluetoothAvalible = plugin.isBluetoothAvailable();
// mac 设备的唯一标识
let state = plugin.getConnectionState({mac}});请求参数:Object object
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 设备的mac |
返回值:number state
| 枚举 | 值 | 说明 |
|---|---|---|
| None | 0 | 初始状态 |
| Scan | 1 | 扫描中 |
| Connecting | 2 | 连接中 |
| Connected | 3 | 蓝牙连接成功,还没有启动数据同步 |
| Worked | 4 | 已经启动数据同步,这是才能进行收数据,推送设置项等 |
| Disconnected | 5 | 设备主动断开了连接,或者系统断开了连接 |
2.8 设备数据或状态的监听
如果你想监听手机蓝牙是否开启,设备的连接状态,及设备同步过来的数据,则可以使用 plugin.$on 监听某个事件,目前支持三个事件
1. 手机蓝牙的开关 eventName = "adaptorState",
2. 蓝牙设备的连接状态 eventName = "connectionState",
3. 蓝牙设备发送给小程序的数据 eventName = "dataReport"
事件是通过 eventKey,同一事件的同一eventKey 回调会被覆盖
取消监听则使用 plugin.$off 参数
调用示例:
// 监听蓝牙是否可用
plugin.$on({
eventName: "adaptorState",
eventKey: "wo", // 唯一标识,同一标识的监听会被覆盖
callback: res => {
// 蓝牙是否可用
let bluetoothAvalible = res.available
},
});
// 监听设备的连接状态
plugin.$on({
eventName: "connectionState",
eventKey: 'wo', // 唯一标识,同一标识的监听会被覆盖
callback: (mac, state) => {
// 设备mac,连接状态, 参考2.7 的连接状态
},
});
// 监听数据上报
plugin.$on({
eventName: "dataReport",
eventKey: 'wo', // 唯一标识,同一标识的监听会被覆盖
callback: (device, data) => {
// 设备信息, 数据信息
// 一般mac用来设备设备
let mac = device.mac;
// dataType 识别数据类型
let dataType = data.dataType;
},
});
// 取消监听
plugin.$off({
eventname: "adaptorState",
eventKey: "wo"
})
plugin.$off({
eventname: "connectionState",
eventKey: "wo"
})
plugin.$off({
eventname: "dataReport",
eventKey: "wo"
})3 设置项
小程序向设备发送指令都是通过pushSetting
包括手环绑定时候输入随机码,蓝牙配网的时候 发送扫描指令, 发送wifi连接指令,以及一些手设备的设置项等等
小程序向设备获取设置项都是通过getSetting
调用示例:
// 生产设置项的对象
let settingFactory = plugin.settingFactory;
let scanWifiSetting = new settingFactory.ScanWifiReq();
plugin.pushSetting({
mac: mac,
setting: scanWifiSetting
}).then((value) => {
console.info('发送指令获取wifi列表', value)
}).catch(resp => {
wx.showToast({ title: "设置失败,请重试", icon: "none", duration: 3000 });
});
// 获取设置项
plugin.getSetting({
mac: mac,
settingType: settingType
}).then(resp => {
console.warn('获取设置项成功', resp);
}).catch(resp => {
wx.showToast({ title: "获取设置失败,请重试", icon: "none", duration: 1000 });
});设置项请求参数:Object object
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 设备的mac |
| setting | Object | 设置的对象,这个由 settingFactory 产生,不同的设置项,参数也不一样,具体参考各个设置项 |
获取设置项请求参数:
| 属性 | 类型 | 说明 |
|---|---|---|
| mac | String | 设备的mac |
| settingType | number | 这个是个枚举 参考 |
settingType 的取值
| 枚举 | 值 | 说明 |
|---|---|---|
| HeartRateWarningSetting | 0 | 心率设置 |
| SleepBloodOxygenSetting | 1 | 睡眠血氧检测开关 |
| SedentaryReminderSetting | 2 | 久坐提醒 |
| SleepReminderSetting | 3 | 睡眠提醒 |
| EventReminderSetting | 4 | 闹钟 |
| TimeFormatSetting | 5 | 24小时制 |
| DialTypeSetting | 6 | 表盘信息 |
| CustomPagesSetting | 7 | 自定义界面 |
| NightModeSetting | 8 | 夜间模式 |
| RightSwipDisplaySetting | 9 | 快捷屏幕 |
| SportHrWarnigSetting | 10 | 运动心率预警 |
catch的 resp 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| code | number | 错误码 是个枚举,参考 |
| msg | string? | 错误说明 |
| extra | any | 格外的一些参数 |
resp.code 的枚举
| 枚举 | 值 | 说明 |
|---|---|---|
| success | 0 | 成功 |
| disconnect | 1 | 未连接 |
| nocharactor | 2 | 没有特征服务 |
| timeout | 3 | 超时 |
| discard | 4 | 丢弃 |
| ackError | 5 | ack错误 |
| bluetoothError | 6 | 蓝牙错误 |
| workBusy | 7 | 工作繁忙 |
| fileUnsupported | 8 | 文件错误 |
| lowBattery | 9 | 低电量 |
| unsupported | 10 | 不支持的类型 |
| authorizeError | 11 | 授权失败 |
| notfind | 12 | 未找到设备 |
| cancelBind | 13 | 取消绑定 |
| alreadyBinded | 14 | 用户已绑定 |
| paramsError | 15 | 参数错误 |
| noMem | 16 | 没有内存 |
| tooBig | 17 | 文件太大 |
| notInit | 18 | 没有初始化 |
| notFind | 19 | 未找到设备 |
| notUserLocation | 20 | 定位权限未开 |
| blueNotAvailible | 21 | 蓝牙授权未开 |
settingFactory的方法列表
| 方法名 | 类型 | 说明 |
|---|---|---|
| A6HeartRateSetting | func | 体脂秤心率开关 参考 5.1.1(#5.1.1 体脂秤心率开关) |
| A6UnitSetting | func | 体脂秤单位设置 参考 5.1.2(#5.1.2 体脂秤单位设置) |
| ScanWifiReq | func | 扫描指令 参考 5.2.1(#5.2.1 扫描wifi) |
| ConnectWifiReq | func | 连接wifi指令 参考 5.2.2(#5.2.2 wifi数据) |
4 数据接收
当你监听了dataReport 事件的时候的回调, 一般通过dataType来判断数据是什么类型 下表为数据类型和实例对照表
| 类名 | dataType | 说明 |
|---|---|---|
| ApInfo | apInfo | wifi 列表数据 参考 4.2(#4.2 wifi数据) |
| ConfigStatus | configStatus | 配置wifi的结果 参考 4.5(#4.5 ConfigStatus的数据结构) |
| ScaleData | scale | 体重数据 参考 5.1(#5.1 体重数据结构ScaleData) |
| BPData | bloodpressure | 血压数据 参考 5.2(#5.2 血压数据结构BPData) |
| WifiInfo | wifiInfo | 当前蓝牙设备配对的wifi 参考 4.4(#4.4 WifiInfo的数据结构) |
5 体脂秤相关数据的发送与接收
5.1 体脂秤设置项
5.1.1 体脂秤心率的开关
控制体脂秤测量心率的开关
A6HeartRateSetting 的参数
| 属性 | 类型 | 说明 |
|---|---|---|
| enable | boolean | 开关心率 |
5.1.2 体脂秤单位设置
控制体脂秤单位的显示
A6UnitSetting 的参数
| 属性 | 类型 | 说明 |
|---|---|---|
| unit | number | 0表示kg 1和2 表示Lb 3表示斤 |
5.2 体脂秤蓝牙配网
蓝牙配网一般流程 1. 监听数据的接收 2. 向蓝牙设备发送扫描wifi指令 (扫描wifi这个动作是蓝牙设备完成的,因为手机不能扫描附近的wifi设备) 3. 通过监听的数据得到扫描到的wifi列表 4. 选中某个wifi 并输入密码, 然后向蓝牙设备发送指定wifi的连接指令 调用示例:
let settingFactory = plugin.settingFactory;
// 监听设备向小程序同步数据
plugin.$on("dataReport", "wifiConfig", (device, dataReport) => {
if (dataReport.dataType === 'apInfo' || dataReport.dataType === 'wifiInfo') {
// 这里收到的的是wifi数据
this.addApToUI(dataReport);
} else if (dataReport.dataType === 'configStatus') {
// 这里收到的是连接wifi的状态结果
// 需要注意的是只需要认第一个回调为准,因为有可能返回多个状态
//配网结果回包 0 success || fail reason code
wx.hideLoading();
console.log('ui配网结果:', dataReport, dataReport.status === 0);
if (dataReport.status === 0) {
this.showErrorBack('配置Wi-Fi成功');
} else {
this.showErrorBack('配置Wi-Fi失败');
}
}
});
let scanWifiSetting = new settingFactory.ScanWifiReq();
// 向设备发送搜索wifi指令
plugin.pushSetting({
mac: mac,
setting: scanWifiSetting
}).then((value) => {
console.info('发送指令获取wifi列表', value)
}).catch(_ => {
wx.showToast({ title: "设置失败,请重试", icon: "none", duration: 3000 });
});
// 选中某个wifi 并输入密码,然后向设备发送指令
let deviceSetting = new settingFactory.ConnectWifiReq({ bssid: this.data.selectAp.bssid, password: this.data.password });
let options = {
mac: this.data.mac,
setting: deviceSetting
};
pushSetting(options).then(res => {
// 这里只能说明发送成功,具体是否成功则需要看dataReport.dataType === 'configStatus'的结果
}).catch(_ => {
wx.showToast({ title: "设置失败,请重试", icon: "none", duration: 3000 });
});5.2.1 扫描wifi
小程序向体脂秤发起开始扫描指令,体脂秤自动发现附近可用并兼容的Wifi信息,然后回调给小程序。调用参考 4(#4 蓝牙配网) 中的调用示例.
数据类型 ScanWifiReq 没有参数
5.2.2 wifi数据
ApInfo的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| cmd | number | 指令,内部使用 |
| ssid | String | wifi名称 |
| bssid | String | wifi设备的mac |
| mode | String | Open (0), WEP (1), WPA_PSK (2), WPA2_PSK (3), WPA_WPA_2_PSK(4), WPA2_ENTERPRISE (5). |
| rssi | String | 信号强度 |
| connected | String | 是否连接 |
| dataType | String | 数据类型 这里固定为 apInfo |
5.2.3 配置wifi
App发送Wifi SSID和密码到设备, 设备自动进行Wifi的连接过程, 并将连接结果回调给APP
数据类型 ConnectWifiReq 参数如下:
| 属性 | 类型 | 说明 |
|---|---|---|
| bssid | String | 设备的mac |
| password | String | 输入的密码 |
5.2.4 WifiInfo的数据结构
这个数据是获取当前的配网信息的信息结果(获取配网信息目前没有暴露接口)
| 属性 | 类型 | 说明 |
|---|---|---|
| cmd | number | 指令,内部使用 |
| ssid | String | wifi名称 |
| bssid | String | wifi设备的mac |
| status | number | return success (0) or failed reason code (1) |
| rssi | number | 信号强度 |
| ip | String | ip地址 |
| dataType | String | 固定值为 wifiInfo |
5.2.5 ConfigStatus的数据结构
这个是连接wifi的结果的数据结果
| 属性 | 类型 | 说明 |
|---|---|---|
| cmd | number | 指令,内部使用 |
| status | number | eturn success (0) or failed reason code (1) |
| dataType | String | 固定值为 configStatus |
5.3 体制秤数据 ScaleData
| 属性 | 类型 | 说明 |
|---|---|---|
| remainCount | number | 剩余测量数据条数 |
| unit | number | 0=kg,1=lb,2=st,3=斤 |
| weight | number | 体重 (单位kg) |
| utc | number | utc |
| resistance | number | 电阻值 |
| userNumber | number | 用户编号 |
| timeZone | number | 时区 (缺失,使用当前系统的时区) |
| timeStamp | number | 测量时间 (请使用utc) |
| realtimeDataStatus | boolean | 实时测量数据状态 |
| heartRate | number | 心率 |
| dataType | String | 固定值为 scale |
6 血压计相关
6.1 血压数据结构BPData
| 属性 | 类型 | 说明 |
|---|---|---|
| remainCount | number | 剩余测量数据条数 |
| unit | number | 0=mmkg,1=Kpa (kpa目前没有使用) |
| systolic | number | 高压 |
| diastolic | number | 低压 |
| meanPressure | number | 平均值 |
| pulseRate | number | 心率 |
| utc | number | utc |
| resistance | number | 电阻值 |
| userId ` | number | 用户编号 | ||
| timeZone | number | 时区 (缺失,使用当前系统的时区) |
| timeStamp | number | 测量时间 (请使用utc) |
| bodyMovementDetection | boolean | 体动数据 |
| cuffFitDetection | boolean | 袖带检测数据 |
| irregularPulseDetection | boolean | 心率不齐信息 |
| pulseOut | boolean | 心率超量程 |
| dataType | String | 固定值为 bloodpressure |
7 手环相关
7.1 通用枚举
7.1.1 SportMode
SportMode 的取值
| 枚举 | 值 | 说明 |
|---|---|---|
| run | 1 | 跑步 |
| walk | 2 | 健走 |
| cycling | 3 | 骑行 |
| swimming | 4 | 游泳 |
| keepfit | 5 | 力量训练 (旧称 健身) |
| newRun | 6 | 新版跑步 |
| runInDoor | 7 | 室内跑(旧称 跑步机) |
| elliptical | 8 | 椭圆机 |
| aerobicworkout | 9 | 有氧运动 |
| basketball | 0x0a | 篮球 |
| football | 0x0b | 足球 |
| badminton | 0x0c | 羽毛球 |
| volleyball | 0x0d | 排球 |
| tableTennis | 0x0e | 乒乓球 |
| yoga | 0x0f | 瑜伽 |
| game | 0x10 | 电竞 |
| run12minutes | 0x11 | 12分钟跑 |
| walk6Minutes | 0x12 | 6分钟走 |
| gymDance | 0x13 | 健身舞 |
| taiji | 0x14 | 太极拳 |
| cricket | 0x15 | 板球 |
| rowingMachine | 0x16 | 划船机 |
| spinning | 0x17 | 动感单车 |
| cyclingInDoor | 0x18 | 室内骑行 |
| freeSport | 0x19 | 自由运动 |
| skippingRope | 0x1b | 跳绳 |
| mountaineering | 0x1c | 登山 |
| hockey | 0x1d | 曲棍球 |
| tennis | 0x1e | 网球 |
| hilt | 0x1f | HILT |
| walkIndoor | 0x20 | 室内步行 |
| ridingHorse | 0x21 | 骑马 |
| shuttlecock | 0x22 | 毽球 |
| boxing | 0x23 | 拳击 |
| suvs | 0x24 | 越野跑 |
| ski | 0x25 | 滑雪 |
| gymnastics | 0x26 | 体操 |
| icehockey | 0x27 | 冰球 |
| taekwondo | 0x28 | 跆拳道 |
| walkingMachine | 0x29 | 漫步机 |
| onFoot | 0x2a | 徒步 |
| dance | 0x2b | 跳舞 |
| Athletics | 0x2c | 田径 |
| LumbarAbdomenTraining | 0x2d | 腰腹训练 |
| karate | 0x2e | 空手道 |
| overallRelaxation | 0x2f | 整体放松 |
| CrossTraining | 0x30 | 交叉训练 |
| Pilates | 0x31 | 普拉提 |
| crossMatch | 0x32 | 交叉配合 |
| FunctionalTraining | 0x33 | 功能性训练 |
| PhysicalRraining | 0x34 | 体能训练 |
| archery | 0x35 | 射箭 |
| flexibility | 0x36 | 柔韧度 |
| MixedAerobic | 0x37 | 混合有氧 |
| LatinDance | 0x38 | 拉丁舞 |
| streetDance | 0x39 | 街舞 |
| freeSparring | 0x3a | 自由搏击 |
| ballet | 0x3b | 芭蕾舞 |
| AustralianRulesFootball | 0x3c | 澳式足球 |
| MartialArts | 0x3d | 武术 |
| stairs | 0x3e | 爬楼 |
| handball | 0x3f | 手球 |
| baseball | 0x40 | 棒球 |
| bowlingBall | 0x41 | 保龄球 |
| squash | 0x42 | 壁球 |
| curling | 0x43 | 冰壶 |
| Hunting | 0x44 | 打猎 |
| snowboarding | 0x45 | 单板滑雪 |
| LeisureSports | 0x46 | 休闲运动 |
| AmericanFootball | 0x47 | 美式橄榄球 |
| TheKrankcycle | 0x48 | 手摇车 |
| fishing | 0x49 | 钓鱼 |
| frisbee | 0x4a | 飞盘运动 |
| rugby | 0x4b | 橄榄球 |
| golf | 0x4c | 高尔夫 |
| strength | 0x4d | 民族舞 |
| AlpineSkiing | 0x4e | 高山滑雪 |
| SnowSports | 0x4f | 雪上运动 |
| SoothingMeditationExercises | 0x50 | 舒缓冥想类运动 |
| CoreTraining | 0x51 | 核心训练 |
| skating | 0x52 | 滑冰 |
| FitnessGame | 0x53 | 健身游戏 |
| SettingUpExercise | 0x54 | 健身操 |
| groupCallisthenics | 0x55 | 团体操 |
| boxingCallisthenics | 0x56 | 搏击操 |
| lacrosse | 0x57 | 长曲棍球 |
| relaxedfoamedAxis | 0x58 | 泡沫轴筋膜放松 |
| wrestling | 0x59 | 摔跤 |
| fencing | 0x5a | 击剑 |
| softball | 0x5b | 垒球 |
| horizontalBar | 0x5c | 单杠 |
| parallelBars | 0x5d | 双杠 |
| rollerSkating | 0x5e | 轮滑 |
| hulaHoop | 0x5f | 呼啦圈 |
| darts | 0x60 | 飞镖 |
| peakBall | 0x61 | 匹克球 |
| setUps | 0x62 | 仰卧起坐 |
| stepTraining | 0x63 | 踏步训练 |
| swimmingInDoor | 0x64 | 室内游泳 |
7.1.2 SportSubMode
SportSubMode 的取值
| 枚举 | 值 | 说明 |
|---|---|---|
| manual | 0 | 手动进入 |
| automatic | 1 | 自动识别 |
| trailrunHasGpsNotify | 2 | 轨迹跑,有gps确认通知 |
| trailrunNoGpsNotify | 3 | 轨迹跑,无gps确认通知 |
7.2 手环设置
7.2.1 有个特殊的设置项集合类 获取设置大部分是这个对象,这个对象包含多种设置项,它既是可设置的对象,也是可获取的对象,具体类型具体看对应的指令
MultipleSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| settings | setting[] | 运动心率检测 |
| dataType | string | SettingInfos |
setting 的数据结构
<<<<<<< HEAD | 属性 | 类型 | 说明 | | :---- | :----: | :-------------------------------------------------------------------- |
| tag | number | 不同的tag代表着不同的类型 |
| 属性 | 类型 | 说明 |
|---|---|---|
| tag | number | 不同的tag代表着不同的类型 |
1.0.13.plugin | value | number | 如果只有一个参数的情况下,value生效,如果不是,则看具体的设置类型 |
实例
// 快捷屏幕设置
let value = {
tag: 0x04,
value: 2
};
settingInfo = new settingFactory.MultipleSetting([value])7.2.2 心率检测
456支持获取
HeartRateWarningSetting的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| sportHrSetting | object | 运动心率检测 |
| generalHrSetting | object | 常规心率检测 |
sportHrSetting 与 generalHrSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| max | number | 上限 超过这个会提醒 |
| min | number | 下限 低于这个会提醒 |
| enable | boolean | 是否开启 |
实例
let generalHr = {
max: 80,
min: 50,
enable: true,
};
let sportHr = {
max: 120,
min: 81,
enable: true
}
let setting = new settingFactory.HeartRateWarningSetting(sportHr, generalHr);7.2.3 快捷屏幕 仅456支持
456支持获取
这个使用到了一个设置项的积累类 可以参考 MultipleSetting
setting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| tag | number | 0x04 固定值 |
| value | number | 参考屏幕枚举 |
实例
let value = {
tag: 0x04,
value: 2
};
settingInfo = new settingFactory.MultipleSetting([value])7.2.4 睡眠血氧开关 仅456支持
456支持获取
这个使用到了一个设置项的积累类 可以参考 MultipleSetting
setting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| tag | number | 0x20 固定值 |
| value | number | 1表示开 0表示关 |
实例
let sleepOximetryInfo = {
tag: 0x20,
value: 1,
}
settingInfo = new settingFactory.MultipleSetting([sleepOximetryInfo]);7.2.5 久坐提醒
456可支持获取
SedentaryReminderSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| enable | boolean | 是否开关 |
| startHour | number | 开始时间 小时 |
| startMinute | number | 开始时间 分钟 |
| endHour | number | 结束时间 小时 |
| endMinute | number | 结束时间 分钟 |
| frequency | number | 间隔多久时间 一般 60分钟 单位分钟 |
| repeatTime | number | 第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复 |
| vibrationType | number | 这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop |
| vibrationTime | number | 提醒时长 一般默认5s |
| vibrationLevel1 | number | 震动强度 456无效 |
| vibrationLevel2 | number | 震动强度 456无效 |
实例
/** 构建函数
constructor(
enable = true,
startHour = 8,
startMinute = 0,
endHour = 18,
endMinute = 0,
frequency = 60,
repeatTime = RepeatTime.all,
vibrationType = VibrationType.always,
vibrationTime = 5,
vibrationLevel1 = 9,
vibrationLevel2 = 9
)
*/
settingInfo = new settingFactory.SedentaryReminderSetting()7.2.6 睡眠提醒计划
支持获取,获取的有效值 只有开关与时间
只能支持一次设置一个
NewEventRemindSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| events | EventInfo[] | 是否开关 |
EventInfo 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| enable | boolean | 是否开关 |
| index | number | 1~10 暂时只使用1就行 |
| type | number | 1: 喝水 2: 加餐 3: 睡觉 |
| desc | string | 是否开关 |
| hour | number | 开始时间 小时 |
| minute | number | 开始时间 分钟 |
| repeatTime | number | 第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复 456无效 |
| vibrationType | number | 这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop 456无效 |
| vibrationTime | number | 提醒时长 最大60s |
| vibrationLevel1 | number | 震动强度 456无效 |
| vibrationLevel2 | number | 震动强度 456无效 |
实例
let event = {
index: 1,
type: 3,
desc: "",
enable: true,
hour: 23,
minute: 0,
repeatTime: 0b1111111,
vibrationType: 0,
vibrationTime: 5,
vibrationLevel1: 9,
vibrationLevel2: 9,
}
settingInfo = new settingFactory.NewEventRemindSetting([event]);7.2.7 事件提醒(闹钟)
支持获取
只能支持一次设置一个
EventReminderSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| events | EventInfo[] | 是否开关 |
EventInfo 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| enable | boolean | 是否开关 |
| index | number | 1~10 暂时只使用1就行 membo hr2只支持1~5 |
| type | number | 1: 喝水 2: 加餐 3: 睡觉 |
| desc | string | 是否开关 |
| hour | number | 开始时间 小时 |
| minute | number | 开始时间 分钟 |
| repeatTime | number | 第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复 456无效 |
| vibrationType | number | 这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop 456无效 |
| vibrationTime | number | 提醒时长 最大60s |
| vibrationLevel1 | number | 震动强度 456无效 |
| vibrationLevel2 | number | 震动强度 456无效 |
| napEnable | boolean | 小睡提醒开关 456手环才可能支持 |
| lightSleepEnable | number | 浅睡提醒开关 456手环才可能支持 (又名智能唤醒) |
| isDelete | boolean | 是否删除闹钟,如果设为YES 则表示删除 |
| napAlertTime | number | 小睡提醒时长 (分钟) |
| lightSleepAlertTime | number | 浅睡提醒时长 (分钟) |
实例
let event = {
napEnable: true,
lightSleepEnable: true,
index: 1,
desc: `设置闹钟提醒发发发`,
enable: true,
isDelete: false,
napAlertTime: 15,
lightSleepAlertTime: 15,
hour: 19,
minute: 50,
repeatTime: 1,
vibrationType: 2,
vibrationTime: 3,
vibrationLevel1: 4,
vibrationLevel2: 5,
}
settingInfo = new settingFactory.EventReminderSetting(Array(event));7.2.8 时间格式
TimeFormatSetting 的数据格式
| 属性 | 类型 | 说明 |
|---|---|---|
| timeFormat | number | 0表示24小时制 1表示12小时制 |
实例
// 0表示24小时制 1表示12小时制
settingInfo = new settingFactory.TimeFormatSetting(0x01);7.2.9 表盘推送
456的表盘也不支持切换顺序 index 1、2、3、4表示本地表盘,5表示相册表盘,6与7表示云端表盘
PushDialSetting的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| dialIndex | number | 0x01~0x07,表示推送表盘的位置,如果该位置非空,则表示替换,否则表示新增。 |
| id | string | 标识符 |
| dailType | number | 表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘 255:无表盘 |
| fileName | string | 文件名 所占用的byte数最大32字节 |
| backgroundImageName | string | 背景图名称长度 最大32字节 |
| styleId | number | 样式id,用来描述表盘元素的显示内容和显示方式目前相册表盘有2个固定样式 已经无效 直接填0 |
| colorId | number | 颜色ID,用来秒速表盘上字体的颜色 已经无效直接填0 |
| fileBuf | ArrayBuffer | 文件内容 |
| onUpgradeProcess | func | 传送文件的进度 |
| onUpgradeComplete | func | 结果回调 |
实例
/** 构建函数
constructor(
dialIndex: number,
id: string = "",
dialType: number = 2,
fileName: string = "",
backgroundImageName: string = "",
styleId: number = 0,
colorId: number = 0,
fileBuf: ArrayBuffer = new ArrayBuffer(0),
onUpgradeProcess?: (process: number) => void,
onUpgradeComplete?: (code: number, msg: string) => void)
*/
// 相册表盘
setting = new settingFactory.PushDialSetting(dailIndex, id, 1, "test", "test", 0, 0, buf);
// 云端表盘
setting = new settingFactory.PushDialSetting(dailIndex, id, 0, "test", "test", 0, 0, buf);7.2.10 表盘选择
表盘位置上必须有表盘表盘选择才能成功
DialEnableSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| dailIndex | number | 0x01~0x07,表示表盘的位置 |
| dailNoList | number[] | 表盘的排序 456无效 |
实例
let setting = new settingFactory.DialEnableSetting(dialIndex, [1, 2, 3, 4, 5, 6, 7]);7.2.11 表盘删除
这个使用到了一个设置项的积累类 可以参考 MultipleSetting
setting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| tag | number | 0x34 固定值 |
| list | DialInfo[] | 删除表盘的列表,目前只支持一个一个的删除,456只支持删除相册表盘与云端表盘, 即5、6、7 |
DialInfo 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| index | number | 0x01~0x07,表示表盘的位置 |
| dialType | numnber | 表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘 |
实例
let setting = new settingFactory.MultipleSetting([{ tag: 0x34, list: [{ index: 7, dailType: 0 }] }]);7.2.12 目标设置
EncourageTargetSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| enable | number | 开关 |
| targetType | number | // 步数 step = 1, 卡路里 calories = 2, distance = 3,/// 深睡眠 deepSleep = 4, /// 站立时长 standingTime = 5, /// 运动时长sportTime = 6 |
| value | number | 步数 卡路里 单位:kcal 距离 单位:m 深睡眠 站立时长 单位:小时 运动时长 单位:分钟 |
实例
settingInfo = new settingFactory.EncourageTargetSetting(true, 6, 10);7.2.13 天气设置
WeatherSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| updateTime | number | 天气更新时间戳 |
| weathers | Weather[] | 今天,明天,后天...的天气信息 |
Weather 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| weatherCode | number | 天气气象代码 |
| minTemperature | number | 最低气温 |
| maxTemperature | number | 最高气温 |
| aqi | number | 空气质量 |
实例
let weather = {
weatherCode: 22,
minTemperature: 10,
maxTemperature: 20,
aqi: 10,
}
settingInfo = new settingFactory.WeatherSetting(166666666, [weather]);7.2.14 新天气设置 456 支持
NewWeatherSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| utc | number | 天气更新时间戳 |
| weathers | Weather[] | 今天,明天,后天...的天气信息 |
| cityName | string | 城市名 |
Weather 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| weatherCode | number | 天气气象代码 |
| minTemperature | number | 最低气温 |
| maxTemperature | number | 最高气温 |
| currentTemperature | number | 当前温度 |
| windSpeed | number | 风速 |
| humidity | number | 相对湿度 |
| uvIndex | number | uv指数 |
| aqi | number | 空气质量 |
| sunriseHour | number | 日出时间 |
| sunriseMinute | number | 日出时间 |
| sunsetHour | number | 日落时间 |
| sunsetMinute | number | 日落时间 |
实例
//0x00 晴(白天);
//0x01 晴(夜晚);
//0x02 多云;
//0x03 晴间多云(白天);
//0x04 晴间多云(夜晚);
//0x05 大部多云(白天);
//0x06 大部多云(夜晚);
//0x07 阴;
//0x08 阵雨;
//0x09 雷阵雨;
//0x0A 冰雹或雷阵雨伴有冰雹;
//0x0B 小雨;
//0x0C 中雨;
//0x0D 大雨;
//0x0E 暴雨;
//0x0F 大暴雨;
//0x10 特大暴雨;
//0x11 冻雨;
//0x12 雨夹雪;
//0x13 阵雪;
//0x14 小雪;
//0x15 中雪;
//0x16 大雪;
//0x17 暴雪;
//0x18 浮尘;
//0x19 扬沙;
//0x1A 沙尘暴;
//0x1B 强沙尘暴;
//0x1C 雾;
//0x1D 霾;
//0x1E 风;
//0x1F 大风;
//0x20 飓风;
//0x21 热带风暴;
//0x22 龙卷风;
let weather = {
weatherCode: 22,
minTemperature: 10,
maxTemperature: 20,
currentTemperature: 5,
windSpeed: 10,
humidity: 11,
uvIndex: 11,
aqi: 10,
sunriseHour: 6,
sunriseMinute: 0,
sunsetHour: 18,
sunsetMinute: 9,
}
settingInfo = new settingFactory.NewWeatherSetting(166666666, [weather]);7.2.14 旧的表盘设置
DialTypeSetting 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| dialType | number | 1~6 六种样式 |
实例
settingInfo = new settingFactory.DialTypeSetting(1);7.2.15 自定义一级屏幕设置
CustomPagesSetting
| 属性 | 类型 | 说明 |
|---|---|---|
| pages | number[] | 屏幕的枚举 |
旧版的屏幕比如 memboHR2 LSBand5s LSBand 的取值
| 枚举 | 值 | 说明 |
|---|---|---|
| Time | 0x00 | 时间 |
| Step | 0x01 | 步数 |
| Calories | 0x02 | 卡路里 |
| Distance | 0x03 | 距离 |
| HeartRate | 0x04 | 心率 |
| Running | 0x05 | 跑步 |
| Walking | 0x06 | 健走 |
| Cycling | 0x07 | 骑行 |
| Swimming | 0x08 | 游泳 |
| BodyBuilding | 0x09 | 健身/力量训练 |
| Climbing | 0x0A | 登山 |
| DailyData | 0x0B | 日常数据 |
| Stopwatch | 0x0C | 秒表 |
| Weather | 0x0D | 天气 |
| Battery | 0x0E | 电量 |
| IndoorRunning | 0x0F | 跑步机运动 |
| Elliptical | 0x10 | 椭圆机 |
| AerobicSport | 0x11 | 有氧运动 |
| Basketball | 0x12 | 篮球 |
| Football | 0x13 | 足球 |
| Badminton | 0x14 | 羽毛球 |
| Volleyball | 0x15 | 排球 |
| PingPong | 0x16 | 乒乓球 |
| Yoga | 0x17 | 瑜伽 |
| Gaming | 0x18 | 电竞 |
| AerobicExercise12 | 0x19 | 有氧能力运动-12分钟跑 |
| AerobicExercise6 | 0x1A | 有氧能力运动-6分钟走 |
| Alipay | 0x1B | 支付宝页面 |
| FitnessDance | 0x1C | 健身舞 |
| TaiChi | 0x1D | 太极 |
456等屏幕的取值
| 枚举 | 值 | 说明 |
|---|---|---|
| sport | 0 | 运动 |
| bloodO2 | 1 | 血氧 |
| heartRate | 2 | 心率 |
| sportReport | 3 | 运动记录 |
| findPhone | 4 | 找手机 |
| alarm | 5 | 闹钟 |
| photo | 6 | 拍照 |
| thinking | 7 | 冥想(呼吸) |
| sleepReport | 8 | 睡眠记录 |
| weather | 9 | 天气 |
| stopwatch | 10 | 秒表 |
| music | 11 | 音乐 |
| countdown | 12 | 倒计时 |
| setting | 13 | 设置 |
| realmeLink | 14 | LoT |
| msg | 15 | 消息 |
| tool | 16 | 工具 |
| preasure | 17 | 压力 |
| femaleHeathy | 18 | 女性健康 |
| eventReminder | 19 | 事件提醒 |
| flashlight | 20 | 手电筒 |
| todayOverview | 255 | 今日概览 |
7.3 手环接收的数据结构
7.3.1 总结数据 DailyData
DailyData的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| list | Daily[] | 数据列表 |
| type | number | 数据类型(0:实时数据、1:小时数据) |
| dataType | String | a5Daily 固定值 |
Daily 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| isSilenceExist | boolean | 静息心率是否存在 |
| step | number | 步数 |
| utc | number | 测量时间 |
| examount | number | 运动量 |
| calories | number | 卡路里(千卡) |
| exerciseTime | number | 运动时间(460上为活动时长)分钟 |
| distance | number | 距离(米) |
| status | number | 电量、运动等级 |
| batteryVoltage | number | 电量电压等级 |
| silenceHeartRate | number | 静息心率(可能不存在) |
7.3.2 心率数据 HeartRateData
HeartRateData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| type | number | 心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传) |
| sportMode | number | 运动类型 参考 7.1.1 |
| subMode | number | 参考 7.1.2 |
| utc | number | 测量时长 |
| reside | number | 计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送 |
| utcOffset | number | 每笔值间隔 单位:s |
| heartRates | number[] | 心率列表,每笔间隔时间为 utcOffset |
| status | number | 实时心率才使用到 0、1:不支持该功能 2:未检测到心率 3:检测到心率 |
| dataType | string | 固定值 a5HR |
7.3.3 睡眠原始数据 SleepData
SleepData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| utc | number | 测量时长 |
| reside | number | 计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送 |
| utcOffset | number | 每笔值间隔 单位:s |
| levelSet | number[] | 睡眠原始数据列表,每笔间隔时间为 utcOffset |
| dataType | string | 固定值 a5Sleep |
7.3.4 睡眠报告 SleepReportData 456支持
SleepReportData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| sleepUtc | number | 睡眠时间 Bed time |
| awakeUtc | number | 醒来时间 Get-up time. |
| durationOfAwake | number | 清醒时长 (分钟) |
| numberOfAwake | number | 醒来次数 |
| numberOfEyeMovement | number | 眼动次数 |
| timeOfLightSleep | number | 浅睡时长 (分钟) |
| timeOfDeepSleep | number | 深睡时长 (分钟) |
| characteristicsOfSleep | number | 睡眠特征个数 |
| reside | number | 待上传睡眠报告个数 |
| offsetOfSleepReport | number | 睡眠报告偏移 |
| extFlag | number | 扩展标志 |
| totalOfSleepStruct | number | 本次睡眠结构总数 |
| offsetOfSleepStruct | number | 明细睡眠结构偏移 |
| breathScore | number | 睡眠呼吸评分 暂不支持 |
| breathLevel | number | 睡眠呼吸等级 暂不支持 |
| sleepScore | number | 睡眠评分 暂不支持 |
| sleepList | SleepInfo[] | 实时心率才使用到 0、1:不支持该功能 2:未检测到心率 3:检测到心率 |
| dataType | string | 固定值 sleepReport |
SleepInfo 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| startUtc | number | 开始时间 |
| endUtc | number | 结束utc |
| deep | number | 4 : 眼动 1 : 清醒2 : 浅睡 3 : 深睡 |
| duration | number | 分钟 |
7.3.5 运动卡路里 SportCaloriesData
SportCaloriesData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| isNew | number | 心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传) |
| sportMode | number | 运动类型 参考 7.1.1 |
| subMode | number | 参考 7.1.2 |
| utc | number | 测量时长 |
| reside | number | 计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送 |
| utcOffset | number | 每笔心率值间隔 单位:s |
| calories | number[] | 卡路里列表,每笔间隔时间为 utcOffset |
| dataType | string | 固定值 a5SportCalories |
7.3.6 运动记录 SportReportData
SportReportData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| sportMode | number | 运动类型 参考 7.1.1 |
| subMode | number | 参考 7.1.2 |
| suspendTimes | number | 暂停次数 包括结束,所以默认就为1 |
| start | number | 开始时间 |
| end | number | 结束时间 |
| states | TimeState[] | 时间中间暂停的状态 |
| sportTime | number | 运动总时长 单位(秒) |
| step | number | 总步数,在游泳运动模式总步数代表 游泳圈数 laps |
| calories | number | 消耗卡路里 单位(Kcal) |
| maxHr | number | 最大心率 次/分 |
| avgHr | number | 平均心率 次/分 |
| maxStepFreq | number | 最大步频 |
| avgStepFreq | number | 平均步频 |
| maxSpeed | number | 最大速度 单位 Km/h |
| avgSpeed | number | 平均速度 单位 km/h |
| distance | number | 距离 单位 米 |
| avgStepOfFloating | number | 平均步幅 (cm) 456新增 |
| avgPace | number | 平均配速 单位 秒/公里 456 新增 |
| infoOfTarget | number | 运动目标达成情况, 0无目标,1目标达成,2目标未达成 不支持 |
| targetType | number | 运动目标类型 不支持 |
| hrSection1TimeRatio | number | 占比 % 456 新增 |
| hrSection2TimeRatio | number | 占比 % 456 新增 |
| hrSection3TimeRatio | number | 占比 % 456 新增 |
| hrSection4TimeRatio | number | 占比 % 456 新增 |
| hrSection5TimeRatio | number | 占比 % 456 新增 |
| dataType | string | 固定值 a5SportReport |
TimeState 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| pauseUtc | number | 暂停时间 |
| reStartUtc | number | 重新开始时间 |
7.3.7 血氧数据与晨脉 BloodOxygenData 456支持
BloodOxygenData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| reside | number | 计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送 |
| offset | number | 每笔心率值间隔 单位:s |
| list | BloodOxygenInfo[] | 心率列表,每笔间隔时间为 utcOffset |
| dataType | string | 固定值 bloodOxygen |
BloodOxygenInfo 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| utc | number | 测量时间 |
| bloodOxygenValue | number | 血氧数据 |
| heartRate | number | 静息心率数据 |
| state | string | 0x00:普通血氧数据 0x01:异常血氧数据 |
7.3.8 运动状态 SportStatusData(发起运动)
SportStatusData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| function | number | 心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传) |
| sportStatus | number | 当function为0x01时 0x00:开始(app需开启GPS)0x01 : 开启GPS 0x02 : 运动开始(通知app手表已开启运动) 0x03 : 关闭GPS 当function为0x02时 x01:结束 0x03:暂停 0x04:重启 |
| sportMode | number | 运动类型 参考 7.1.1 |
| dataType | string | 固定值 a5SportStatus |
7.3.9 闹钟开关 AlarmClockSwitchData 456支持
AlarmClockSwitchData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| index | number | 闹钟序号 |
| enable | number | 闹钟开关 |
| dataType | string | 固定值 AlarmClockSwitch |
7.3.10 表盘变更数据 DailReportData 456支持
DailReportData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| index | number | 当前表盘号 |
| count | number | 表盘个数 |
| list | number[] | 表盘顺序 |
| dataType | string | 固定值 dailReport |
7.3.11 表盘详情数据 DialDetailData 456 支持
DialDetailData 的数据结构
| 属性 | 类型 | 说明 |
|---|---|---|
| dialIndex | number | 当前表盘号 0x01~0x07 |
| id | number | 表盘唯一id 用ASCII表示 最大32字节 |
| dailType | number | 表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘 |
| fileName | string | 文件名 所占用的byte数最大32字节 |
| backgroundImageName | string | 背景图名称长度 最大32字节 |