更新时间:2024-06-20 08:43:16下载pdf
本文介绍 蓝牙门锁配件 例如蓝牙钥匙、密码盘等应用中对应的 DP 功能、帧格式及其使用方法,适用于蓝牙门锁配件公版产品或项目。
下表罗列了本文涉及到的部分名词和解释。更多详情,请参考 涂鸦名词解释。
名词 | 解释 |
---|---|
DP | 全称为 Data Point,同时被称为 DP 点。一个 DP 指的就是一个功能点或者一条/对指令码。 |
PID | 全称为 Product ID,表示描述一类产品功能(DP)的集合。在涂鸦开发者平台创建的每一个产品都会产生一个唯一的产品编号,关联了产品具体的功能点、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/配件)分配 主机 ID + 主机随机数,用于唯一识别主机。
涂鸦云平台为从机(门锁)分配 从机 ID + 从机随机数,用于唯一识别从机。
涂鸦云平台首先将 App 的 主机 ID + 主机随机数 和门锁的 从机 ID 发送给门锁,此时认为 App 和门锁完成了业务配对。
然后将配件的 主机 ID + 主机随机数 发送给门锁,将配件的 主机 ID + 主机随机数 和门锁的 从机 ID 发送给配件,此时认为配件和门锁完成了业务配对。
此时,门锁端存储着:
配件端存储着:
此时,配件能够对门锁做的操作只有 开锁,且配件在做这一操作之前需要告诉门锁自己的身份(配件的 主机 ID + 主机随机数)和门锁的身份(门锁的 从机 ID),以此保证通信的安全。
字段 | 长度(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 从 1
开始。
主机 ID | 含义 | 从机 ID | 含义 |
---|---|---|---|
0 | 无效 | 0 | 无效 |
1 | 配件1 | 1 | 锁1 |
2 | 配件2 | 2 | 锁2 |
…… | …… | …… | …… |
10000 | 配件 10000 | 10000 | 锁 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。
同步本地添加的开锁方式
本地添加的开锁方式通过同步的方式上报给云端,目前有以下几种情况:
数据方向 | 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_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,以保证门锁产品的安全性。
下发数据方向:手机→门锁
配对指的是配件和门锁配对时使用的指令,由手机通过门锁的 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,随机数,才能保证安全。
开关锁时间戳,开关锁方式,开关锁信息 是配件下发的信息(给涂鸦开发者平台使用),门锁端只需要原样上报即可。
数据 方向 |
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,随机数字段,才能保证安全。
开关锁时间戳,开关锁方式,开关锁信息 是配件在 开关锁 时下发给门锁的信息(给涂鸦开发者平台使用),门锁端只需要原样上报给手机即可。
数据 方向 |
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_id
=70 进行实现,②④ 通过配件的透传通道进行实现
① 手机和门锁的二次配对,手机在第一次进门锁面板时通过 DP70 下发数据给门锁,此时各个字段的实际内容如下:
② 第一组配件和门锁配对,手机在开始配对时通过透传通道下发数据给配件,此时各个字段的实际内容如下:
该过程已由 SDK/模组实现,用户无需关心,只需要调用相应 API/串口指令即可。
③ 第一组配件和门锁配对,手机在开始配对的时候通过 DP70 下发数据给门锁,此时各个字段的实际内容如下:
④同②
⑤同③
完成配对后,门锁端存储着:
配件端存储着:
配件的 主机 ID + 主机随机数(1个)
门锁的 从机 ID(1个/多个)
注意:
如果 ② 或 ③ 两个过程中,有一个过程是成功的,则认为第一组配件和门锁配对成功,但是实际的情况是:
如果 ② 成功、③ 失败,则需要等到再次进入门锁面板补上 ③ 过程(同步),才是事实上的成功。
如果 ② 失败、③ 成功,则需要等到再次进入配件面板补上 ② 过程(同步),才是事实上的成功。
④ 和 ⑤ 是一样的情况。
字节 | 含义 | 说明 | 举例 | |||
---|---|---|---|---|---|---|
1 | 时效起始时间 | unsigned int 4 字节(大端) |
例如 Unix 时间为: 123-456-789 = 0x075BCD15 若时效为永久有效,则起始时间为 0x386CD300 |
07 | ||
2 | 5B | |||||
3 | CD | |||||
4 | 15 | |||||
5 | 时效结束时间 | unsigned int 4 字节(大端) |
例如 Unix 时间为: 999-999-999 = 0x3B9AC9FF 若时效为永久有效,则结束时间为 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
,即 0x5A6A6F80
2018-08-08 09:56:32
转换为 Unix 时间为 1533693392
,即 0x5B6A4DD0
所以,时效性 = 0x 5A6A6F80 5B6A4DD0 02 0000003E 0800 081E
。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