npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

smart-v3-ble

v1.0.2

Published

smart-v3-ble sdk - 支持微信小程序的TypeScript蓝牙库

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-ble

1) 蓝牙初始化

小程序需同意获取蓝牙

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: 城市名