简体中文
简体中文
English
联系我们
注册
登录
语言
简体中文
简体中文
English
联系我们
登录
注册
返回主站
layout空间导航

蓝牙门锁 DP 参考

更新时间:2021-06-08 06:28:07下载pdf

本文介绍了涂鸦智能蓝牙门锁应用中涉及的 DP 功能、帧格式及其使用方法,适用于蓝牙门锁公版项目。

背景信息

名词解释

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

名词 解释
DP 全称为 Data Point,同时被称为 DP 点。一个DP指的就是“一个功能点”或者“一条/对指令码”,DP-data point。
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和门锁设备的连接
  • 配对:视为一种过程,一系列的密钥交换过程
  • 绑定:视为一种状态,配对完成后的状态称之为“绑定状态”,处于绑定状态的两个设备可以进行安全通信
  • 重连:视为一种过程,依然是一系列的密钥交换过程,可以认为是简化的“配对” ,该过程的前提是此前已经进入过一次绑定状态。
  • 移除:视为一种过程,秘钥删除和绑定状态的清除

DP格式

使用涂鸦蓝牙模组开发时,dp_data_len 的长度为 2 个字节。其他 DP 格式信息,请参见下表:

字段 长度(bytes) 说明
dp_id 1 DP的指令码
dp_type 1 DP的数据类型
dp_data_len 1 DP的数据长度
dp_data_value dp_data_len DP的数据内容

管理开锁方式

添加开锁方式




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

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

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

交互示例

  • 当开锁方式为密码、门卡、人脸时,交互流程如下图所示:

    蓝牙门锁 DP 参考

  • 当开锁方式为指纹时,交互流程如下图所示:

    蓝牙门锁 DP 参考

删除开锁方式




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

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

2 raw len 类型
(1字节)
阶段
(1字节)
管理员标记
(1字节)
成员ID
(1字节)
硬件ID
(1字节)
删除方式
(1字节)
返回状态
(1字节)
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 类型
(1字节)
阶段
(1字节)
管理员标记
(1字节)
成员ID
(1字节)
硬件ID
(1字节)
时效性
(17
字节)
次数
(1字节)
密码
长度
(1字
节)
密码
内容
(n字
节)
0x00:
仅修改
某个成员
的时效性
0x00:默认 0x00:普通成员
0x01:管理员
0x01
~0x64
0xFF:默认值 详见
附录1
0x00:
默认值
(次数不
允许修改)
说明 说明
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
0x00:默认 0x00:普通成员
0x01:管理员
0x01
~0x64
0x00~0xFE 详见
附录1
取值
范围
说明 说明

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

添加临时密码

临时密码包括一次性密码和周期性密码。临时密码和普通密码的不同之处有以下几点:

  • 临时密码不属于任何成员

  • 临时密码的时效性在连接状态下可单独更改

  • 临时密码作为开门方式时的类型定义为0xF0(0x01为密码,0x02为门卡,0x03为指纹……)

  • 风险

    断开网络后,如果设备断电,会导致本地时钟不能正确工作,如果不能及时连接上网络同步时钟,周期性密码的周期重复功能会出现在本地无法准确判断的问题。

    解决方案建议:

    • 本地添加后备电池,确保本地时钟不因断电产生异常;
    • 产品接受在上述情况下产生的问题。
数据
方向
dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
下发 51 raw len 类型
(1字节)
时效性
(17字节)
次数
(1字节)
密码长度
(1字节)
密码内容
(n字节)
0x00:类型0
0x01:类型1
详见附录1 取值范围 密码字节数n
(仅用于密码类型)
说明
上报 51 raw len 硬件ID
(1字节)
返回状态
(1字节)
0x00~0xFE 0x00:添加成功
0x01:添加失败
0x02:硬件ID分配完

删除临时密码

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

修改临时密码

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

同步开锁方式

为了保持服务器和设备本地开锁方式的一致性,每次进入app的硬件列表/在app的硬件列表界面下拉刷新时都需要进行开锁方式的全量同步(手机和本地添加的所有开锁方式)。
“硬件类型枚举”用来通知本地本次需要同步的硬件类型,未下发的硬件类型本地无需上报。阶段为“同步中”的每包数据长度由用户自定义,每包数据总长度不大于200个字节。
更多详情,请参考 相关FAQ

同步本地添加的开锁方式
本地添加的开锁方式通过同步的方式上报给云端,目前有以下几种情况:
1) 上报时用户ID为0xFF,云端统一将本地添加的开锁方式挂到配网账户下,并存储相应的用户ID,之后每次下发该类开锁方式时,相应的用户ID也为0xFF(仅用于百洛、汇力挂锁,云端不可删除);
2) 上报时用户ID为0xFD,云端统一将本地添加的开锁方式挂到配网账户下,并存储相应的用户ID,之后每次下发该类开锁方式时,相应的用户ID也为0xFD(通用)。

数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
下发 54 raw len 硬件类型枚举
(len字节)
0x01:密码
0x02:门卡
0x03:指纹
0x04:人脸
上报 54 raw len 阶段
(1字节)
数据包序号
(1字节)
同步数据
(n字节)
0x00:同步中 0x00~0xFF 数据1、数据2、……、数据n
上报 54 raw len 阶段
(1字节)
总包数
(1字节)
0x01:同步结束 总包数

旧版同步开锁方式(即将弃用)

为了尽量降低同步时的传输数据量,每次仅同步有差异化的部分。同步开锁方式开始时,App会将服务器端储存的硬件ID、硬件类型和每个硬件ID绑定的属性(例如成员ID,冻结状态)的crc8值下发给本地,本地收到数据后与本地存储的数据进行比对,然后选取有差异化的硬件ID,并将其属性值重新上传。

数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
下发 35 raw len 硬件ID个数
(1字节)
下发硬件1
(3字节)
下发硬件2
(3字节)
…… 下发硬件n
(3字节)
个数 详见说明 详见说明 …… 详见说明
上报 35 raw len 硬件ID个数
(1字节)
上报硬件1
(3字节)
上报硬件2
(3字节)
…… 上报硬件n
(3字节)
个数 详见说明 详见说明 …… 详见说明

说明:

  • 下发硬件n = 硬件IDn+硬件类型+硬件CRC8
  • 上报硬件n = 操作类型+硬件IDn+硬件类型+硬件属性
  • 操作类型:1字节,0x00-更新硬件属性(服务器和本地不一致),0x01-删除该硬件ID(本地无记录);
    硬件类型:1字节,0x01-密码,0x02-门卡,0x03-指纹,0x04-人脸;
    硬件属性:2字节
    • 成员ID:1字节,取值范围:0x01~0x64;
    • 冻结状态:1字节,0x01-未冻结,0x00-冻结。
  • crc8计算方法:此处的crc8为crc16取低字节,crc16的 C 语言计算方法如下:

    uint16_t cpt_crc16_compute(uint8_t* buf, uint16_t size, uint16_t* p_crc)
        {
            uint16_t poly[2] = {0, 0xa001}; //0x8005 <==> 0xa001
            uint16_t crc = 0xffff;
            int i, j;
            for(j=size; j>0; j--)
            {
                uint8_t ds = *buf++;
                for(i=0; i<8; i++)
                {
                    crc = (crc >> 1) ^ poly[(crc ^ ds) & 1];
                    ds = ds >> 1;
                }
            }
            return crc;
        }
    

引导功能

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

冻结解冻用户

  • 冻结和解冻的对象为其他成员(包含分享用户);
  • 家庭所有者和管理员都可对其他成员进行冻结/解冻;
  • 为了保持和本地的一致性,冻结/解冻指令仅在设备处于连接状态时才能在面板上操作;
  • 一旦冻结后,该成员下的所有开门方式都将被冻结,除非解冻;
  • 一旦冻结后,成员对开门方式的增删改等操作也没有权限,除非解冻;
  • 一旦冻结后,家庭所有者和管理员唯一可对其进行的操作就是“解冻”;
功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
冻结用户 下发/上报 49 value len 成员ID
(4字节)
0x01~0x64
解冻用户 下发/上报 50 value len 成员ID
(4字节)
0x01~0x64

蓝牙开关锁

当 App 成功连接蓝牙门锁并通过面板进行开锁,设备收到请求后开锁,通过 ID 为 19 的 DP 上报开锁记录。

数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
下发 6 raw len 功能
(1字节)
成员ID
(1字节)
0x00:关锁
0x01:开锁
0x01~0x64
上报 6 raw len 返回状态
(1字节)
成员ID
(1字节)
0x00:失败
0x01:成功
0x01~0x64

配置远程开锁

  • 进行远程开锁前,您必须先配置远程开锁。
  • “远程开锁”指令里的“秘钥内容”就是通过“远程开锁配置”指令进行配置的,且至少通过网关→蓝牙设备的链路进行一次成功的配置。
  • 该指令中的“是否生效”“成员ID”“秘钥生效时间”“秘钥失效时间”“秘钥使用次数”都是预留的字段,可不做处理。



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

60 raw len 是否生效
(1字节)
成员ID
(2
字节)
秘钥
生效时间
(4字节)
秘钥
失效时间
(4字节)
秘钥
使用次数
(2字节)
秘钥内容
(8
字节)
0x00:失效
0x01:生效
0x01
~0x64
unix时间戳
(同附录1)
unix时间戳
(同附录1)
0x0000
~0xFFFF
ASCII码

60 raw len 返回状态
(1字节)
成员ID
(2
字节)
取值范围 0x01
~0x64

远程开锁

远程开锁指的是通过网关的通信链路进行开锁:

  • 如果是手机通过网关进行开锁,则称为“手机远程开锁”;
  • 如果是音箱通过网关进行开锁,则称为“语音远程开锁”。
  • 如果是手机直连蓝牙设备进行开锁,则称为“蓝牙开锁”。

注意:无论是“远程开锁”还是“蓝牙开锁”,都应该做开锁处理,两种开锁方式只是数据链路不同,实际的业务含义是一致的。

数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_da
ta_len
(1字节)
dp_data_value
下发 61 raw len 功能
(1字节)
成员ID
(2字节)
秘钥内容
(8字节)
解锁方式
(2字节)
0x00:关锁
0x01:开锁
0x01~0x64 ASCII码 0x0000:远程开锁
0x0001:手机开锁
0x0002:语音开锁
上报 61 raw len 返回状态
(1字节)
成员ID
(2字节)
取值范围 0x01~0x64

获取开锁记录

数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_da
ta_len
(1字节)
dp_data_value
上报 69 raw len 从机ID
(2字节)
动作
(1字节)
0~10000 0x01:请求开锁记录
下发 69 raw len 主机ID
(2字节)
从机ID
(2字节)
随机数
(8字节)
固定值
(1字节)
0~10000 0~10000 主机随机数 0x00

新组合开锁

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

锁相关设置

设置类DP在面板端的默认值规定如下:

  • dp_type = bool,dp_data_value = 0x00;
  • dp_type = value,dp_data_value = 0x00000000;
  • dp_type = string,dp_data_value = “”;
  • dp_type = enum,dp_data_value = 0x00;
功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
门铃音效 下发/上报 26 enum len 音效(1字节)
0x00:音效0
……
0x0A:音效10
门铃音量 下发/上报 27 enum len 音量(1字节)
取值范围
按键音量 下发/上报 30 enum len 音量(1字节)
取值范围
本地导航音量 下发/上报 31 enum len 音量(1字节)
取值范围
锁语言 下发/上报 28 enum len 语言(1字节)
取值范围
单一开锁与
组合开锁切换
下发/上报 34 enum len 开锁方式的
可能组合(1字节)
取值范围
锁帖电机
转动方向
下发/上报 48 enum len 转动方向(1字节)
0x00:顺时针开
0x01:逆时针开
电机扭力 下发/上报 56 enum len 电机扭力(1字节)
取值范围
手动关锁 下发 46 bool len 固定值(1字节)
0x01
上报 46 bool len 返回状态(1字节)
0x00:失败
0x01:成功
离家布防 下发/上报 58 bool len 开关(1字节)
0x00:关闭
0x01:打开
自动关锁开关 下发/上报 33 bool len 开关(1字节)
0x00:关闭
0x01:打开
自动关锁定时 下发/上报 36 value len 定时时间(s)(4字节)
0x00000001~0xFFFFFFFF
显示屏欢迎词 下发/上报 29 string len 欢迎词(len字节)
0~50bytes
特殊功能 下发/上报 68 enum len 功能(1字节)
0x00:功能0
0x01:功能1
……

实时状态

状态类DP在面板端的默认值规定如下:

  • dp_type = bool,dp_data_value = 0x00;
  • dp_type = value,dp_data_value = 0x00000000;
  • dp_type = string,dp_data_value = “”;
  • dp_type = enum,dp_data_value = 0x00;
功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
电量百分比 上报 8 value len 百分比(4字节)
0x00~0x64
电量档位 上报 9 enum len 档位(1字节)
取值范围
童锁状态 上报 10 bool len 状态(1字节)
0x00:童锁关闭
0x01:童锁打开
上提反锁状态 上报 11 bool len 状态(1字节)
0x00:未上提反锁
0x01:已上提反锁
反锁状态 下发/上报 32 bool len 状态(1字节)
0x00:未反锁
0x01:已反锁
门铃提醒 上报 24 bool len 固定值(1字节)
0x00
门开合状态 上报 40 enum len 状态(1字节)
0x00:“unknown”
0x01:“open”
0x02:“closed”
锁开合状态 上报 47 bool len 状态(1字节)
0x00:锁关闭
0x01:锁打开

记录上报

功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
指纹开锁 上报 12 value len 硬件ID(4字节)
0x00~0xFE
密码开锁 上报 13 value len 硬件ID(4字节)
0x00~0xFE
门卡开锁 上报 15 value len 硬件ID(4字节)
0x00~0xFE
机械钥匙开锁 上报 16 value len 硬件ID(4字节)
0x00~0xFE
人脸开锁 上报 39 value len 硬件ID(4字节)
0x00~0xFE
虹膜开锁 上报 41 value len 硬件ID(4字节)
0x00~0xFE
掌纹开锁 上报 42 value len 硬件ID(4字节)
0x00~0xFE
指静脉开锁 上报 43 value len 硬件ID(4字节)
0x00~0xFE
临时密码开锁 上报 55 value len 硬件ID(4字节)
0x00~0xFE
组合开锁 上报 57 enum len 开锁方式的
可能组合(1字节)
取值范围
蓝牙开锁 上报 19 value len 成员ID(4字节)
0x00~0x64
远程手机开锁 上报 62 value len 成员ID(4字节)
0x00~0x64
远程语音开锁 上报 63 value len 成员ID(4字节)
0x00~0x64
门从内侧打开 上报 18 bool len 固定值(1字节)
0x00
报警原因 上报 21 enum len 报警原因(1字节)
取值范围

其他密码

本小节介绍了作为开锁方式的其他密码,包括离线密码和动态密码。

离线密码

  • 使用场景:

    操作人员通过APP/SaaS获取离线密码,并告知用户

    • 用户得到单次密码:6h内使用,开门成功,密码失效,并产生一条开门记录
      6h后失效

    • 用户得到时效密码:24h内使用1次,密码激活,时效内都可使用,使用一次产生一条开门记录
      24h内未使用,失效

    • 用户得到清空单条密码:时效性和要清空的那条密码相同,多次使用只有第1次生效,产生使用过“清空单条密码”的记录

    • 用户得到清空所有密码:24h内使用,清空所有密码,只有1次,产生使用过"清空所有密码"的记录
      24h后失效

  • 清空单条密码/所有密码的限制:

    • 只能清空“至少使用过1次的时效密码(即激活的时效密码)”
    • 不能清空“单次密码”,因为单次密码使用1次后就失效了
  • 使用方式请参考示例代码

    在SDK安装包的 lock_hard.c 文件中。

动态密码

  • 门锁本地和云端都独立拥有一套完全相同的动态密码生成算法,两者唯一的联系在于unix时间戳。如果门锁本地和云端的unix时间戳相差不超过300s,则认为两者生成的动态密码一致,此时门锁本地允许开门。

  • 动态密码实际的实现机制略有不同,但生成结果如上所述,客户调用方式如下:

    if(DYNAMIC_PWD_VERIFY_SUCCESS == lock_dynamic_pwd_verify(&data[0], 8)) {
        APP_DEBUG_PRINTF("lock_open_with_dynamic_pwd_success");
    } else{
        APP_DEBUG_PRINTF("lock_open_with_dynamic_pwd_fail");
    }
    

相关协议

功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
离线密码
设置T0时间
下发/上报 64 string len T0时间戳字符串(10字节)
unix时间戳字符串
离线密码开锁 上报 67 raw len 加密后的开锁密码(16字节)
详见说明
离线密码
清空单条
上报 65 raw len 加密后的清空码(16字节)
详见说明
离线密码
清空所有
上报 66 raw len 加密后的清空码(16字节)
详见说明
动态密码开锁 上报 14 value len 硬件ID(4字节)
0xFF:默认值

说明: 加密后的清空码为output。

app_port_aes128_cbc_encrypt(login_key, iv, input, input_len, output);
  • key:16字节无符号整数,默认填充字符‘0’,在结尾填充“tuya_ble_current_para.sys_settings.login_key”(6字节),例如login_key为‘8f7d54’,则key为‘00000000008f7d54’;
  • iv:16字节无符号整数,向量,默认值16个0x00;
  • input:16字节无符号整数,默认填充字符‘0’,在结尾填充离线密码的明文(10字节),例如离线密码的明文为‘0123456789’,则input为‘0000000123456789’;
  • output:16字节无符号整数,aes加密的结果,即为dp_id=65/66/67的dp_data_value;

仅云端用的DP

功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
短信通知 25 bool len
劫持报警 22 bool len
硬件时钟RTC 44 bool len

支持锁配件的 DP

如果您的智能门锁需要支持门锁配件,则需要使用这几个 DP,更多详情,请参考 锁配件 DP 协议 的锁新增DP章节。

功能 数据方向 dp_id
(1字节)
dp_type
(1字节)
dp_data_len
(1字节)
dp_data_value
配置主机随机数 70 raw len 见链接
开关锁 71 raw len
开关锁记录 72 raw len
远程开锁配置 73 raw len

附录

字节 含义 说明 举例
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:002018-08-08 09:56:32期间内,每周一至周五的早上8:00到8:30生效,则时效性为 0x ‭5A6A6F80 5B6A4DD0 02 0000003E 0800 081E‬‬‬‬‬‬:‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬

  • 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