蓝牙门锁配件 DP 参考

更新时间:2023-02-21 10:02:04下载pdf

本文介绍 蓝牙门锁配件 例如蓝牙钥匙、密码盘等应用中对应的 DP 功能、帧格式及其使用方法,适用于蓝牙门锁配件公版产品或项目。

背景信息

名词解释

下表罗列了本文涉及到的部分名词和解释。更多详情,请参考 涂鸦名词解释

名词 解释
DP 全称为 Data Point,同时被称为 DP 点。一个 DP 指的就是一个功能点或者一条/对指令码。
PID 全称为 Product ID,表示描述一类产品功能(DP)的集合。在涂鸦 IoT 开发平台创建的每一个产品都会产生一个唯一的产品编号,关联了产品具体的功能点、App 控制面板、出货信息等所有跟这个产品相关的信息。
uuid 设备的唯一识别 ID,又称作 license,长度是 20 位。
authkey 设备在涂鸦云平台注册时需要的密钥,和 uuid 是一一对应的关系,长度是 32 位。
固件 key 固件在涂鸦平台的唯一身份标识。
成员 也称作用户,是同一个概念。
成员 ID 1 字节无符号整数,指成员编号(也称为用户编号)。
由服务器分配下发,本地无需维护,取值范围 0x01-0x64,其他为保留值。
硬件 ID 1 字节无符号整数,指开锁方式相关的硬件编号。
由本地分配维护,每一个开锁方式对应一个硬件 ID,
例如:指纹一硬件 ID 为 0x01 ,密码一硬件 ID 为 0x02,取值范围 0x00-0xFE,0xFF 为保留值。
时效性 某个具体的开锁方式(例如指纹或密码)在指定的时间范围内有效。
锁帖 一种将传统门锁升级为智能门锁的装置,详情请自行搜索。
下发 数据传输的方向,手机/网关 → 蓝牙设备。
上报 数据传输的方向,蓝牙设备 → 手机/网关。

门锁工作过程

门锁和App之间的关系如下所示:

  • 主机:智能生活 App

  • 从机:蓝牙门锁

    主机通过蓝牙广播识别从机,并对已授权的从机发起配对请求,完成配对的主从机处于绑定状态。

    处于绑定状态的主从机之间存在一条符合蓝牙规范的安全通道,所有的业务类通信都在该安全通道中进行。

安全通道的建立过程可以简述如下:未绑定 > 连接 > 配对 > 绑定 > 安全通信 > 断开 > 重连 > 绑定 > 安全通信 > …… > 移除 > 未绑定

  • 连接:普通的蓝牙连接,此处特指 App 和门锁设备的连接。
  • 配对:一系列的密钥交换过程。
  • 绑定:配对完成后的状态称之为 绑定状态,处于绑定状态的两个设备可以进行安全通信。
  • 重连:依然是一系列的密钥交换过程,可以认为是简化的 配对,该过程的前提是此前已经进入过一次绑定状态。
  • 移除:秘钥删除和绑定状态的清除。

配件工作过程

蓝牙门锁配件可以同时作为蓝牙主机和从机存在。

  • 作为从机,配件和 App 进行配对绑定后,获得门锁的绑定信息,进而获得和门锁进行重连的能力。
  • 作为主机,配件和门锁进行重连,可以获得安全通信的能力,此时,配件可以对门锁进行一定的控制。

为了提高安全等级,确保配件出现后门锁端的相对安全,在业务层进行了身份的二次确认,过程如下:

  • 涂鸦云平台为主机(App/配件)分配 主机 ID + 主机随机数,用于唯一识别主机。

    涂鸦云平台为从机(门锁)分配 从机 ID + 从机随机数,用于唯一识别从机。

  • 涂鸦云平台首先将 App 的 主机 ID + 主机随机数 和门锁的 从机 ID 发送给门锁,此时认为 App 和门锁完成了业务配对。

    然后将配件的 主机 ID + 主机随机数 发送给门锁,将配件的 主机 ID + 主机随机数 和门锁的 从机 ID 发送给配件,此时认为配件和门锁完成了业务配对。

  • 此时,门锁端存储着:

    • App 的 主机 ID + 主机随机数
    • 配件的 主机 ID + 主机随机数(一个/多个)
    • 门锁的 从机 ID
  • 配件端存储着:

    • 配件的 主机 ID + 主机随机数
    • 门锁的 从机 ID

