donehome-sdk

DoneHome BLE SDK - 私有化 BLE 模组控制 SDK,支持 React、Vue、微信小程序、Express
518
Install
npm install donehome-sdk
Latest Version:1.0.1019
License:MIT
Last Updated:Oct 19, 2026
Links: npm
Maintainer: donehome

donehome-sdk

DoneHome BLE SDK — 私有化 BLE 模组控制 SDK

特性

  • 📱 React / Vue — 基于 Web Bluetooth API
  • 🎮 微信小程序 (mina) — 原生 wx BLE API
  • 🖥️ Express / Node.js — 基于 @abandonware/noble
  • 📦 TypeScript — 完整类型定义
  • 🔧 模块化设计 — Scanner / Connector / Provisioner / Auth / Controller

安装

npm install donehome-sdk

Node.js / Express 额外依赖

npm install @abandonware/noble

快速开始

导入方式

// 命名导入(推荐)
import { Scanner, Connector, Provisioner, Auth, Controller, DoneHomeSDK } from 'donehome-sdk';

// 或使用默认导入
import DoneHomeSDK from 'donehome-sdk';

基础用法

import { DoneHomeSDK, Scanner, Connector, Controller } from 'donehome-sdk';

// 1. 初始化 SDK
const sdk = new DoneHomeSDK({ debug: true });
await sdk.init();

// 2. 使用 Scanner 扫描设备
const scanner = new Scanner(sdk);
await scanner.start({ service_uuid: '0000ff01-0000-1000-8000-00805f9b34fb', rssi_min: -80 });

// 获取发现的设备列表
const devices = scanner.getDevices();
console.log('发现设备:', devices);
await scanner.stop();

// 3. 使用 Connector 连接设备
const connector = new Connector(sdk);
await connector.connect(devices[0].deviceId, {
  timeout_ms: 10000,
  auto_reconnect: true,
  reconnect_count: 3,
});

// 4. 使用 Controller 控制设备
const controller = new Controller(sdk);
await controller.send_cmd(devices[0].deviceId, {
  code: 0x01,
  payload: new Uint8Array([0x01, 0x02]),
  require_ack: true,
  timeout_ms: 5000,
});

微信小程序

import { DoneHomeSDK, Scanner, Connector, Controller } from 'donehome-sdk/wechat';

const sdk = new DoneHomeSDK({ debug: true });
await sdk.init();

const scanner = new Scanner(sdk);
await scanner.start();

模块说明

DoneHomeSDK(核心)

初始化和管理 BLE 适配器,提供底层 BLE 操作。

const sdk = new DoneHomeSDK({ debug: true });
await sdk.init(); // 自动检测平台并加载对应适配器

Scanner — 设备扫描

const scanner = new Scanner(sdk);

// 开始扫描(支持过滤)
await scanner.start({
  service_uuid: '0000ff01-...', // 按服务 UUID 过滤
  rssi_min: -80,                // RSSI 最低值
});

// 获取已发现设备
const devices = scanner.getDevices();
// [{ deviceId: '...', name: '...', rssi: -65 }, ...]

// 停止扫描
await scanner.stop();

方法:

方法 说明
start(filter?) 根据条件开始扫描,发现设备自动追加到列表
stop() 停止扫描
getDevices() 获取已发现的设备列表
getDevice(deviceId) 根据 ID 获取设备信息
clearDevices() 清空设备列表
isScanning() 是否正在扫描

Connector — 设备连接

const connector = new Connector(sdk);

// 连接设备
await connector.connect('device_id', {
  timeout_ms: 10000,
  auto_reconnect: true,
  reconnect_count: 3,
});

// 获取连接状态
const state = connector.get_connect_state('device_id');
// 'disconnected' | 'connecting' | 'connected' | 'disconnecting'

// 断开连接
await connector.disconnect('device_id');

方法:

方法 说明
connect(device_id, options?) 连接设备(支持超时、自动重连)
disconnect(device_id) 断开连接
get_connect_state(device_id) 获取连接状态

Provisioner — 设备配网

const provisioner = new Provisioner(sdk);

// 发起配网
await provisioner.provision('device_id', {
  ssid: 'MyWiFi',
  password: 'password123',
});

// 取消配网
await provisioner.cancel('device_id');

// 获取配网状态
const state = provisioner.getState('device_id');
// 'idle' | 'provisioning' | 'success' | 'failed' | 'cancelled'

方法:

方法 说明
provision(device_id, payload) 向设备发起配网
cancel(device_id) 取消配网操作
getState(device_id) 获取配网状态

Auth — 配网认证

const auth = new Auth(sdk);

// 发起认证(challenge-response)
const result = await auth.auth('device_id', {
  key: 'your-secret-key',
  timeout_ms: 10000,
});
console.log('session_key:', result.session_key);

// 刷新 session key
await auth.refresh_session('device_id');

// 获取缓存的 session
const session = auth.getSession('device_id');

方法:

方法 说明
auth(device_id, options?) challenge-response 认证,返回 session_key
refresh_session(device_id) 重置设备 SessionKey
getSession(device_id) 获取缓存的 session
clearSessions() 清除所有 session 缓存

Controller — 设备控制

const controller = new Controller(sdk);

// 发送指令(需要 ACK)
const ack = await controller.send_cmd('device_id', {
  code: 0x01,
  payload: new Uint8Array([0x01, 0x02]),
  encrypt: false,
  require_ack: true,
  timeout_ms: 5000,
});

// 读取特征值
const data = await controller.read_char('device_id', 'characteristic-uuid');

// 写入特征值
await controller.write_char('device_id', 'characteristic-uuid', new Uint8Array([0x01]));

// 订阅特征值通知
await controller.sub_char('device_id', 'characteristic-uuid', (data) => {
  console.log('收到数据:', new Uint8Array(data));
});

// 取消订阅
await controller.unsub_char('device_id', 'characteristic-uuid');

方法:

方法 说明
send_cmd(device_id, cmd) 发送指令(支持加密、ACK、超时)
read_char(device_id, uuid) 读取特征值数据
write_char(device_id, uuid, value) 写入特征值数据
sub_char(device_id, uuid, on_data) 订阅特征值通知
unsub_char(device_id, uuid) 取消订阅特征值通知

静态工具方法

import { version, info } from 'donehome-sdk';

console.log(version());
// { version: '1.0.1010', buildTime: '2026-10-10T...' }

console.log(info());
// { author: 'don' }

输出格式

格式 文件 用途
ESM dist/index.esm.js React / Vue / 现代 bundler
CJS dist/index.cjs.js Node.js / Express
UMD dist/index.umd.js 浏览器 script 标签
WeChat dist/wechat.js 微信小程序

License

MIT © don

Related Packages

iflow-engine-base

BIM Engine SDK for Vue2, Vue3, React and HTML

29,473
iflow-engine-base-3d

BIM Engine SDK for Vue2, Vue3, React and HTML

9,510
iflow-engine-base-test

BIM Engine SDK for Vue2, Vue3, React and HTML

369
@weapp-stylex/taro

StyleX plugin for Taro React and Vue 3 targeting WeChat, Alipay, Douyin and H5 w...

1,026 2

Version History

Version Released License
1.0.1019 MIT
1.0.1010 MIT
1.0.0 MIT
Pre-releases (1)
Version Released License
0.0.0-stage