1.0.2 • Published 2 years ago

sg-ble-next v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

乐心蓝牙设备小程序插件接入指南

版本更新日志

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 插件初始化

申请乐心AppKey

  plugin.init({
    //用邮件乐心分配的appId替换掉下面字符串
      appId: "你申请的appkey",
      logger: null,
      onBluetoothDeviceFound: privateOnBluetoothDeviceFound,              
      onBLECharacteristicValueChange: privateOnBLECharacteristicValueChange,
      onBLEConnectionStateChange: privateOnBLEConnectionStateChange,
      onBluetoothAdapterStateChange: privateOnBluetoothAdapterStateChange,
<<<<<<< HEAD
=======
      stopBluetoothDevicesDiscovery: privateStopBluetoothDevicesDiscovery,
      startBluetoothDevicesDiscovery: privateStartBluetoothDevicesDiscovery,
>>>>>>> 1.0.13.plugin
    });

请求参数:

属性类型是否必要说明
appIdstring搜索到的设备对象的回调
loggerobj日志打印器,需要实现console的一些打印的方法,
onBluetoothDeviceFoundfunc微信发现设备的回调方法,默认使用wx.onBluetoothDeviceFound,如果该方法在其他地方有使用,则需要你自己去避免冲突
onBLECharacteristicValueChangefunc微信设备特征之的回调, 默认使用wx.onBLECharacteristicValueChange, 如果该方法在其他地方有使用,则需要你自己去避免冲突
onBLEConnectionStateChangefunc微信连接回调,默认使用wx.onBLEConnectionStateChange,如果该方法在其他地方有使用,则需要你自己去避免冲突
onBluetoothAdapterStateChangefunc微信蓝牙开关回调,默认使用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 的数据结构

属性类型说明
nameString蓝牙设备名称,某些设备可能没有
localNameString设当前蓝牙设备的广播数据段中的 LocalName 数据段
deviceIdstring用于区分设备的id,安卓为mac地址,IOS为系统分配的唯一ID
RSSInumber当前蓝牙设备的信号强度
serviceDataobject当前蓝牙设备的广播数据段中的 ServiceData 数据段
macString设备mac地址
batterynumber电量
lzDeviceIdstring乐心id,只有乐心的设备才有
manufacturestring厂商
modelstring型号
softwareVersionstring软件版本
hardwareVersionstring硬件版本
firmwareVersionstring固件版本
protoNamestring协议名称
snstringsn
connectStatusConnectionState连接状态

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

属性类型说明
macString绑定设备的mac
callback(res)func绑定设备的回调

res 的数据结构

属性类型说明
macString绑定设备的mac
bindStatenumber绑定设备的状态
deviceInfoObject设备信息
errorCodenumber绑定失败的错误码

res.bindState 的可能值

枚举说明
InputRandomNumber0输入随机数 (手环专用)
Successful4绑定成功
Failure5绑定失败

res.errorCode 的可能值

枚举说明
success0成功
disconnect1未连接
nocharactor2没有特征服务
timeout3超时
discard4丢弃
ackError5ack错误
bluetoothError6蓝牙错误
workBusy7工作繁忙
fileUnsupported8文件错误
lowBattery9低电量
unsupported10不支持的类型
authorizeError11授权失败
notfind12未找到设备
cancelBind13取消绑定
alreadyBinded14用户已绑定
paramsError15参数错误
noMem16没有内存
tooBig17文件太大
notInit18没有初始化
notFind19未找到设备
notUserLocation20定位权限未开
blueNotAvailible21蓝牙授权未开

res.deviceInfo的数据结构

属性类型说明
deviceIdString设备的广播id
modelstring设备的型号
lzDeviceIdstringid(内部使用的id)
snstring一般对用户可见(比如手环在表带上)
hardwareVersionstring硬件版本
firmwareVersionstring固件版本
softwareVersionstring软件版本
manufacturestring厂家名字
batterynumber电量

2.4 取消绑定

当前状态是正在绑定的页面,此时退出绑定页面,则需要需要绑定 调用示例:

// 取消绑定
plugin.cancelBind({ mac });

请求参数:Object object

属性类型说明
macString设备的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[]

属性类型说明
macString绑定设备的mac
modelString设备型号

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

属性类型说明
macString设备的mac

返回值:number state

