smart-v3-ble
v1.0.2
Published
smart-v3-ble sdk - 支持微信小程序的TypeScript蓝牙库
Maintainers
Readme
SMART V3 javascript SDK
中文
1.简介
SMART V3 javascript SDK 是一个基于 TypeScript,面向微信小程序场景,通过调用SMART V3 SDK接口,您可以轻松构建功能丰富、交互性强的智能手表配套App。
当前代码实现主要基于微信小程序蓝牙 API(wx.*)。
2.开发指南
安装
npm install smart-v3-ble
# 或
pnpm add smart-v3-ble
# 或
yarn add smart-v3-ble1) 蓝牙初始化
小程序需同意获取蓝牙
import {
BleManager,
BleConnectorUtils,
BleKey,
BleKeyFlag,
BleTimeZone,
Languages,
} from "smart-v3-ble/dist/index.js";
const bleManager = BleManager.getInstance();
const bleConnector = new BleConnectorUtils().mbleConnector;
// 配置全局回调函数
bleConnector.addHandlerCallback({
// 登录会话
onSessionStateChange(state) {
if (state) {
bleConnector.sendObject(
BleKey.TIME_ZONE,
BleKeyFlag.UPDATE,
BleTimeZone(),
);
bleConnector.sendObject(BleKey.TIME, BleKeyFlag.UPDATE, BleTime.local());
bleConnector.sendInt8(BleKey.HOUR_SYSTEM, BleKeyFlag.UPDATE, 0);
bleConnector.sendData(BleKey.POWER, BleKeyFlag.READ);
bleConnector.sendData(BleKey.FIRMWARE_VERSION, BleKeyFlag.READ);
bleConnector.sendInt8(
BleKey.LANGUAGE,
BleKeyFlag.UPDATE,
Languages.languageToCode(),
);
bleConnector.sendData(BleKey.MUSIC_CONTROL, BleKeyFlag.READ);
}
},
});
bleManager.init();2) 扫描与连接
// 扫描开始
function startScan() {
bleManager.scan({
onScanStarted: (success) => {
console.log("扫描开始:", success);
},
onScanning: (device) => {
console.log("扫描到设备:", device.mDeviceId, device.mDeviceName);
// 可按业务条件决定是否立即连接
},
onLeScan: () => {},
onScanFinished: (list) => {
console.log("扫描结束,设备数:", list.length);
},
});
}
// 开始连接
function connectDevice(device) {
bleManager.cancelScan();
bleManager.connect(device, {
onStartConnect: () => {
console.log("开始连接");
},
onConnectSuccess: (bleDevice, gatt, status) => {
console.log("连接成功:", bleDevice.mDeviceId, status);
bindDevice(bleDevice);
},
onConnectFail: (bleDevice, exception) => {
console.error("连接失败:", bleDevice?.mDeviceId, exception);
},
onDisConnected: (isActiveDisConnected, bleDevice, gatt, status) => {
console.log(
"连接断开:",
isActiveDisConnected,
bleDevice?.mDeviceId,
status,
);
},
});
}
// 结束扫描
bleManager.cancelScan();3) 设备绑定(服务发现 + 认证流程)
连接成功后调用绑定: 连接成功之后,框架内部会根据状态自动发送绑定或登陆指令到设备。 a. 未绑定设备,会先发送绑定指令,设备确认绑定后,会保存设备相关信息,然后发送登陆指令。 b. 如果已经绑定设备,直接发送登陆指令。 登陆成功之后便可与设备通讯了。
function bindDevice(bleDevice) {
bleConnector.onBind(bleDevice)
}
// 触发回调
//配对成功触发, 可以同步一些用户设置,BleDeviceInfo建议保存起来
onIdentityCreate(status, deviceInfo) {}
//连接状态变化时触发,status为true时可以同步一些用户设置,如时间,时区等,
onSessionStateChange(status) {}说明:
BleDeviceInfo属性,列出可能要用到的属性
mBleName:蓝牙名
mBleAddress:Ble地址
mPlatform:设备平台
mPrototype:设备原型
mFirmwareFlag:固件标记
mAGpsType:agps类型
mClassicAddress:BT 3.0地址
mShowAntiLostSwitch:是否显示防丢开关, BleKey.ANTI_LOST
mSupportDateFormatSet:是否支持日期格式设置, BleKey.DATE_FORMAT
mSupportTemperatureUnitSet:是否支持温度单位设置, BleKey.TEMPERATURE_UNIT
mSupportDrinkWaterSet:是否支持喝水提醒的设置, BleKey.DRINK_WATER
mSupportAppSport:是否支持通过app发起运动,控制运动状态, BleKey.APP_SPORT_STATE, BleKey.APP_SPORT_DATA
mSupportWashSet:是否支持洗手提醒的设置
mSupportFindWatch:是否支持找手表
mSupportWorldClock:是否支持世界时钟
mSupportStock:是否支持股票
mSupportPowerSaveMode:是否支持省电模式
mSupportWeather2:是否支持七天天气
mSupport2DAcceleration:是否支持2d加速
mSupportHrWarnSet:是否支持心率预警设置
4) 解绑设备
//发送unbind命令,部分设备回复后触发 BleHandleCallback.onIdentityDelete
bleConnector.sendData( BleKey.IDENTITY, BleKeyFlag.DELETE)
// 断开连接 稍等片刻,然后解除绑定
bleManager.disconnect()
bleConnector.unbind()
bleConnector.removeHandlerCallback(callback)
//解绑时触发,有些设备解绑会触发,但有些不会
onIdentityDelete(status) {}
//设备主动解绑时触发,例如设备恢复出厂设置,或者ota完成后,app需要重新配对。
onIdentityDeleteByDevice(isDevice) {}
5) 发送指令
当前协议是采用发送/回复的方式,其中回复框架内部已作处理,只需要发送blekey就行。发送指令的主要方式为调用bleConnector对象中以send开头的方法。当设备回复手机发送的指令和主动发送指令时,都会触发事件,这些事件会通过"BleHandleCallback"在主线程派发,在任何需要处理事件的地方通过"bleConnector.addHandleCallback(BleHandleCallback)"注册一个事件回调,就能收到相应的事件,并做出相应的处理。如果回调接口是在UI组件中注册的,在UI组件销毁时应调"bleConnector.removeHandleCallback(BleHandleCallback)"移除该回调接口,否则会导致内存泄漏。
例如使用"bleConnector.sendData(BleKey.DATA_ALL, BleKeyFlag.READ)",请求所有支持数据类型。
具体请求可参考类 "BleKey"
0x05FF_DATA_ALL:App本身虚构的一个特殊标记,指代当前设备支持的所有数据。
0x0502_ACTIVITY:其包含步数\卡路里\距离,可参考类 "BleActivity"
0x0503_HEART_RATE:心率,可参考类 "BleHeartRate"
0x0505_SLEEP:睡眠,可参考类 "BleSleep"
import { bleConnectorUtils, BleKey, BleKeyFlag } from "smart-v3-ble/dist/index.js";
const bleConnector = new bleConnectorUtils().mbleConnector;
function readHeartRateByKey() {
bleConnector.sendData(BleKey.HEART_RATE, BleKeyFlag.READ);
}
// 同步设备数据
function syncData() {
bleConnector.syncData();
}6) 指令回调与数据处理
注册回调处理器:
import { bleConnectorUtils, BleKey, BleKeyFlag } from "smart-v3-ble/dist/index.js";
const bleConnector = new bleConnectorUtils().mbleConnector;
const callback = {
onReadHeartRate(data) {
console.log("心率回调:", data);
},
onReadPower(data) {
console.log("电量回调:", data);
},
onIdentityCreate(status) {
console.log("绑定结果:", status);
},
onCommandReply(bleKey, bleKeyFlag, status) {
console.log("指令应答:", bleKey, bleKeyFlag, status);
},
onSyncData(syncState, bleKey) {
console.log("同步进度:", syncState, bleKey);
},
};
// 配置全局回调函数
bleConnector.addHandlerCallback(callback);
// 页面销毁时记得解绑
// bleConnectorUtils.getInstance().mbleConnector.removeHandlerCallback(
// callback,
// )3.功能说明
3.1. 数据
3.1.1. 步数、距离、消耗卡路里
示例
//设备步数发生变化可以读取数据
bleConnector.sendData(BleKey.ACTIVITY, BleKeyFlag.READ)
//读取到数据时触发
function onReadActivity(activities: List<BleActivity>) {}BleActivity
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mMode:运动模式
mState:运动状态
mStep: 步数,例如值为10,即代表走了10步
mCalorie:消耗的卡路量,1/10000千卡,例如接收到的数据为56045,则代表 5.6045 Kcal 约等于 5.6 Kcal
mDistance:1/10000米,例如接收到的数据为56045,则代表移动距离 5.6045 米 约等于 5.6 米
mState BEGIN = 0 // 开始 ONGOING = 1 // 进行中 PAUSE = 2 // 暂停 RESUME = 3 // 继续 END = 4 // 结束
mMode
RUNNING = 7 // 跑步
INDOOR = 8 // 室内运动,跑步机
OUTDOOR = 9 // 户外运动
CYCLING = 10 // 骑行
SWIMMING = 11 // 游泳
WALKING = 12 // 步行,健走
CLIMBING = 13 // 爬山
YOGA = 14 // 瑜伽
SPINNING = 15 // 动感单车
BASKETBALL = 16 // 篮球
FOOTBALL = 17 // 足球
BADMINTON = 18 // 羽毛球
MARATHON = 19 // 马拉松
INDOOR_WALKING = 20 // 室内步行
FREE_EXERCISE = 21 // 自由锻炼
AEROBIC_EXERCISE = 22 // 有氧运动
WEIGHTTRANNING = 23 // 力量训练
WEIGHTLIFTING = 24 // 举重
BOXING = 25 // 拳击
JUMP_ROPE = 26 // 跳绳
CLIMB_STAIRS = 27 // 爬楼梯
SKI = 28 // 滑雪
SKATE = 29 // 滑冰
ROLLER_SKATING = 30 // 轮滑
HULA_HOOP = 32 // 呼啦圈
GOLF = 33 // 高尔夫
BASEBALL = 34 // 棒球
DANCE = 35 // 舞蹈
PING_PONG = 36 // 乒乓球
HOCKEY = 37 // 曲棍球
PILATES = 38 // 普拉提
TAEKWONDO = 39 // 跆拳道
HANDBALL = 40 // 手球
DANCE_STREET = 41 // 街舞
VOLLEYBALL = 42 // 排球
TENNIS = 43 // 网球
DARTS = 44 // 飞镖
GYMNASTICS = 45 // 体操
STEPPING = 46 // 踏步
ELLIPIICAL = 47 //椭圆机
ZUMBA = 48 //尊巴
CRICHKET = 49 // 板球
TREKKING = 50 // 徒步旅行
AEROBICS = 51 // 有氧运动
ROWING_MACHINE = 52 // 划船机
RUGBY = 53 // 橄榄球
SIT_UP = 54 // 仰卧起坐
DUM_BLE = 55 // 哑铃
BODY_EXERCISE = 56 // 健身操
KARATE = 57 // 空手道
FENCING = 58 // 击剑
MARTIAL_ARTS = 59 // 武术
TAI_CHI = 60 // 太极拳
FRISBEE = 61 // 飞盘
ARCHERY = 62 // 射箭
HORSE_RIDING = 63 // 骑马
BOWLING = 64 // 保龄球
SURF = 65 // 冲浪
SOFTBALL = 66 // 垒球
SQUASH = 67 // 壁球
SAILBOAT = 68 // 帆船
PULL_UP = 69 // 引体向上
SKATEBOARD = 70 // 滑板
TRAMPOLINE = 71 // 蹦床
FISHING = 72 // 钓鱼
POLE_DANCING = 73 // 钢管舞
SQUARE_DANCE = 74 // 广场舞
JAZZ_DANCE = 75 // 爵士舞
BALLET = 76 // 芭蕾舞
DISCO = 77 // 迪斯科
TAP_DANCE = 78// 踢踏舞
MODERN_DANCE = 79 // 现代舞
PUSH_UPS = 80 // 俯卧撑
SCOOTER = 81 // 滑板车
PLANK = 82 // 平板支撑
BILLIARDS = 83 // 桌球
ROCK_CLIMBING = 84
DISCUS = 85 // 铁饼
RACE_RIDING = 86 // 赛马
WRESTLING = 87 // 摔跤
HIGH_JUMP = 88 // 跳高
PARACHUTE = 89 // 跳伞
SHOT_PUT = 90 // 铅球
LONG_JUMP = 91 // 跳远
JAVELIN = 92 // 标枪
HAMMER = 93 // 链球
SQUAT = 94 // 深蹲
LEG_PRESS = 95 // 压腿
OFF_ROAD_BIKE = 96 // 越野自行车
MOTOCROSS = 97 // 越野摩托车
ROWING = 98 // 赛艇
CROSSFIT = 99 // CROSSFIT
WATER_BIKE = 100 // 水上自行车
KAYAK = 101 // 皮划艇
CROQUET = 102 // 槌球
FLOOR_BALL = 103 // 地板球
THAI = 104 // 泰拳
JAI_BALL = 105 // 回力球
TENNIS_DOUBLES = 106 // 网球(双打)
BACK_TRAINING = 107 // 背部训练
WATER_VOLLEYBALL = 108 // 水上排球
WATER_SKIING = 109 // 滑水
MOUNTAIN_CLIMBER = 110 // 登山机
HIIT = 111 // HIIT 高强度间歇性训练
BODY_COMBAT = 112 // BODY COMBAT 搏击(拳击)的一种
BODY_BALANCE = 113 // BODY BALANCE 瑜伽、太极和普拉提融合在一起的身心训练项目
TRX = 114 // TRX 全身抗阻力锻炼 全身抗阻力锻炼
TAE_BO = 115 // 跆搏(TAE BO) 集跆拳道、空手道、拳击、自由搏击、舞蹈韵律操为一体
3.1.2. 心率
示例
//设备心率发生变化可以读取数据
bleConnector.sendData(BleKey.HEART_RATE, BleKeyFlag.READ)
//读取到数据时触发
function onReadHeartRate(heartRates: List<BleHeartRate>) {}BleHeartRate
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mBpm: 心率值
参考等级: 1.心率 < 60 低 2.心率 60 ~ 100 正常 3.心率 > 100 高
3.1.3. 血压
示例
//设备血压发生变化可以读取数据
bleConnector.sendData(BleKey.BLOOD_PRESSURE, BleKeyFlag.READ)
//读取到数据时触发
function onReadBloodPressure(bloodPressures: List<BleBloodPressure>) {}BleBloodPressure
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mSystolic:收缩压
mDiastolic:舒张压
3.1.4. 睡眠
示例
//设备产生睡眠数据时可以读取数据
bleConnector.sendData(BleKey.SLEEP, BleKeyFlag.READ)
//读取到数据时触发
function onReadSleep(sleeps: List<BleSleep>) {}BleSleep
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mMode:睡眠状态
mSoft: 轻动,即睡眠过程中检测到相对轻微的动作
mStrong: 重动,即睡眠过程中检测到相对剧烈的运动
说明:
读取到的"List"有可能是多天的数据,可以将数据保存起来,App根据时间分开得到每天的sleep数据,计算得出睡眠时长,示例
//分析睡眠数据,sleeps为一天的睡眠数据
const analyseSleep = BleSleep.analyseSleep(sleeps, 1);
const statusSleep = BleSleep.getSleepStatusDuration(analyseSleep, sleeps);
//睡眠总时长
const deepMinute = statusSleep[BleSleep.DEEP];
const lightMinute = statusSleep[BleSleep.LIGHT];
const awakeMinute = statusSleep[BleSleep.AWAKE];
const totalMinute = statusSleep[BleSleep.TOTAL_LENGTH];参考等级: 1.总时长 > 9 _ 60(分钟)差2.总时长 > 7 _ 60(分钟) 深睡时长 >= 2 _ 60(分钟)良好 深睡时长 >= 1 _ 60(分钟)一般 深睡时长 < 1 _ 60(分钟)差3.总时长 < 7 _ 60(分钟) 差
3.1.5. 运动数据
示例
//设备产生运动数据时可以读取数据
bleConnector.sendData(BleKey.WORKOUT2, BleKeyFlag.READ)
//读取到数据时触发
function onReadWorkout2(workouts: List<BleWorkout2>) {}BleWorkout2
mStart: 开始时间, 距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mEnd: 结束时间, 距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mDuration:运动持续时长,数据以秒为单位
mAltitude:海拔高度,数据以米为单位
mAirPressure: 气压,数据以 kPa 为单位
mSpm: 步频,步数/分钟的值,直接可用
mMode: 运动类型,与 BleActivity 中的 mMode 定义一致
mStep:步数,与 BleActivity 中的 mStep 定义一致
mDistance: 米,以米为单位,例如接收到的数据为56045,则代表 56045 米 约等于 56.045 Km
mCalorie: 卡,以卡为单位,例如接收到的数据为56045,则代表 56.045 Kcal 约等于 56 Kcal
mSpeed:速度,接收到的数据以 米/小时 为单位
mPace: 配速,接收到的数据以 秒/千米 为单位
mAvgBpm: 平均心率
mMaxBpm:最大心率
mMinBpm:最小心率
mUndefined:占位用未定义,字节对齐预留
mMaxSpm: 最大步频,单位:步数每分钟
mMinSpm: 最小步频,单位:步数每分钟
mMaxPace: 最大(最慢)配速,单位:秒每公里
mMinPace: 最小(最快)配速,单位:秒每公
mMaxAltitude: 最大(最高)海拔高度,数据以米为单位
mMinAltitude: 最小(最低)海拔高度,数据以米为单位
说明:
有些设备使用的是BleKey.WORKOUT指令,这个指令已经过期。
3.1.6. GPS数据
示例
//设备产生睡眠数据时可以读取数据
bleConnector.sendData(BleKey.LOCATION, BleKeyFlag.READ)
//读取到数据时触发
function onReadLocation(locations: List<BleLocation>) {}BleLocation
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mActivityMode:运动类型,与 BleActivity 中的 mMode 定义一致
mAltitude
mLongitude
mLatitude
3.1.7. 体温
示例
//设备体温发生变化可以读取数据
bleConnector.sendData(BleKey.TEMPERATURE, BleKeyFlag.READ)
//读取到数据时触发
function onReadTemperature(temperatures: List<BleTemperature>) {}BleTemperature
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mTemperature: 0.1摄氏度,需要除以10
3.1.8. 血氧
示例
//设备血氧发生变化可以读取数据
bleConnector.sendData(BleKey.BLOOD_OXYGEN, BleKeyFlag.READ)
//读取到数据时触发
function onReadBloodOxygen(bloodOxygen: List<BleBloodOxygen>) {}BleBloodOxygen
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mValue: 血氧值,如果传输过来的是90,则最终显示为 90% 即可
参考等级: 1.血氧 < 92 低 2.血氧 >= 92 正常
3.1.9. HRV
示例
//设备HRV发生变化可以读取数据
bleConnector.sendData(BleKey.HRV, BleKeyFlag.READ)
//读取到数据时触发
function onReadBleHrv(hrv: List<BleHrv>) {}BleHrv
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mValue: 最近一次测量的值,如果传输过来的是90,则最终显示为 90 即可
参考等级: 1.HRV < 60 低 2.HRV 60 ~ 100 正常 3.HRV > 100 高
3.1.10. 压力
示例
//设备压力发生变化可以读取数据
bleConnector.sendData(BleKey.PRESSURE, BleKeyFlag.READ)
//读取到数据时触发
function onReadPressure(pressures: List<BlePressure>) {}BlePressure
mTime:距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mValue: 最近一次测量的值,如果传输过来的是90,则最终显示为 90 即可
参考等级: 1.压力值 < 25 轻松 2.压力值 < 50 正常 3.压力值 < 75 中度压力 3.压力值 < 100 高度压力
3.1.11. 血糖
示例
//设备数据发生变化可以读取数据
bleConnector.sendData(BleKey.BLOOD_GLUCOSE, BleKeyFlag.READ)
//读取到数据时触发
function onReadBloodGlucose(bloodGlucoses: List<BleBloodGlucose>) {}BleBloodGlucose
mTime: 距离当地2000/1/1 00:00:00的秒数,需使用"toTimeMillis()"将"mTime"转成具体时间
mValue: 0.1 mmol/L
3.2. 设置
3.2.1. 系统时间
示例
//当前手机的时间
bleConnector.sendObject(BleKey.TIME, BleKeyFlag.UPDATE, BleTime.local());3.2.2. 本地时区
示例
//当前手机的时区
bleConnector.sendObject(BleKey.TIME_ZONE, BleKeyFlag.UPDATE, BleTimeZone());3.2.3. 电量
示例
//读取
bleConnector.sendData(BleKey.POWER, BleKeyFlag.READ)
//读取到数据时触发
function onReadPower(power: Int) {}3.2.4. 固件版本
示例
//读取
bleConnector.sendData(BleKey.FIRMWARE_VERSION, BleKeyFlag.READ)
//读取到数据时触发
function onReadFirmwareVersion(version: String) {}3.2.5. Ble地址
示例
//读取
bleConnector.sendData(BleKey.BLE_ADDRESS, BleKeyFlag.READ)
//读取到数据时触发
function onReadBleAddress(address: String) {}3.2.6. 用户信息
示例
//设置
bleConnector.sendObject(BleKey.USER_PROFILE, BleKeyFlag.UPDATE, bleUserProfile);BleUserProfile
mUnit:公英制单位,0:公制,1:英制
mGender:性别,0:女,1:男
mAge: 年龄
mHeight: 身高(0.5 CM),如172.1cm
mWeight: 体重(0.5 KG), 如80.1kg
3.2.7. 步数目标
示例
//value为整数,可以是1000步,10000步等。
bleConnector.sendInt32(BleKey.STEP_GOAL, BleKeyFlag.UPDATE, value);3.2.8. 背光时长
示例
//0 is off, or 5 ~ 20s
bleConnector.sendInt8(BleKey.BACK_LIGHT, BleKeyFlag.UPDATE, value);3.2.9. 久坐提醒
示例
//设置
bleConnector.sendObject(BleKey.SEDENTARINESS, BleKeyFlag.UPDATE, bleSedentariness)
//读取
bleConnector.sendData(BleKey.SEDENTARINESS, BleKeyFlag.READ)
//读取返回
function onReadSedentariness(sedentarinessSettings: BleSedentarinessSettings) {}BleSedentarinessSettings
mEnabled: 开关
mRepeat: 重复
mStartHour: 开始小时
mStartMinute: 开时分钟
mEndHour: 结束小时
mEndMinute: 结束分钟
mInterval:提醒间隔,分钟数
3.2.10. 勿扰
示例
//设置
bleConnector.sendObject(BleKey.NO_DISTURB_RANGE, BleKeyFlag.UPDATE, bleNoDisturbSettings)
//读取
bleConnector.sendData(BleKey.NO_DISTURB_RANGE, BleKeyFlag.READ)
//读取返回
function onNoDisturbUpdate(noDisturbSettings: BleNoDisturbSettings) {}BleNoDisturbSettings
mEnabled: 开关
mBleTimeRange1:目前只用到这个,参考"BleTimeRange"
3.2.11. 震动
示例
//0 ~ 10, 0 is off
bleConnector.sendInt8(BleKey.VIBRATION, BleKeyFlag.UPDATE, value)
//读取
bleConnector.sendData(BleKey.VIBRATION, BleKeyFlag.READ)
//读取返回
function onVibrationUpdate(value: Int) {}3.2.12. 抬手亮屏
示例
//设置
bleConnector.sendObject(BleKey.GESTURE_WAKE, BleKeyFlag.UPDATE, bleGestureWake)
//读取
bleConnector.sendData(BleKey.GESTURE_WAKE, BleKeyFlag.READ)
//读取返回
function onReadGestureWake(gestureWake: BleGestureWake) {}BleGestureWake
mBleTimeRange:参考"BleTimeRange"
3.2.13. 12/24小时制
示例
// 0: 24-hourly; 1: 12-hourly
bleConnector.sendInt8(BleKey.HOUR_SYSTEM, BleKeyFlag.UPDATE, value);3.2.14. 语言设置
示例
//设置成当前手机的语言
bleConnector.sendInt8(
BleKey.LANGUAGE,
BleKeyFlag.UPDATE,
Languages.languageToCode(),
);3.2.15. 闹钟
示例
//添加闹钟,示例创建一个1分钟闹钟
const calendar = new Date(Date.now() + 60 * 1000); // 当前时间 +1分钟
const alarm = new BleAlarm(
1, // mEnabled
BleRepeat.EVERYDAY, // mRepeat
calendar.getFullYear(), // mYear
calendar.getMonth() + 1, // mMonth (JS是0-11,这里要+1)
calendar.getDate(), // mDay
calendar.getHours(), // mHour
calendar.getMinutes(), // mMinute
"tag" // mTag
);
bleConnector.sendObject(BleKey.ALARM, BleKeyFlag.CREATE, alarm);
//读取设备的闹钟
bleConnector.sendInt8(BleKey.ALARM, BleKeyFlag.READ, 0xff)
//编辑设备的闹钟
alarm.mEnabled = alarm.mEnabled === 0 ? 1 : 0;
bleConnector.sendObject(BleKey.ALARM, BleKeyFlag.UPDATE, alarm)
//删除闹钟
bleConnector.sendInt8(BleKey.ALARM, BleKeyFlag.DELETE, alarms[0].mId)
//设备端创建闹钟时触发。
function onAlarmAdd(alarm: BleAlarm) {}
//设备返回闹钟列表时触发。
function onReadAlarm(alarms: List<BleAlarm>) {}
//设备端修改闹钟时触发。
function onAlarmUpdate(alarm: BleAlarm) {}
//设备端删除闹钟时触发。
function onAlarmDelete(id: Int) {}BleAlarm
mEnabled: 0:关闭,1:开启
mRepeat: 重复设置,详细看BleRepeat
mYear: 年
mMonth: 月
mDay: 日
mHour: 小时
mMinute: 分钟
mTag: 标签说明
注:因为目前闹钟都是可循环的,所以如果闹钟响应后, 用户关掉了闹钟,那么下一个循环周期还是会响应;如果是单次闹钟,则需要App端自己判断。
3.2.16. 找手机
示例
//当设备发起找手机触发, App可以播放声音
function onFindPhone(start: Boolean) {}
//找到手机后,app可以发送指令给设备(仅部分设备支持)
bleConnector.sendInt8(BleKey.FIND_PHONE, BleKeyFlag.UPDATE, 1)3.2.17. 防丢
示例
// 0: off; 1: on
bleConnector.sendInt8(BleKey.ANTI_LOST, BleKeyFlag.UPDATE, value);3.2.18. 定时心率
示例
const hrMonitoring = new BleHrMonitoringSettings(
new BleTimeRange(1, 8, 0, 22, 0),
60, // an hour
);
bleConnector.sendObject(BleKey.HR_MONITORING, BleKeyFlag.UPDATE, hrMonitoring);BleHrMonitoringSettings
mBleTimeRange: 具体参考BleTimeRange
mInterval: 间隔时间,分钟
3.2.19. UI包版本
示例
//获取UI版本(格式x.x.x)
bleConnector.sendData(BleKey.UI_PACK_VERSION, BleKeyFlag.READ)
//设备返回固件版本时触发。
function onReadUiPackVersion(version: String) {}3.2.20. 语言包版本
示例
//获取语言包版本(格式x.x.x)
bleConnector.sendData(BleKey.LANGUAGE_PACK_VERSION, BleKeyFlag.READ)
//设备返回语言包版本时触发
function onReadLanguagePackVersion(version: BleLanguagePackVersion) {}3.2.21. 生理期
示例
//设置生理期
const girlCareSettings = new BleGirlCareSettings();
girlCareSettings.mReminderEnable = 0; // 0:关 1:开
girlCareSettings.mEnabled = 1;
girlCareSettings.mReminderHour = 9;
girlCareSettings.mReminderMinute = 0;
girlCareSettings.mMenstruationReminderAdvance = 2;
girlCareSettings.mOvulationReminderAdvance = 2;
girlCareSettings.mLatestYear = 2020;
girlCareSettings.mLatestMonth = 1;
girlCareSettings.mLatestDay = 1;
girlCareSettings.mMenstruationDuration = 7;
girlCareSettings.mMenstruationPeriod = 30;
bleConnector.sendObject(
BleKey.GIRL_CARE,
BleKeyFlag.UPDATE,
girlCareSettings
)
//读取生理期设置
bleConnector.sendData(BleKey.GIRL_CARE, BleKeyFlag.READ)
//读取返回
function onReadGirlCareSettings(girlCareSettings: BleGirlCareSettings) {}
BleGirlCareSettings
mReminderEnable: 提醒开关设置,0:关 1:开, BleDeviceInfo.mSupportGirlCareReminder==1才有效
mEnabled:显示开关
mReminderHour:提醒小时
mReminderMinute:提醒分钟
mMenstruationReminderAdvance:生理期提醒提前天数
mOvulationReminderAdvance:排卵期提醒提前天数
mLatestYear:上次生理期日期
mLatestMonth
mLatestDay
mMenstruationDuration:生理期持续时间,天
mMenstruationPeriod:生理期周期,天
3.2.22. 温度单位
示例
// value, 0: 摄氏度; 1: 华氏度
bleConnector.sendInt8(BleKey.TEMPERATURE_UNIT, BleKeyFlag.UPDATE, value);3.2.23. 日期格式
示例
// value, 0: yyyymmdd; 1: ddmmyyyy; 2: mmddyyyy;
bleConnector.sendInt8(BleKey.DATE_FORMAT, BleKeyFlag.UPDATE, value);3.2.24. 喝水提醒
示例
const drinkWater = new BleDrinkWaterSettings(
1, // mEnabled
BleRepeat.MONDAY |
BleRepeat.TUESDAY |
BleRepeat.WEDNESDAY |
BleRepeat.THURSDAY |
BleRepeat.FRIDAY |
BleRepeat.SATURDAY, // mRepeat
1, // mStartHour
1, // mStartMinute
22, // mEndHour
1, // mEndMinute
60, // mInterval
);
bleConnector.sendObject(BleKey.DRINK_WATER, BleKeyFlag.UPDATE, drinkWater);3.2.25. 找手表
示例
bleConnector.sendInt8(BleKey.FIND_WATCH, BleKeyFlag.UPDATE, 1);3.2.26. 省电模式
示例
//value, 0:close, 1:open
bleConnector.sendInt8(BleKey.POWER_SAVE_MODE, BleKeyFlag.UPDATE, value);3.2.27. 心率警告
示例
bleConnector.sendObject(
BleKey.HR_WARNING_SET,
BleKeyFlag.UPDATE,
new BleHrWarningSettings(1, 150, 1, 60),
);BleHrWarningSettings mHighSwitch:心率过高提醒开关,0:关,1:开 mHighValue: 过高心率提醒阈值 mLowSwitch: 心率过低提醒开关,0:关,1:开 mLowValue: 过低心率提醒阈值
3.2.28. 测量设置
APP控制设备进入心率,血压,血氧,压力测量模式
示例
bleConnector.sendObject(
BleKey.REALTIME_MEASUREMENT,
BleKeyFlag.UPDATE,
new BleRealTimeMeasurement(
1, // mHRSwitch: 心率
0, // mBOSwitch: 血氧
0, // mBPSwitch: 血压
0, // mStressSwitch: 压力
BleRealTimeMeasurement.STATE_START
)
)
//测量结束后会触发回调,如果超过60s没有响应,有可能测量失败
function onRealTimeMeasurement(realTimeMeasurement: BleRealTimeMeasurement) {
//测量成功
if (realTimeMeasurement.mHRSwitch == 1
&& realTimeMeasurement.mState == BleRealTimeMeasurement.STATE_DONE
) {
//测量结束后可以读取心率值
bleConnector.sendData(BleKey.HEART_RATE, BleKeyFlag.READ)
}
}BleRealTimeMeasurement mHRSwitch: 心率,0:关,1:开 mBOSwitch: 血氧,0:关,1:开 mBPSwitch: 血压,0:关,1:开 mStressSwitch: 压力,0:关,1:开 mState: 测量状态, 0:测量成功/结果,1:测量停止/失败,2:测试开始
3.2.29. SOS设置
示例
//S0S设置
const sosSettings = new BleSOSSettings(1, "13012345678");
bleConnector.sendObject(BleKey.SOS_SET, BleKeyFlag.UPDATE, sosSettings)
//读取SOS设置
bleConnector.sendData(BleKey.SOS_SET, BleKeyFlag.READ)
//读取SOS设置时触发
function onReadSOSSettings(sosSettings: BleSOSSettings) {}
BleSOSSettings mEnabled: 开关,0:关,1:开 mPhone: 手机号
3.2.30. 设备语言
示例
//读取语言列表
bleConnector.sendData(BleKey.DEVICE_LANGUAGES, BleKeyFlag.READ)
//读取时触发
function onReadDeviceLanguages(deviceLanguages: BleDeviceLanguages) {}
BleDeviceLanguages mCode: 当前语言id mSize: 支持语言总数 mList: 语言列表, 参考下面的定义
//语言定义
const LANGUAGES = {
zh: 0x00, // 中文(简体)
en: 0x01, // 英语
tr: 0x02, // 土耳其语
ru: 0x04, // 俄语
es: 0x05, // 西班牙语
it: 0x06, // 意大利语
ko: 0x07, // 韩语
pt: 0x08, // 葡萄牙语
de: 0x09, // 德语
fr: 0x0a, // 法语
nl: 0x0b, // 荷兰语
pl: 0x0c, // 波兰语
cs: 0x0d, // 捷克语
hu: 0x0e, // 匈牙利语
sk: 0x0f, // 斯洛伐克语
ja: 0x10, // 日语
da: 0x11, // 丹麦语
fi: 0x12, // 芬兰语
no: 0x13, // 挪威语
sv: 0x14, // 瑞典语
sr: 0x15, // 塞尔维亚语
th: 0x16, // 泰语
hi: 0x17, // 印地语
el: 0x18, // 希腊语
Hant: 0x19, // 中文繁体
lt: 0x1a, // 立陶宛语
vi: 0x1b, // 越南语
ar: 0x1c, // 阿拉伯语
in: 0x1d, // 印尼语
uk: 0x1e, // 乌克兰语
iw: 0x20, // 希伯来语
bn: 0x21, // 孟加拉语
et: 0x22, // 爱沙尼亚语
sl: 0x23, // 斯洛文尼亚语
fa: 0x24, // 波斯语
ro: 0x25, // 罗马尼亚语
bg: 0x26, // 保加利亚语
hr: 0x27, // 克罗地亚语
ur: 0x28, // 乌尔都语
ms: 0x29, // 马来语
jv: 0x30, // 爪哇语
mr: 0x31, // 马拉地语
lv: 0x32, // 拉脱维亚语
la: 0x33, // 拉丁语
ph: 0x34, // 菲律宾语
mm: 0x35, // 缅甸语
ta: 0x36, // 泰米尔语
te: 0x37, // 泰卢固语
kn: 0x38, // 卡纳达语
};3.2.31. 待机表盘设置
示例
const standbyWatchFaceSet = new BleStandbyWatchFaceSet();
standbyWatchFaceSet.mStandbyEnable = 1; // 使能开关,关闭后下方设置无效
standbyWatchFaceSet.mEnabled = 1; // 总开关与下方时间段开关互斥
standbyWatchFaceSet.mBleTimeRange1 = new BleTimeRange(0, 8, 0, 22, 0);
bleConnector.sendObject(BleKey.STANDBY_WATCH_FACE_SET, BleKeyFlag.UPDATE, standbyWatchFaceSet)
//读取时触发。
function onReadStandbyWatchFaceSet(standbyWatchFaceSet: BleStandbyWatchFaceSet) {}
//当设备更新时触发。
function onStandbyWatchFaceSetUpdate(standbyWatchFaceSet: BleStandbyWatchFaceSet) {}
BleStandbyWatchFaceSet
mStandbyEnable: 使能开关,关闭下面的设置无效
mEnabled: 总开关,与时间段开关互斥
mBleTimeRange1: 时间段
3.2.32. 血氧设置
示例
const bloodOxyGenSettings = new BleBloodOxyGenSettings(
new BleTimeRange(1, 8, 0, 22, 0),
60,
)
bleConnector.sendObject(BleKey.BLOOD_OXYGEN_SET, BleKeyFlag.UPDATE, bloodOxyGenSettings)
//读取时触发。
function onReadBloodOxyGenSettings(bloodOxyGenSettings: BleBloodOxyGenSettings) {}
3.2.33. 世界时钟
示例
//添加时钟
const timezoneOffset15 = Math.round(-new Date().getTimezoneOffset() / 15);
bleConnector.sendObject(
BleKey.WORLD_CLOCK,
BleKeyFlag.CREATE,
new BleWorldClock(0, timezoneOffset15, "本地时间")
)
//读取设备的时钟
bleConnector.sendInt8(BleKey.WORLD_CLOCK, BleKeyFlag.READ, ID_ALL)
//编辑设备的时钟
clock.isLocal = clock.isLocal === 0 ? 1 : 0
bleConnector.sendObject(BleKey.WORLD_CLOCK, BleKeyFlag.UPDATE, clock)
//删除时钟
bleConnector.sendInt8(BleKey.WORLD_CLOCK, BleKeyFlag.DELETE, clocks[0].mId)
//设备返回世界时钟列表时触发
function onReadWorldClock(clocks: List<BleWorldClock>) {}
//设备端删除世界时钟时触发。
function onWorldClockDelete(id) {}BleWorldClock
isLocal: 是否本地时间,0:否,1:是
mTimeZoneOffset: 时间偏移,单位15分钟
mCityName: 城市名
