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_bind和mible_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中展示了如何使用米家蓝牙标准认证库,具体使用流程如下:
mibeacon是小米定义的广播包格式,用处主要有两个:
相关API实现见
https://github.com/MiEcosystem/mijia_ble_common.git
运行认证库的蓝牙设备为slave,当手机米家app扫描到mibeacon,可以作为master发起连接蓝牙设备,一旦建立连接会触发认证流程。 当设备第一次建立连接时,触发绑定流程。若绑定成功,则此后建立连接都会触发登录流程。建立连接后,若未成功进行绑定或登陆,超时10s后会自动断开连接,认证库通过注册的回调函数通知应用层执行结果。在绑定成功后,会将设备认证的相关信息存储在flash中(如果flash存储不成功会导致此后的的登录流程不成功)。
1.需要设备端确认的产品,该如何调用?
答: 对于需要设备确认的认证过程(如蓝牙温湿度传感器,用户需要按键确定是哪个设备需要被绑定) ,开发者要注意mibeacon中bindingcfm位的使用。正常广播的mibeacon中bindingcfm位为0,当用户触发,如按键,mibeacon中bindingcfm位变为1,持续2~3秒后恢复为0。此时手机可以发现此设备并连接开始认证流程。
2. 产品的pid如何获取?
答:产品的pid是在开放平台上注册产品时生成的,在demo中 pid = 156 ,是一个弱绑定的蓝牙开发板产品,用于测试。 还有一个强绑定的蓝牙开发板 产品pid = 930,此两个产品类型仅用于开发者做初期测试。在真正的产品开发中,开发者应需要pid 及强弱绑定关系,与在米家开放平台上注册产品时的信息保持一致。