此时,配件能够对门锁做的操作只有 开锁,且配件在做这一操作之前需要告诉门锁自己的身份(配件的 主机 ID + 主机随机数)和门锁的身份(门锁的 从机 ID),以此保证通信的安全。

DP格式

字段 长度(bytes) 说明
dp_id 1 DP 指令码
dp_type 1 DP 数据类型
dp_data_len 1 DP 数据长度
dp_data_value dp_data_len DP 数据内容
注意:使用涂鸦蓝牙模组开发时,dp_data_len 的长度为 2 个字节,适用于所有 DP。

主机 ID 和从机 ID

主机 ID 和从机 ID 都是由涂鸦云平台分配的,有效 ID 从 1 开始。

主机 ID含义从机 ID含义
0无效0无效
1配件11锁1
2配件22锁2
……………………
10000配件 1000010000锁 10000
65535
(0xFFFF)
手机(网关)

开锁方式

添加开锁方式




dp_id
(1
字节)
dp
_type
(1
字节)
dp_da
ta_len
(1
字节)
dp_data_value

1 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1
字节)
硬件 ID
(1
字节)
时效性
(17
字节)
次数
(1
字节)
密码
长度
(1字
节)
密码
内容
(n字
节)
0-10000 0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:录入开始
0xFE:录入取消
(App端发起)
0x00:普通成员
0x01:管理员
0x01
-0x64
0xFF:
默认值
详见
附录 1
取值
范围
说明 说明

1 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1
字节)
硬件 ID
(1
字节)
次数
(1 字节)
返回状态
(1 字节)
0-10000 0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:录入开始 0x00:普通成员
0x01:管理员
0x00
-0x64
0x00
-0xFE
需要录入的总次数
例如:指纹一般是 6 次,
门卡一般是 1 次
0x00:默认值
0xFC:录入进行 0x00:普通成员
0x01:管理员
0x00
-0x64
0x00
-0xFE
录入次数的序号
例如:指纹一般是 6 次,
填写每次的编号
(从 1 开始)
录入异常原因:
0x00:无异常
0x01:指纹不全
0xFD:录入失败 0x00:普通成员
0x01:管理员
0x00
-0x64
0x00
-0xFE
当前的录入阶段:
0x00:录入开始
0xFC:录入进行,
0xFF:录入完成
录入失败原因
0xFE:录入取消
(App端发起)
0x00:普通成员
0x01:管理员
0x00
-0x64
0x00
-0xFE
0x00:默认值 0x00:默认值
0xFF:录入完成 0x00:普通成员
0x01:管理员
0x00
-0x64
0x00
-0xFE
0x00:默认值 0x00:默认值

删除开锁方式




dp_id
(1
字节)
dp
_type
(1
字节)
dp_da
ta_len
(1
字节)
dp_data_value

2 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1 字节)
硬件 ID
(1 字节)
删除方式
(1 字节)
0-10000 0x00:删除成员 0x00:
默认
0x00:普通成员
0x01:管理员
0x01
-0x64
0xFF:
默认值
0x00:删除某个成员下
所有开锁方式
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:
默认
0x00:普通成员
0x01:管理员
0x01
-0x64
0x00
-0xFE
0x01:删除某成员的
某一个开锁方式

2 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1 字节)
硬件 ID
(1 字节)
删除方式
(1 字节)
返回状态
(1 字节)
0-10000 0x00:删除成员 0x00:
默认
0x00:普通成员
0x01:管理员
0x01
-0x64
0xFF:
默认值
0x00:删除某个成员下
所有开锁方式
0x00:删除失败
0xFF:删除成功
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:
默认
0x00:普通成员
0x01:管理员
0x01
-0x64
0x00
-0xFE
0x01:删除某成员的
某一个开锁方式
0x00:删除失败
0x01:开锁方式不存在
0xFF:删除成功

修改开锁方式




dp_id
(1
字节)
dp_type
(1
字节)
dp_da
ta_len
(1
字节)
dp_data_value