枚举说明
None0初始状态
Scan1扫描中
Connecting2连接中
Connected3蓝牙连接成功,还没有启动数据同步
Worked4已经启动数据同步,这是才能进行收数据,推送设置项等
Disconnected5设备主动断开了连接,或者系统断开了连接

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

属性类型说明
macString设备的mac
settingObject设置的对象,这个由 settingFactory 产生,不同的设置项,参数也不一样,具体参考各个设置项

获取设置项请求参数:

属性类型说明
macString设备的mac
settingTypenumber这个是个枚举 参考

settingType 的取值

枚举说明
HeartRateWarningSetting0心率设置
SleepBloodOxygenSetting1睡眠血氧检测开关
SedentaryReminderSetting2久坐提醒
SleepReminderSetting3睡眠提醒
EventReminderSetting4闹钟
TimeFormatSetting524小时制
DialTypeSetting6表盘信息
CustomPagesSetting7自定义界面
NightModeSetting8夜间模式
RightSwipDisplaySetting9快捷屏幕
SportHrWarnigSetting10运动心率预警

catch的 resp 的数据结构

属性类型说明
codenumber错误码 是个枚举,参考
msgstring?错误说明
extraany格外的一些参数

resp.code 的枚举

枚举说明
success0成功
disconnect1未连接
nocharactor2没有特征服务
timeout3超时
discard4丢弃
ackError5ack错误
bluetoothError6蓝牙错误
workBusy7工作繁忙
fileUnsupported8文件错误
lowBattery9低电量
unsupported10不支持的类型
authorizeError11授权失败
notfind12未找到设备
cancelBind13取消绑定
alreadyBinded14用户已绑定
paramsError15参数错误
noMem16没有内存
tooBig17文件太大
notInit18没有初始化
notFind19未找到设备
notUserLocation20定位权限未开
blueNotAvailible21蓝牙授权未开

settingFactory的方法列表

