文档目标
本文档对阿里巴巴物联平台的低端蓝牙设备(只能广播数据,不能交互)的BLE广播接入规范进行了详细定义,包括蓝牙广播规范和蓝牙接入服务规范等,可以供阿里巴巴的合作厂商作为阿里巴巴物联平台蓝牙设备的接入标准。本文档供阿里巴巴及合作厂商与项目相关的产品经理、项目经理、软硬件技术开发人员和测试人员参阅。
本文档中红色字体部分表示重点关注。
版权声明
本文档可能包含本公司技术机密以及其他需要保密的信息,文档所包含的所有信息均为阿里巴巴集团版权所有。未经本公司书面许可,不得向授权许可方以外的任何第三方泄露本文档内容,不得以任何形式擅自复制或传播本文档。若使用者违反本版权保护的约定,本公司有权追究使用者由此产生的法律责任。
术语、定义和缩写
缩写 | 说明 |
---|---|
BLE | Bluetooth Low Energy 低功耗蓝牙 |
AD | Advertisement广播 |
CID | Company IdentifierCode 公司识别码 |
VID | Protocol Version Code协议版本号 |
MAC | Media AccessControl媒介访问地址 |
通信规范
广播规范
蓝牙广播包格式遵循蓝牙4.0规范,由若干AD Structure组成(参见Bluetooth 4.2 Core Specification, Volume 3, Part C, Chapter 11),每一个ADStructure结构由Length、AD Type、AD Data组成。如下图所示:
接入阿里巴巴物联平台的蓝牙设备的广播包必须包含阿里巴巴制定的厂商自定义格式(Manufacturer Specific Data,AD Type:0xFF)。如下图所示:
Field | Size(Octets) | value | Notes | |
---|---|---|---|---|
Flags | length | 1 | 0x2 | Flags length |
AD Type | 1 | 0x1 | Flags Type | |
Flags | 1 | 0x02 | Flags value | |
Manufacturer Specific Data | Length | 1 | 根据实际长度填写 | Manufacturer Specific Data Length |
AD Type | 1 | 固定 0xFF | Manufacturer Specific Data Type | |
Company ID | 2 | 固定 0x01A8 | Company Identifiers,0x01A8为阿里巴巴公司编码 | |
VID和Subtype | 1 | 0x95 | Bit3~Bit0 阿里巴巴蓝牙规范版本号,当前版本号为5,值为0b0101。Bit7~Bit4 Subtype类型,会影响广播的格式。本文档使用Beacon类型,值为0b1001。故最终取值为0x95 | |
Payload | 可变 | 实际报文内容 |
表 1.1 Alibeacon通用广播包数据格式
需要注意的是:上述广播中的数据必须按照小端(Little-Endian)格式存储。
数据传输规范
非交互式广播规范采用标准BLE广播的方式,数据传输采用单包形式,不支持分包。
数据传输格式
所有数据包的payload由以下字段组成,其中包含 N(最大10个字节)个字节的实体报文Data,如下图所示:
Field | Size(Octets) | Notes |
---|---|---|
FMASK | 1 | SDK提供能力Function Mask,比如配网标识 |
ProductID | 2 | 阿里巴巴平台颁发,一型一号 |
MAC地址 | 6 | 阿里巴巴平台颁发,一机一号 |
Random | 3 | Random数据 |
Data | N(0~10) | 实体数据 |
CRC | 1 | CRC签名校验 |
FMSK用于表示设备具有的能力,各Bit位定义如下:
Bit序 | 功能说明 |
---|---|
0 | 是否是交互式广播,0:非交互式,1:交互式。目前为 0 |
1~2 | 蓝牙广播规范版本,目前为 0b00 |
3~7 | 保留将来使用,全部填0 |
Random 和 Digest 用于表示设备的身份:
1) 定义Random是3字节的随机字节,必须采用真随机算法,可以使用adc采样值来作为随机种子;
2)PID,MAC,Secret是云端分配的数据,预先烧录在设备中。为了保证安全,Secret不进行空中传播,也不会传递到手机端;~~
3)定义Data = ali_encrypt(Secret, Random,厂商自定义数据)
4)定义CRC=CRC16(Secret, Data),取低位字节
数据(Data)说明
Data 需要厂商使用自定义的格式,自定义脚本规范,参考《自定义透传脚本》。
ali_encrypt 是阿里巴巴针对低端蓝牙设备设计的一种加密算法,由阿里巴巴提供。
根据使用场景,厂商自定义数据为空时候,需要用常量来填充。
常量(ASCII字符串)
1、”BIND”。用于设备绑定的标识。设备上电后一般不会产生数据,用该常量进行填充。
设备配网状态规范
- 设备手动上电后,需要连续广播广播包2分钟,由于自定义数据这个时候为空,需要用常量 “BIND” 来填充。
广播数据上报规范
绑定设备成功后,App在进入面板后需要实时的扫描目标设备的广播包(音箱则是一直实时扫描),对于设备广播的频率,需要进行如下约定:
1、上报频率较低的设备,体脂秤等,一次有效数据需要持续5秒的时间。对于一次有效数据,5秒之内发送同一个数据包,其Random保持不变。