3 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1 字节)
硬件 ID
(1 字节)
时效性
(17
字节)
次数
(1 字节)
密码
长度
(1字
节)
密码
内容
(n字
节)
0-10000 0x00:
仅修改
某个成员
的时效性
0x00:默认 0x00:普通成员
0x01:管理员
0x01
-0x64
0xFF:
默认值
详见
附录 1
0x00:
默认值
(次数不
允许修改)
说明 说明
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:默认 0x00:普通成员
0x01:管理员
0x01
-0x64
0x00
-0xFE
详见
附录 1
取值
范围
说明 说明

3 raw len 从机 ID
(2 字节)
类型
(1 字节)
阶段
(1 字节)
管理员标记
(1 字节)
成员 ID
(1 字节)
硬件 ID
(1 字节)
次数
(1 字节)
返回状态
(1 字节)
0-10000 0x00:
仅修改
某个成员
的时效性
0x00:默认 0x00:普通成员
0x01:管理员
0x01
-0x64
0xFF:
默认值
0x00:默认值
(次数不允许修改)
0x00:修改失败
0xFF:修改成功
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:默认 0x00:普通成员
0x01:管理员
0x01
-0x64
0x00
-0xFE
取值范围 0x00:修改失败
0xFF:修改成功

添加临时密码

临时密码和普通密码的不同之处有以下几点:
(1)临时密码不属于任何成员。
(2)由于第(1)点,临时密码的时效性在连接状态下可单独更改。
(3)临时密码作为开门方式时,类型定义为 0xF0(0x01 为密码,0x02 为门卡,0x03 为指纹……)。

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 4 raw len 从机 ID
(2 字节)
类型
(1 字节)
时效性
(17字节)
次数
(1 字节)
密码长度
(1 字节)
密码内容
(n字节)
0-10000 0x00:类型 0
0x01:类型 1
详见附录 1 取值范围 密码字节数 n
(仅用于密码类型)
说明
上报 4 raw len 从机 ID
(2 字节)
硬件 ID
(1 字节)
返回状态
(1 字节)
0-10000 0x00-0xFE 0x00:添加成功
0x01:添加失败
0x02:硬件 ID 分配完

删除临时密码

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 5 raw len 从机 ID
(2 字节)
硬件 ID
(1 字节)
0-10000 0x00-0xFE
上报 5 raw len 从机 ID
(2 字节)
硬件 ID
(1 字节)
返回状态
(1 字节)
0-10000 0x00-0xFE 0x00:删除成功
0x01:删除失败
0x02:临时密码不存在

修改临时密码

数据
方向
dp_id
(1
字节)
dp
_type
(1
字节)
dp_da
ta_len
(1
字节)
dp_data_value
下发 6 raw len 从机 ID
(2 字节)
硬件 ID
(1 字节)
类型
(1 字节)
时效性
(17字节)
次数
(1 字节)
密码长度
(1 字节)
密码内容
(n字节)
0-10000 0x00-0xFE 0x00:类型 0
0x01:类型 1
详见附录 1 取值范围 密码字节数 n
(仅用于密码类型)
说明
上报 6 raw len 从机 ID
(2 字节)
硬件 ID
(1 字节)
返回状态
(1 字节)
0-10000 0x00-0xFE 0x00:修改成功
0x01:修改失败

同步开锁方式

为了保持服务器和设备本地开锁方式的一致性,每次进入 App 的硬件列表/在 App 的硬件列表界面下拉刷新时,都需要进行开锁方式的全量同步(手机和本地添加的所有开锁方式)。

硬件类型枚举 用来通知本地本次需要同步的硬件类型,未下发的硬件类型本地无需上报。阶段为 同步中 的每包数据长度由用户自定义,每包数据总长度不大于 200 个字节。

更多详情,请参考 相关 FAQ

同步本地添加的开锁方式

本地添加的开锁方式通过同步的方式上报给云端,目前有以下几种情况:

  • 上报时用户 ID 为 0xFF,云端统一将本地添加的开锁方式挂到配网账户下,并存储相应的用户 ID。之后每次下发该类开锁方式时,相应的用户 ID 也为 0xFF(仅用于百洛、汇力挂锁,云端不可删除)。
  • 上报时用户 ID 为 0xFD,云端统一将本地添加的开锁方式挂到配网账户下,并存储相应的用户 ID。之后每次下发该类开锁方式时,相应的用户 ID 也为 0xFD(通用)。
数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 7 raw len 硬件类型枚举
(len字节)
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
上报 7 raw len 阶段
(1 字节)
数据包序号
(1 字节)
同步数据
(n字节)
0x00:同步中 0x00-0xFF 数据1、数据2、……、数据n
上报 7 raw len 阶段
(1 字节)
总包数
(1 字节)
0x01:同步结束 总包数

引导功能

数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 8 raw len 功能
(1 字节)
0x00:功能0
0x01:功能1
……
上报 8 raw len 功能
(1 字节)
返回状态
(1 字节)
0x00:功能0
0x01:功能1
……
0x00:成功
0x01:失败

添加蓝牙钥匙

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 9 raw len 从机 ID
(2 字节)
成员 ID
(1 字节)
管理员标记
(1 字节)
时效性
(17字节)
0-10000 0x01-0x64 0x00:普通成员
0x01:管理员
详见附录 1
上报 9 raw len 从机 ID
(2 字节)
成员 ID
(1 字节)
管理员标记
(1 字节)
时效性
(17 字节)
返回状态
(1 字节)
0-10000 0x01-0x64 0x00:普通成员
0x01:管理员
详见附录 1 0x00:添加成功
0x01:添加失败
0x02:硬件 ID分配完

删除蓝牙钥匙

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 10 raw len 从机 ID
(2 字节)
0-10000
上报 10 raw len 从机 ID
(2 字节)
返回状态
(1 字节)
0-10000 0x00:删除成功
0x01:删除失败
0x02:蓝牙钥匙不存在

修改蓝牙钥匙

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 11 raw len 从机 ID
(2 字节)
成员 ID
(1 字节)
管理员标记
(1 字节)
时效性
(17字节)
0-10000 0x01-0x64 0x00:普通成员
0x01:管理员
详见附录 1
上报 11 raw len 从机 ID
(2 字节)
成员 ID
(1 字节)
管理员标记
(1 字节)
时效性
(17 字节)
返回状态
(1 字节)
0-10000 0x01-0x64 0x00:普通成员
0x01:管理员
详见附录 1 0x00:修改成功
0x01:修改失败
0x02:硬件 ID 分配完

新组合开锁

数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_da
ta_len
(1 字节)
dp_data_value
上报 59 raw len 从机 ID
(2 字节)
组合类型
(1 字节)
开锁方式-1
(1 字节)
硬件 ID-1
(1 字节)
开锁方式-2
(1 字节)
硬件 ID-2
(1 字节)
0-10000 取值范围 取值范围 0x01-0xFE 取值范围 0x01-0xFE

配件相关设置

功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
配件音效 下发/上报 20 enum len 音效(1 字节)
0x00:音效 0
……
0x0A:音效 10
配件音量 下发/上报 21 enum len 音量(1 字节)
取值范围
按键音量 下发/上报 22 enum len 音量(1 字节)
取值范围
本地导航音量 下发/上报 23 enum len 音量(1 字节)
取值范围
配件语言 下发/上报 24 enum len 语言(1 字节)
取值范围
显示屏欢迎词 下发/上报 25 string len 欢迎词(1 字节)
0-50 字节
上锁校验开关 下发/上报 27 bool len 开关(1 字节)
0x00:关
0x01:开
单开多开设置 下发/上报 28 enum len 设置(1 字节)
0x00:单开
0x01:多开
特殊功能 下发/上报 29 enum len 功能(1 字节)
0x00:功能 0
0x01:功能 1
……

配件实时状态

功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
电量百分比 下发/上报 40 value len 百分比(4 字节)
0x00-0x64
电量档位 下发/上报 41 enum len 档位(1 字节)
取值范围

配件记录上报

功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
按键开锁 上报 50 raw len 固定值(4 字节) 从机 ID(2 字节)
0x00 0-10000
密码开锁 上报 51 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
门卡开锁 上报 52 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
指纹开锁 上报 53 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
人脸开锁 上报 54 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
虹膜开锁 上报 55 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
掌纹开锁 上报 56 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
指静脉开锁 上报 57 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
临时密码开锁 上报 58 raw len 硬件 ID(4 字节) 从机 ID(2 字节)
0x00-0xFE 0-10000
组合开锁 上报 59 raw len 开锁方式的
可能组合(1 字节)
从机 ID(2 字节)
取值范围 0-10000
报警原因 上报 60 raw len 报警原因(1 字节)
取值范围
关锁记录 上报 106 raw len 关锁/落锁方式(1 字节) 成员 ID(4 字节)
0x05(配件关锁) 0x01-0x04
功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
配件通用
记录上报
上报 69 raw len 从机 ID(2 字节) 开锁方式(1 字节) 开锁信息(1 字节)
0-10000 0x00:手机
0x01:按键
……
对应开锁记录的 dp_id
手机:1 字节,成员 ID
按键:1 字节,固定值0x00
……
对应开锁记录的dp_data_value

离线密码

功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
离线密码
设置 T0 时间
下发/上报 70 string len T0 时间戳字符串(10 字节)
Unix 时间戳字符串
离线密码
清空单条
上报 71 raw len 加密后的清空码(16 字节)
详见说明
离线密码
清空所有
上报 72 raw len 加密后的清空码(16 字节)
详见说明
离线密码开锁 上报 73 raw len 加密后的开锁密码(16 字节)
详见说明
动态密码开锁 上报 74 value len 固定值(4 字节)
0:默认值

涂鸦云平台相关 DP

功能 数据方向 dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
短信通知 90 bool len
劫持报警 91 bool len

配对或取消配对

配对指令指的是配件和门锁配对时使用的指令,由手机通过透传通道(TUYA_BLE_CB_EVT_DATA_PASSTHROUGH)下发给配件,指令内容由配件 SDK 解析并处理,输出 API 接口给到用户使用。

数据
方向
data_value
下发 操作
(1 字节)
配件ID
(2 字节)
配件随机数
(8 字节)
从机 ID
(2 字节)
从机device_id
(16 字节)
从机login_key
(16 字节)
0x00:添加
0x01:删除
0-10000 配件随机数 0-10000 device id login key
上报 操作
(1 字节)
配件 ID
(2 字节)
配件随机数
(8字节)
从机 ID
(2 字节)
返回状态
(1 字节)
0x00:添加
0x01:删除
0-10000 配件随机数 0-10000 取值范围

门锁新增的DP

基于蓝牙门锁 DP 参考设计的锁类产品,如果需要支持配件,则需要使用以下 DP 代替原 DP,以保证门锁产品的安全性。

  • 使用 dp_id = 71 代替 dp_id = 6
  • 使用 dp_id = 73 代替 dp_id = 60

配对或取消配对

下发数据方向:手机→门锁

配对指的是配件和门锁配对时使用的指令,由手机通过门锁的 DP70 下发给门锁。

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_data_len
(1 字节)
dp_data_value
下发 70 raw len 主机 ID
(2 字节)
从机 ID
(2 字节)
随机数
(8字节)
操作
(1 字节)
待配置主机 ID
(2 字节)
待配置
主机随机数
(8字节)
0-10000 0-10000 主机随机数 0x00:添加
0x01:删除
0-10000 说明
上报 70 raw len 从机 ID
(2 字节)
主机 ID
(2 字节)
随机数
(8字节)
操作
(1 字节)
待配置主机 ID
(2 字节)
返回状态
(1 字节)
0-10000 0-10000 主机随机数 0x00:添加
0x01:删除
0-10000 取值范围

开关锁

配件仅允许使用该DP

下发数据方向 1:手机→门锁
下发数据方向 2:配件→门锁

如果选用了该 DP,就不允许再使用 dp_id = 6 的 DP,否则会导致设备的操作变得不安全。

开关锁指令是唯一一个允许配件使用的门锁 DP。
使用开关锁指令时,门锁端需要校验 主机 ID从机 ID随机数,才能保证安全。
开关锁时间戳开关锁方式开关锁信息 是配件下发的信息(给涂鸦 IoT 开发平台使用),门锁端只需要原样上报即可。

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_da
ta_len
(1
字节)
dp_data_value
下发 71 raw len 主机 ID
(2 字节)
从机 ID
(2 字节)
随机数
(8字节)
操作
(1 字节)
开关锁
时间戳
(4 字节)
开关锁
方式
(1 字节)
开关锁
信息
(len-18字节)
0-10000 0-10000 主机随机数 0x00:关锁
0x01:开锁
说明 说明 说明
上报 71 raw len 从机 ID
(2 字节)
主机 ID
(2 字节)
随机数
(8字节)
操作
(1 字节)
开关锁
时间戳
(4 字节)
开关锁
方式
(1 字节)
返回状态
(1 字节)
0-10000 0-10000 主机随机数 0x00:关锁
0x01:开锁
说明 说明 取值范围