方法名类型说明
A6HeartRateSettingfunc体脂秤心率开关 参考 5.1.1(#5.1.1 体脂秤心率开关)
A6UnitSettingfunc体脂秤单位设置 参考 5.1.2(#5.1.2 体脂秤单位设置)
ScanWifiReqfunc扫描指令 参考 5.2.1(#5.2.1 扫描wifi)
ConnectWifiReqfunc连接wifi指令 参考 5.2.2(#5.2.2 wifi数据)

4 数据接收

当你监听了dataReport 事件的时候的回调, 一般通过dataType来判断数据是什么类型 下表为数据类型和实例对照表

类名dataType说明
ApInfoapInfowifi 列表数据 参考 4.2(#4.2 wifi数据)
ConfigStatusconfigStatus配置wifi的结果 参考 4.5(#4.5 ConfigStatus的数据结构)
ScaleDatascale体重数据 参考 5.1(#5.1 体重数据结构ScaleData)
BPDatabloodpressure血压数据 参考 5.2(#5.2 血压数据结构BPData)
WifiInfowifiInfo当前蓝牙设备配对的wifi 参考 4.4(#4.4 WifiInfo的数据结构)

5 体脂秤相关数据的发送与接收

5.1 体脂秤设置项

5.1.1 体脂秤心率的开关

控制体脂秤测量心率的开关 A6HeartRateSetting 的参数

属性类型说明
enableboolean开关心率

5.1.2 体脂秤单位设置

控制体脂秤单位的显示 A6UnitSetting 的参数

属性类型说明
unitnumber0表示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的数据结构

属性类型说明
cmdnumber指令,内部使用
ssidStringwifi名称
bssidStringwifi设备的mac
modeStringOpen (0), WEP (1), WPA_PSK (2), WPA2_PSK (3), WPA_WPA_2_PSK(4), WPA2_ENTERPRISE (5).
rssiString信号强度
connectedString是否连接
dataTypeString数据类型 这里固定为 apInfo

5.2.3 配置wifi

App发送Wifi SSID和密码到设备, 设备自动进行Wifi的连接过程, 并将连接结果回调给APP 数据类型 ConnectWifiReq 参数如下:

属性类型说明
bssidString设备的mac
passwordString输入的密码

5.2.4 WifiInfo的数据结构

这个数据是获取当前的配网信息的信息结果(获取配网信息目前没有暴露接口)

属性类型说明
cmdnumber指令,内部使用
ssidStringwifi名称
bssidStringwifi设备的mac
statusnumberreturn success (0) or failed reason code (1)
rssinumber信号强度
ipStringip地址
dataTypeString固定值为 wifiInfo

5.2.5 ConfigStatus的数据结构

这个是连接wifi的结果的数据结果

属性类型说明
cmdnumber指令,内部使用
statusnumbereturn success (0) or failed reason code (1)
dataTypeString固定值为 configStatus

5.3 体制秤数据 ScaleData

属性类型说明
remainCountnumber剩余测量数据条数
unitnumber0=kg,1=lb,2=st,3=斤
weightnumber体重 (单位kg)
utcnumberutc
resistancenumber电阻值
userNumbernumber用户编号
timeZonenumber时区 (缺失,使用当前系统的时区)
timeStampnumber测量时间 (请使用utc)
realtimeDataStatusboolean实时测量数据状态
heartRatenumber心率
dataTypeString固定值为 scale

6 血压计相关

6.1 血压数据结构BPData

属性类型说明
remainCountnumber剩余测量数据条数
unitnumber0=mmkg,1=Kpa (kpa目前没有使用)
systolicnumber高压
diastolicnumber低压
meanPressurenumber平均值
pulseRatenumber心率
utcnumberutc
resistancenumber电阻值
userId ` | number | 用户编号
timeZonenumber时区 (缺失,使用当前系统的时区)
timeStampnumber测量时间 (请使用utc)
bodyMovementDetectionboolean体动数据
cuffFitDetectionboolean袖带检测数据
irregularPulseDetectionboolean心率不齐信息
pulseOutboolean心率超量程
dataTypeString固定值为 bloodpressure

7 手环相关

7.1 通用枚举

7.1.1 SportMode

SportMode 的取值

枚举说明
run1跑步
walk2健走
cycling3骑行
swimming4游泳
keepfit5力量训练 (旧称 健身)
newRun6新版跑步
runInDoor7室内跑(旧称 跑步机)
elliptical8椭圆机
aerobicworkout9有氧运动
basketball0x0a篮球
football0x0b足球
badminton0x0c羽毛球
volleyball0x0d排球
tableTennis0x0e乒乓球
yoga0x0f瑜伽
game0x10电竞
run12minutes0x1112分钟跑
walk6Minutes0x126分钟走
gymDance0x13健身舞
taiji0x14太极拳
cricket0x15板球
rowingMachine0x16划船机
spinning0x17动感单车
cyclingInDoor0x18室内骑行
freeSport0x19自由运动
skippingRope0x1b跳绳
mountaineering0x1c登山
hockey0x1d曲棍球
tennis0x1e网球
hilt0x1fHILT
walkIndoor0x20室内步行
ridingHorse0x21骑马
shuttlecock0x22毽球
boxing0x23拳击
suvs0x24越野跑
ski0x25滑雪
gymnastics0x26体操
icehockey0x27冰球
taekwondo0x28跆拳道
walkingMachine0x29漫步机
onFoot0x2a徒步
dance0x2b跳舞
Athletics0x2c田径
LumbarAbdomenTraining0x2d腰腹训练
karate0x2e空手道
overallRelaxation0x2f整体放松
CrossTraining0x30交叉训练
Pilates0x31普拉提
crossMatch0x32交叉配合
FunctionalTraining0x33功能性训练
PhysicalRraining0x34体能训练
archery0x35射箭
flexibility0x36柔韧度
MixedAerobic0x37混合有氧
LatinDance0x38拉丁舞
streetDance0x39街舞
freeSparring0x3a自由搏击
ballet0x3b芭蕾舞
AustralianRulesFootball0x3c澳式足球
MartialArts0x3d武术
stairs0x3e爬楼
handball0x3f手球
baseball0x40棒球
bowlingBall0x41保龄球
squash0x42壁球
curling0x43冰壶
Hunting0x44打猎
snowboarding0x45单板滑雪
LeisureSports0x46休闲运动
AmericanFootball0x47美式橄榄球
TheKrankcycle0x48手摇车
fishing0x49钓鱼
frisbee0x4a飞盘运动
rugby0x4b橄榄球
golf0x4c高尔夫
strength0x4d民族舞
AlpineSkiing0x4e高山滑雪
SnowSports0x4f雪上运动
SoothingMeditationExercises0x50舒缓冥想类运动
CoreTraining0x51核心训练
skating0x52滑冰
FitnessGame0x53健身游戏
SettingUpExercise0x54健身操
groupCallisthenics0x55团体操
boxingCallisthenics0x56搏击操
lacrosse0x57长曲棍球
relaxedfoamedAxis0x58泡沫轴筋膜放松
wrestling0x59摔跤
fencing0x5a击剑
softball0x5b垒球
horizontalBar0x5c单杠
parallelBars0x5d双杠
rollerSkating0x5e轮滑
hulaHoop0x5f呼啦圈
darts0x60飞镖
peakBall0x61匹克球
setUps0x62仰卧起坐
stepTraining0x63踏步训练
swimmingInDoor0x64室内游泳

7.1.2 SportSubMode

SportSubMode 的取值

枚举说明
manual0手动进入
automatic1自动识别
trailrunHasGpsNotify2轨迹跑,有gps确认通知
trailrunNoGpsNotify3轨迹跑,无gps确认通知

7.2 手环设置

7.2.1 有个特殊的设置项集合类 获取设置大部分是这个对象,这个对象包含多种设置项,它既是可设置的对象,也是可获取的对象,具体类型具体看对应的指令

MultipleSetting 的数据结构

属性类型说明
settingssetting[]运动心率检测
dataTypestringSettingInfos

setting 的数据结构

<<<<<<< HEAD | 属性 | 类型 | 说明 | | :---- | :----: | :-------------------------------------------------------------------- |

| tag | number | 不同的tag代表着不同的类型 |

属性类型说明
tagnumber不同的tag代表着不同的类型

1.0.13.plugin | value | number | 如果只有一个参数的情况下,value生效,如果不是,则看具体的设置类型 |

实例

// 快捷屏幕设置
let value = {
    tag: 0x04,
    value: 2   
  };
  settingInfo = new settingFactory.MultipleSetting([value])

7.2.2 心率检测

456支持获取 HeartRateWarningSetting的数据结构

属性类型说明
sportHrSettingobject运动心率检测
generalHrSettingobject常规心率检测

sportHrSettinggeneralHrSetting 的数据结构

属性类型说明
maxnumber上限 超过这个会提醒
minnumber下限 低于这个会提醒
enableboolean是否开启

实例

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 的数据结构

属性类型说明
tagnumber0x04 固定值
valuenumber参考屏幕枚举

实例

  let value = {
    tag: 0x04,
    value: 2
  };
  settingInfo = new settingFactory.MultipleSetting([value])

7.2.4 睡眠血氧开关 仅456支持

456支持获取 这个使用到了一个设置项的积累类 可以参考 MultipleSetting setting 的数据结构

属性类型说明
tagnumber0x20 固定值
valuenumber1表示开 0表示关

实例

  let sleepOximetryInfo = {
    tag: 0x20,
    value: 1,
  }
  settingInfo = new settingFactory.MultipleSetting([sleepOximetryInfo]);

7.2.5 久坐提醒

456可支持获取 SedentaryReminderSetting 的数据结构

属性类型说明
enableboolean是否开关
startHournumber开始时间 小时
startMinutenumber开始时间 分钟
endHournumber结束时间 小时
endMinutenumber结束时间 分钟
frequencynumber间隔多久时间 一般 60分钟 单位分钟
repeatTimenumber第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复
vibrationTypenumber这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop
vibrationTimenumber提醒时长 一般默认5s
vibrationLevel1number震动强度 456无效
vibrationLevel2number震动强度 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 的数据结构

属性类型说明
eventsEventInfo[]是否开关

EventInfo 的数据结构

属性类型说明
enableboolean是否开关
indexnumber1~10 暂时只使用1就行
typenumber1: 喝水 2: 加餐 3: 睡觉
descstring是否开关
hournumber开始时间 小时
minutenumber开始时间 分钟
repeatTimenumber第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复 456无效
vibrationTypenumber这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop 456无效
vibrationTimenumber提醒时长 最大60s
vibrationLevel1number震动强度 456无效
vibrationLevel2number震动强度 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 的数据结构

属性类型说明
eventsEventInfo[]是否开关

EventInfo 的数据结构

属性类型说明
enableboolean是否开关
indexnumber1~10 暂时只使用1就行 membo hr2只支持1~5
typenumber1: 喝水 2: 加餐 3: 睡觉
descstring是否开关
hournumber开始时间 小时
minutenumber开始时间 分钟
repeatTimenumber第0位表示星期一的开关... 第6bit表示星期日的开关,全0表示不重复 456无效
vibrationTypenumber这个一般使用默认 0 0-always 1-interval 2-intervalS2L 3-intervalL2S 4-intervalLoop 456无效
vibrationTimenumber提醒时长 最大60s
vibrationLevel1number震动强度 456无效
vibrationLevel2number震动强度 456无效
napEnableboolean小睡提醒开关 456手环才可能支持
lightSleepEnablenumber浅睡提醒开关 456手环才可能支持 (又名智能唤醒)
isDeleteboolean是否删除闹钟,如果设为YES 则表示删除
napAlertTimenumber小睡提醒时长 (分钟)
lightSleepAlertTimenumber浅睡提醒时长 (分钟)

实例

  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 的数据格式

属性类型说明
timeFormatnumber0表示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的数据结构

属性类型说明
dialIndexnumber0x01~0x07,表示推送表盘的位置,如果该位置非空,则表示替换,否则表示新增。
idstring标识符
dailTypenumber表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘 255:无表盘
fileNamestring文件名 所占用的byte数最大32字节
backgroundImageNamestring背景图名称长度 最大32字节
styleIdnumber样式id,用来描述表盘元素的显示内容和显示方式目前相册表盘有2个固定样式 已经无效 直接填0
colorIdnumber颜色ID,用来秒速表盘上字体的颜色 已经无效直接填0
fileBufArrayBuffer文件内容
onUpgradeProcessfunc传送文件的进度
onUpgradeCompletefunc结果回调

实例

  /** 构建函数
  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 的数据结构

属性类型说明
dailIndexnumber0x01~0x07,表示表盘的位置
dailNoListnumber[]表盘的排序 456无效

实例

  let setting = new settingFactory.DialEnableSetting(dialIndex, [1, 2, 3, 4, 5, 6, 7]);

7.2.11 表盘删除

这个使用到了一个设置项的积累类 可以参考 MultipleSetting setting 的数据结构

属性类型说明
tagnumber0x34 固定值
listDialInfo[]删除表盘的列表,目前只支持一个一个的删除,456只支持删除相册表盘与云端表盘, 即5、6、7

DialInfo 的数据结构

属性类型说明
indexnumber0x01~0x07,表示表盘的位置
dialTypenumnber表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘

实例

  let setting = new settingFactory.MultipleSetting([{ tag: 0x34, list: [{ index: 7, dailType: 0 }] }]);

7.2.12 目标设置

EncourageTargetSetting 的数据结构

属性类型说明
enablenumber开关
targetTypenumber// 步数 step = 1, 卡路里 calories = 2, distance = 3,/// 深睡眠 deepSleep = 4, /// 站立时长 standingTime = 5, /// 运动时长sportTime = 6
valuenumber步数 卡路里 单位:kcal 距离 单位:m 深睡眠 站立时长 单位:小时 运动时长 单位:分钟

实例

  settingInfo = new settingFactory.EncourageTargetSetting(true, 6, 10);

7.2.13 天气设置

WeatherSetting 的数据结构

属性类型说明
updateTimenumber天气更新时间戳
weathersWeather[]今天,明天,后天...的天气信息

Weather 的数据结构

属性类型说明
weatherCodenumber天气气象代码
minTemperaturenumber最低气温
maxTemperaturenumber最高气温
aqinumber空气质量

实例

let weather = {
    weatherCode: 22,
    minTemperature: 10,
    maxTemperature: 20,
    aqi: 10,
  }
  settingInfo = new settingFactory.WeatherSetting(166666666, [weather]);

7.2.14 新天气设置 456 支持

NewWeatherSetting 的数据结构

属性类型说明
utcnumber天气更新时间戳
weathersWeather[]今天,明天,后天...的天气信息
cityNamestring城市名

Weather 的数据结构

属性类型说明
weatherCodenumber天气气象代码
minTemperaturenumber最低气温
maxTemperaturenumber最高气温
currentTemperaturenumber当前温度
windSpeednumber风速
humiditynumber相对湿度
uvIndexnumberuv指数
aqinumber空气质量
sunriseHournumber日出时间
sunriseMinutenumber日出时间
sunsetHournumber日落时间
sunsetMinutenumber日落时间

实例

//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 的数据结构

属性类型说明
dialTypenumber1~6 六种样式

实例

  settingInfo = new settingFactory.DialTypeSetting(1);

7.2.15 自定义一级屏幕设置

CustomPagesSetting

属性类型说明
pagesnumber[]屏幕的枚举

旧版的屏幕比如 memboHR2 LSBand5s LSBand 的取值

枚举说明
Time0x00时间
Step0x01步数
Calories0x02卡路里
Distance0x03距离
HeartRate0x04心率
Running0x05跑步
Walking0x06健走
Cycling0x07骑行
Swimming0x08游泳
BodyBuilding0x09健身/力量训练
Climbing0x0A登山
DailyData0x0B日常数据
Stopwatch0x0C秒表
Weather0x0D天气
Battery0x0E电量
IndoorRunning0x0F跑步机运动
Elliptical0x10椭圆机
AerobicSport0x11有氧运动
Basketball0x12篮球
Football0x13足球
Badminton0x14羽毛球
Volleyball0x15排球
PingPong0x16乒乓球
Yoga0x17瑜伽
Gaming0x18电竞
AerobicExercise120x19有氧能力运动-12分钟跑
AerobicExercise60x1A有氧能力运动-6分钟走
Alipay0x1B支付宝页面
FitnessDance0x1C健身舞
TaiChi0x1D太极

456等屏幕的取值

枚举说明
sport0运动
bloodO21血氧
heartRate2心率
sportReport3运动记录
findPhone4找手机
alarm5闹钟
photo6拍照
thinking7冥想(呼吸)
sleepReport8睡眠记录
weather9天气
stopwatch10秒表
music11音乐
countdown12倒计时
setting13设置
realmeLink14LoT
msg15消息
tool16工具
preasure17压力
femaleHeathy18女性健康
eventReminder19事件提醒
flashlight20手电筒
todayOverview255今日概览

7.3 手环接收的数据结构

7.3.1 总结数据 DailyData

DailyData的数据结构

属性类型说明
listDaily[]数据列表
typenumber数据类型(0:实时数据、1:小时数据)
dataTypeStringa5Daily 固定值

Daily 的数据结构

属性类型说明
isSilenceExistboolean静息心率是否存在
stepnumber步数
utcnumber测量时间
examountnumber运动量
caloriesnumber卡路里(千卡)
exerciseTimenumber运动时间(460上为活动时长)分钟
distancenumber距离(米)
statusnumber电量、运动等级
batteryVoltagenumber电量电压等级
silenceHeartRatenumber静息心率(可能不存在)

7.3.2 心率数据 HeartRateData

HeartRateData 的数据结构

属性类型说明
typenumber心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传)
sportModenumber运动类型 参考 7.1.1
subModenumber参考 7.1.2
utcnumber测量时长
residenumber计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送
utcOffsetnumber每笔值间隔 单位:s
heartRatesnumber[]心率列表,每笔间隔时间为 utcOffset
statusnumber实时心率才使用到 0、1:不支持该功能 2:未检测到心率 3:检测到心率
dataTypestring固定值 a5HR

7.3.3 睡眠原始数据 SleepData

SleepData 的数据结构

属性类型说明
utcnumber测量时长
residenumber计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送
utcOffsetnumber每笔值间隔 单位:s
levelSetnumber[]睡眠原始数据列表,每笔间隔时间为 utcOffset
dataTypestring固定值 a5Sleep

7.3.4 睡眠报告 SleepReportData 456支持

SleepReportData 的数据结构

属性类型说明
sleepUtcnumber睡眠时间 Bed time
awakeUtcnumber醒来时间 Get-up time.
durationOfAwakenumber清醒时长 (分钟)
numberOfAwakenumber醒来次数
numberOfEyeMovementnumber眼动次数
timeOfLightSleepnumber浅睡时长 (分钟)
timeOfDeepSleepnumber深睡时长 (分钟)
characteristicsOfSleepnumber睡眠特征个数
residenumber待上传睡眠报告个数
offsetOfSleepReportnumber睡眠报告偏移
extFlagnumber扩展标志
totalOfSleepStructnumber本次睡眠结构总数
offsetOfSleepStructnumber明细睡眠结构偏移
breathScorenumber睡眠呼吸评分 暂不支持
breathLevelnumber睡眠呼吸等级 暂不支持
sleepScorenumber睡眠评分 暂不支持
sleepListSleepInfo[]实时心率才使用到 0、1:不支持该功能 2:未检测到心率 3:检测到心率
dataTypestring固定值 sleepReport

SleepInfo 的数据结构

属性类型说明
startUtcnumber开始时间
endUtcnumber结束utc
deepnumber4 : 眼动 1 : 清醒2 : 浅睡 3 : 深睡
durationnumber分钟

7.3.5 运动卡路里 SportCaloriesData

SportCaloriesData 的数据结构

属性类型说明
isNewnumber心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传)
sportModenumber运动类型 参考 7.1.1
subModenumber参考 7.1.2
utcnumber测量时长
residenumber计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送
utcOffsetnumber每笔心率值间隔 单位:s
caloriesnumber[]卡路里列表,每笔间隔时间为 utcOffset
dataTypestring固定值 a5SportCalories

7.3.6 运动记录 SportReportData

SportReportData 的数据结构

属性类型说明
sportModenumber运动类型 参考 7.1.1
subModenumber参考 7.1.2
suspendTimesnumber暂停次数 包括结束,所以默认就为1
startnumber开始时间
endnumber结束时间
statesTimeState[]时间中间暂停的状态
sportTimenumber运动总时长 单位(秒)
stepnumber总步数,在游泳运动模式总步数代表 游泳圈数 laps
caloriesnumber消耗卡路里 单位(Kcal)
maxHrnumber最大心率 次/分
avgHrnumber平均心率 次/分
maxStepFreqnumber最大步频
avgStepFreqnumber平均步频
maxSpeednumber最大速度 单位 Km/h
avgSpeednumber平均速度 单位 km/h
distancenumber距离 单位 米
avgStepOfFloatingnumber平均步幅 (cm) 456新增
avgPacenumber平均配速 单位 秒/公里 456 新增
infoOfTargetnumber运动目标达成情况, 0无目标,1目标达成,2目标未达成 不支持
targetTypenumber运动目标类型 不支持
hrSection1TimeRationumber占比 % 456 新增
hrSection2TimeRationumber占比 % 456 新增
hrSection3TimeRationumber占比 % 456 新增
hrSection4TimeRationumber占比 % 456 新增
hrSection5TimeRationumber占比 % 456 新增
dataTypestring固定值 a5SportReport

TimeState 的数据结构

属性类型说明
pauseUtcnumber暂停时间
reStartUtcnumber重新开始时间

7.3.7 血氧数据与晨脉 BloodOxygenData 456支持

BloodOxygenData 的数据结构

属性类型说明
residenumber计步器中数据剩余条数 例如:547 表示设备中有547条数据未发送
offsetnumber每笔心率值间隔 单位:s
listBloodOxygenInfo[]心率列表,每笔间隔时间为 utcOffset
dataTypestring固定值 bloodOxygen

BloodOxygenInfo 的数据结构

属性类型说明
utcnumber测量时间
bloodOxygenValuenumber血氧数据
heartRatenumber静息心率数据
statestring0x00:普通血氧数据 0x01:异常血氧数据

7.3.8 运动状态 SportStatusData(发起运动)

SportStatusData 的数据结构

属性类型说明
functionnumber心率类型(0:一般心率、1:实时心率、2:运动心率, 3 当天常规心率明细上传)
sportStatusnumber当function为0x01时 0x00:开始(app需开启GPS)0x01 : 开启GPS 0x02 : 运动开始(通知app手表已开启运动) 0x03 : 关闭GPS 当function为0x02时 x01:结束 0x03:暂停 0x04:重启
sportModenumber运动类型 参考 7.1.1
dataTypestring固定值 a5SportStatus

7.3.9 闹钟开关 AlarmClockSwitchData 456支持

AlarmClockSwitchData 的数据结构

属性类型说明
indexnumber闹钟序号
enablenumber闹钟开关
dataTypestring固定值 AlarmClockSwitch

7.3.10 表盘变更数据 DailReportData 456支持

DailReportData 的数据结构

属性类型说明
indexnumber当前表盘号
countnumber表盘个数
listnumber[]表盘顺序
dataTypestring固定值 dailReport

7.3.11 表盘详情数据 DialDetailData 456 支持

DialDetailData 的数据结构

属性类型说明
dialIndexnumber当前表盘号 0x01~0x07
idnumber表盘唯一id 用ASCII表示 最大32字节
dailTypenumber表盘类型 0: 在线表盘 1: 相册表盘 2: 本地表盘
fileNamestring文件名 所占用的byte数最大32字节
backgroundImageNamestring背景图名称长度 最大32字节

8 跳绳相关

8.1 跳绳设置

8.2 跳绳

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago