米家蓝牙标准认证库说明


mible_std_authen库是接入米家的蓝牙设备与米家app之间标准认证库,用于普通安全等级的设备接入米家APP,各个平台实现demo见

https://github.com/MiEcosystem/mijia_ble.git

demo中功能实现均基于米家通用API,详见

https://github.com/MiEcosystem/mijia_ble_api.git

米家认证功能均封装在mible_std_authen_xxxx.lib 库中,通过在蓝牙设备端建立Mi Service服务,实现设备和米家APP相互认证。认证初始化及相关接口功能如下:

函数名

功能

说明

mible_server_info_init

初始化设备信息

初始化设备参数:

1、绑定关系(强/弱),需与米家开放平台上强弱绑定配置一致

2、产品ID,需与米家开放平台上产品ID配置一致

3、版本号(四位数字字符如”1234”)

4、是否需要绑定确认(例如按键、敲击等),如需要确认,配合mible_std_auth_permit_bindmible_std_auth_forbid_bind使用;如不需要则随时可进行绑定

5、设备模式,如产品为遥控器则选择MODE_REMOTE,否则选MODE_STANDARD

mible_std_auth_permit_bind允许设备绑定应用层允许设备进入待绑定状态(例如用户按键、敲击设备)
mible_std_auth_forbid_bind禁止设备绑定应用层禁止设备绑定(例如由超时事件触发)

mible_server_miservice_init

初始化MiService

用于初始化MiService,在初始化阶段调用

mible_std_auth_evt_register注册回调函数用于向米家认证流程注册回调函数,在回调函数中可接收事件,例如连接、断开、service初始化完成、绑定结果
mible_std_server_encrypt数据加密米家认证流程中可生成密钥(设备与米家APP共享),使用该密钥加密数据
mible_std_server_decrypt数据解密使用密钥解密数据
mible_std_auth_factory_reset将设备恢复至出厂状态删除米家认证相关数据,将设备恢复至出厂状态

此外在mible_server.h文件中,还有一些参数可供应用层修改:

宏定义说明
MIBLE_STD_SERVER_CONN_MAX_INTERVAL最大连接间隔
MIBLE_STD_SERVER_CONN_MIN_INTERVAL最小连接间隔
MIBLE_STD_SERVER_CONN_SLAVE_LATENCY从设备连接延迟
MIBLE_STD_SERVER_CONN_SUP_TIMEOUT连接超时时间

调用实例


Demo中展示了如何使用米家蓝牙标准认证库,具体使用流程如下:

  1. 完成必要的初始化工作,如蓝牙协议栈初始化、flash记录初始化、timer初始化等,使得米家通用蓝牙接口可以正常工作
  2. 调用 mible_server_info_init 函数,完成产品信息的初始化配置
  3. 调用 mible_server_miservice_init 函数,初始化用于米家认证 Service 和 characteristic(Service UUID 0xFE95)
  4. 广播 mibeacon(定义见https://github.com/MiEcosystem/miio_open/blob/master/ble/03-米家BLE广播协议.md

mibeacon是小米定义的广播包格式,用处主要有两个:

  1. 米家APP通过mibeacon发现设备,并显示到设备列表中
  2. 设备通过设置mibeacon中的object信息,可以被蓝牙网关扫描并上报

相关API实现见

https://github.com/MiEcosystem/mijia_ble_common.git

运行认证库的蓝牙设备为slave,当手机米家app扫描到mibeacon,可以作为master发起连接蓝牙设备,一旦建立连接会触发认证流程。 当设备第一次建立连接时,触发绑定流程。若绑定成功,则此后建立连接都会触发登录流程。建立连接后,若未成功进行绑定或登陆,超时10s后会自动断开连接,认证库通过注册的回调函数通知应用层执行结果。在绑定成功后,会将设备认证的相关信息存储在flash中(如果flash存储不成功会导致此后的的登录流程不成功)。

FAQ


1.需要设备端确认的产品,该如何调用?

答: 对于需要设备确认的认证过程(如蓝牙温湿度传感器,用户需要按键确定是哪个设备需要被绑定) ,开发者要注意mibeacon中bindingcfm位的使用。正常广播的mibeacon中bindingcfm位为0,当用户触发,如按键,mibeacon中bindingcfm位变为1,持续2~3秒后恢复为0。此时手机可以发现此设备并连接开始认证流程。

2. 产品的pid如何获取?

答:产品的pid是在开放平台上注册产品时生成的,在demo中 pid = 156 ,是一个弱绑定的蓝牙开发板产品,用于测试。 还有一个强绑定的蓝牙开发板 产品pid = 930,此两个产品类型仅用于开发者做初期测试。在真正的产品开发中,开发者应需要pid 及强弱绑定关系,与在米家开放平台上注册产品时的信息保持一致。