开关锁记录

上报数据方向:门锁→手机

开关锁记录指令是门锁上报给手机的 DP。

使用开关锁记录指令时,门锁端需要添加从机 ID主机 ID随机数字段,才能保证安全。

开关锁时间戳开关锁方式开关锁信息 是配件在 开关锁 时下发给门锁的信息(给涂鸦 IoT 开发平台使用),门锁端只需要原样上报给手机即可。

数据
方向
dp_id
(1 字节)
dp_type
(1 字节)
dp_da
ta_len
(1
字节)
dp_data_value
上报 72 raw len 从机 ID
(2 字节)
主机 ID
(2 字节)
随机数
(8字节)
操作
(1 字节)
开关锁
时间戳
(4 字节)
开关锁
方式
(1 字节)
开关锁
信息
(len-18字节)
0-10000 0-10000 主机随机数 0x00:关锁
0x01:开锁
说明 说明 说明

远程开锁配置

下发数据方向:手机→门锁

如果选用了该 DP,就不允许再使用 dp_id = 60 的 DP,否则会导致设备的操作变得不安全。




dp_id
(1
字节)
dp_type
(1
字节)
dp_da
ta_len
(1
字节)
dp_data_value

73 raw len 主机 ID
(2
字节)
从机 ID
(2
字节)
随机数
(8
字节)
是否生效
(1 字节)
成员 ID
(2
字节)
秘钥
生效时间
(4 字节)
秘钥
失效时间
(4 字节)
秘钥
使用次数
(2 字节)
秘钥内容
(8
字节)
0
-10000
0
-10000
主机
随机数
0x00:失效
0x01:生效
0x01
-0x64
Unix 时间戳
(同附录 1)
Unix 时间戳
(同附录 1)
0x0000
-0xFFFF
ASCII 码

73 raw len 从机 ID
(2
字节)
主机 ID
(2
字节)
随机数
(8
字节)
是否生效
(1 字节)
成员 ID
(2
字节)
返回状态
(1 字节)
0
-10000
0
-10000
主机
随机数
0x00:失效
0x01:生效
0x01
-0x64
取值范围

获取离线记录(透传通道)

数据方向:手机→门锁

对于不支持配件的门锁,离线记录上报的触发条件一般是手机和门锁之间的 BONDING_CONN 事件发生后延时一定的时间。
对应支持配件的门锁,配件和门锁之间也会发生 BONDING_CONN 事件,但是离线记录不允许上报给配件,所以手机使用透传通道用于获取离线记录,门锁需要在收到 获取离线记录 的指令后上报离线记录。

数据方向 dp_data_value
下发 主机 ID
(2 字节)
从机 ID
(2 字节)
随机数
(8字节)
固定值
(1 字节)
0
-10000
0
-10000
主机
随机数
0x00
上报 上报的数据是所有的离线数据记录(开门记录,警报记录等)(带时间戳)

配件和门锁配对

蓝牙门锁配件 DP 参考

上图中 ①③⑤ 通过门锁的 dp_id=70 进行实现,②④ 通过配件的透传通道进行实现

① 手机和门锁的二次配对,手机在第一次进门锁面板时通过 DP70 下发数据给门锁,此时各个字段的实际内容如下:

  • 主机 ID:0xFFFF,代表手机
  • 从机 ID:涂鸦云平台给门锁分配的从机 ID
  • 随机数:第一次为全 0
  • 操作:添加
  • 待配置主机 ID:涂鸦云平台给手机分配的主机 ID
  • 待配置主机随机数:涂鸦云平台给手机分配的主机随机数

② 第一组配件和门锁配对,手机在开始配对时通过透传通道下发数据给配件,此时各个字段的实际内容如下:

  • 操作:添加
  • 配件 ID:涂鸦云平台给配件分配的主机 ID
  • 配件随机数:涂鸦云平台给配件分配的主机随机数
  • 从机 ID:涂鸦云平台给门锁分配的从机 ID
  • 从机 device_id:见《涂鸦BLE 通讯协议文档》
  • 从机 login_key:见《涂鸦BLE 通讯协议文档》

