第三方蓝牙设备接入方案

1. 简介

随着通通锁方案的锁的大量出货,有越来越多的第三方设备需要控制我们方案的锁,如果第三方设备有安卓或者苹果系统,可以用我们提供的SDK来支持,但也有不少设备不具有操作系统,需要我们开放部分协议进行控制,本方案就是为了满足这种使用场景而设计,让门锁可以被蓝牙模块(无操作系统)来控制开锁或者闭锁,查询锁状态。

1.1 支持第三方设备的芯片型号

支持第三方设备添加、调整蓝牙广播时间的芯片型号如下,请联系锁厂购买相应芯片型号的锁,或进行固件版本号的推送升级:

534-15-1,534-16-1,503-18-1 ,8534-3-1,8534-1-1,8503-2-1

2. 操作流程

2.1. 添加设备

添加设备时,需要App、锁、第三方蓝牙设备三方通讯,并且第三方蓝牙设备需要支持接收蓝牙广播数据,具体流程如下:

img

2.2. 第三方设备开锁

img

2.3. 第三方设备闭锁

img

2.4. 查询锁状态

锁状态可以直接在锁的正常广播数据中获取,下面是广播的数据例子:

img

在类型为0xFF的厂商自定义数据中,有门锁的状态信息,具体格式如下:

image-20251031143850457

注意:锁状态也可以通过下面的命令查询。

3. 通讯协议

3.1. 通讯格式

字段名称字节数备注
同步头20x7F 0x5A
固定数据170x05 0x03 0x00 0x00 0x01 0x00 0x01
命令码1第三方设备发给门锁时,填充命令码;门锁返回时,固定为0x54
固定数据210xB0
参数长度1 
参数N参数长度字段指出的字节个数
CRC校验1前面所有字段的CRC校验值
固定数据20x0D 0x0A

同步头:2个字节,固定为0x7F 0x5A

固定数据1:7个字节,固定为0x05 0x03 0x00 0x00 0x01 0x00 0x01

命令码:1个字节,具体看下面的命令

固定数据2:1个字节,固定为0xB0

数据长度:1个字节,后面数据字段的字节个数

数据:n个字节,具体由数据长度字段的值指出字节个数,数据字段的内容,需要通过AES算法进行加解密,算法见附件。

CRC校验:1个字节,同步头(0x7F 0x5A)开始到本字段之前的所有数据的CRC校验值,算法见附件。

数据包举例:7F5A0503000001000188B010C18C99218D9912CB9D36CE659678D95CDC0D0A

3.2. 第三方设备和锁之间的通讯密钥

固定的AES key: 0x87,0x12,0x35,0xAE,0x45,0x23,0xC9,0xE3,0x3F,0x67,0x34,0x32,0xBD,0xF9,0xA2,0xC9

添加设备过程,采用上面的固定AES key,其他过程,采用添加过程中生成的密钥。

3.3. 广播数据

锁接收到App允许添加设备的命令后,会进行蓝牙广播,广播的UUID为0x1911,广播的厂商自定义数据如下(其中状态字段为0x01):

字节序号数据备注
10x06固定数据
20x01固定数据
30xXX状态0x01-允许添加设备0x02-添加设备结束
4-90xXXXXXXXXXXXX锁的蓝牙地址,低在前,高在后

添加第三方设备结束后,广播的状态字段变为0x02。

注意:第三方蓝牙设备可以搜索UUID为0x1911,厂商自定义数据前三个字节为0x06、0x01、0x01的蓝牙设备进行添加设备动作。

3.4. 通讯命令

3.4.1. 第三方蓝牙设备和门锁通讯命令

命令码:0x88

子命令码:

子命令码子命令描述
0x01添加设备
0x02获取临时令牌
0x03开锁
0x04闭锁
0x05查询锁状态

3.4.1.1. 添加设备

A. 请求参数

字段名称字节数备注
子命令码1固定数据0x01
第三方设备蓝牙地址6低在前、高在后的字节顺序

B. 应答参数

字段名称字节数备注
命令码10x88
子命令码10x01
门锁电量百分比10~100
操作结果10x00 - 成功其他见错误码表
永久令牌44字节整数,Big endian
AES Key16 

3.4.1.2. 获取临时令牌

A. 请求参数

字段名称字节数备注
子命令码10x02
第三方设备蓝牙地址6Little Endian

B. 应答参数

字段名称字节数备注
命令码10x88
子命令码10x02
门锁电量百分比10~100
临时令牌44字节整数,Big endian

3.4.1.3. 开锁

A. 请求参数

字段名称字节数备注
子命令码10x03
开锁令牌4永久令牌+临时令牌的和,Big endian

B. 应答参数

字段名称字节数备注
命令码10x88
子命令码10x03
门锁电量百分比10~100
操作结果10x00 - 成功其他见错误码表

3.4.1.4. 闭锁

A. 请求参数

字段名称字节数备注
子命令码10x04
闭锁令牌4永久令牌+临时令牌的和,Big endian

B. 应答参数

字段名称字节数备注
命令码10x88
子命令码10x04
门锁电量百分比10~100
操作结果10x00 - 成功其他见错误码表

3.4.1.5. 查询锁状态

A. 请求参数

字段名称字节数备注
子命令码10x05

B. 应答参数

字段名称字节数备注
命令码10x88
子命令码10x05
门锁电量百分比10~100
操作结果10x00 - 成功其他见错误码表
锁状态10x00 - 闭锁0x01 - 开锁0x02 - 未知

注意:锁状态,也可以通过锁的广播数据获取

3.5. 错误码表

错误码描述
0x0E已过期
0x11未到有效期
0x13未知错误
0x1C门锁已冻结
0x1E门已反锁
0x02令牌错误

3.6. 附录

3.6.1. CRC值计算方法

//================

//8位CRC速查表

//================

/*

* 描述:

* 使用快速查表法计算位的CRC结果

* 参数:

* pData 需要计算CRC的数组

* nDataCount 需要计算CRC的数组字节个数

* 返回值:

* CRC值

*/

3.6.2 添加第三方设备示例

*第三方设备数据:

第三方设备mac地址: 00-a1-26-66-bf-01

固定的AES key:0x87,0x12,0x35,0xAE,0x45,0x23,0xC9,0xE3,0x3F,0x67,0x34,0x32,0xBD,0xF9,0xA2,0xC9

加密前参数:0x01,0x00,0xA1,0x26,0x66,0xBF,0x01

加密后参数:0xC1 0x8C 0x99 0x21 0x8D 0x99 0x12 0xCB 0x9D 0x36 0xCE 0x65 0x96 0x78 0xD9 0x5C

CRC校验值:0xDC

完整数据包:7F5A0503000001000188B010C18C99218D9912CB9D36CE659678D95CDC0D0A

*锁回复数据:

-7f-5a-05-03-00-00-01-00-01-54-b0-20-4a-6c-86-90-bd-43-29-c8-e1-8c-75-95-2c-4b-34-10-e8-ec-b9-81-8c-cc-f8-ad-4e-e1-e9-77-8b-89-af-45-f0-0d-0a-

解密后参数:

-88-01-3d-00-1c-de-1a-d0-cb-c2-25-4f-29-6e-a8-ab-71-5f-7a-a9-a5-3f-93-f6-

4.参考代码

第三方设备控制锁参考代码:Demo