该过程已由 SDK/模组实现,用户无需关心,只需要调用相应 API/串口指令即可。

③ 第一组配件和门锁配对,手机在开始配对的时候通过 DP70 下发数据给门锁,此时各个字段的实际内容如下:

  • 主机 ID:0xFFFF,代表手机
  • 从机 ID:涂鸦云平台给门锁分配的从机 ID
  • 随机数:涂鸦云平台给手机分配的主机随机数,已经在步骤 ① 下发过给门锁
  • 操作:添加
  • 待配置主机 ID:涂鸦云平台给配件分配的主机 ID
  • 待配置主机随机数:涂鸦云平台给配件分配的主机随机数

④同②

⑤同③


完成配对后,门锁端存储着:

  • App 的 主机 ID + 主机随机数(1个)
  • 配件的 主机 ID + 主机随机数(1个/多个)
  • 门锁的 从机 ID(1个)

配件端存储着:

  • 配件的 主机 ID + 主机随机数(1个)

  • 门锁的 从机 ID(1个/多个)


注意:

如果 ② 或 ③ 两个过程中,有一个过程是成功的,则认为第一组配件和门锁配对成功,但是实际的情况是:

如果 ② 成功、③ 失败,则需要等到再次进入门锁面板补上 ③ 过程(同步),才是事实上的成功。

如果 ② 失败、③ 成功,则需要等到再次进入配件面板补上 ② 过程(同步),才是事实上的成功。

④ 和 ⑤ 是一样的情况。

附录

字节 含义 说明 举例
1 时效起始时间 unsigned int
4 字节(大端)
例如 Unix 时间为:
123-456-789 = 0x‭075BCD15‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
若时效为永久有效,则起始时间为 0x386CD300
07
2 5B
3 CD
4 15
5 时效结束时间 unsigned int
4 字节(大端)
例如 Unix 时间为:
999-999-999 = 0x‭3B9AC9FF‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
若时效为永久有效,则结束时间为 0x72BC9B7F
3B
6 9A
7 C9
8 FF
9 时效循环方式 0x00:不循环 0x01:天循环 0x02:周循环 0x03:月循环
10 循环标志位 1 不循环时 10-17
字节全部为 0
该字节
默认为 0x00
该字节
默认为 0x00
bit7:默认为 0
bit6:31 号
……
bit0:25 号
11 循环标志位 2 该字节
默认为 0x00
该字节
默认为 0x00
bit7:24 号
……
bit0:17 号
12 循环标志位 3 该字节
默认为 0x00
该字节
默认为 0x00
bit7:16 号
……
bit0:9 号
13 循环标志位 4 该字节
默认为 0x00
bit7:默认为0
bit6:周六
……
bit1:周一
bit0:周日
bit7:8 号
……
bit0:1 号
14 一天中起始时间 1(小时数) 起始时间:8:30 08(十进制)
15 一天中起始时间 2(分钟数) 30(十进制)
16 一天中结束时间 1(小时数) 结束时间:20:30 20(十进制)
17 一天中结束时间 2(分钟数) 30(十进制)

注意:
添加或修改开锁方式时,时效性的循环方式和次数同时生效,但是一般仅使用以下两种情况:

  • 次数为 0x00,此时次数为永久有效,可仅处理时效的循环方式。
  • 时效的循环方式为 0x00,此时为不循环,可仅处理次数。

例如,设置2018-01-26 08:00:00 到 2018-08-08 09:56:32 期间内,每周一至周五的早上 8:00 到 8:30 生效。

  • 2018-01-26 08:00:00 转换为 Unix 时间为 1516924800,即 0x‭5A6A6F80‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
  • 2018-08-08 09:56:32 转换为 Unix 时间为 1533693392,即 0x5B6A4DD0‬
  • 时效的循环方式为:0x02-周循环
  • 循环天标志位 1 = 循环天标志位 2 = 循环天标志位 3 = 0x00
  • 循环天标志位 4 = 0x3E(周一至周五)
  • 一天中的起始时间 1 = 0x08,一天中的起始时间 2 = 0x00
  • 一天中的结束时间 1 = 0x08,一天中的结束时间 2 = 0x1E

所以,时效性 = 0x ‭5A6A6F80 5B6A4DD0 02 0000003E 0800 081E‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬。