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

Wi-Fi 门禁 DP 参考

更新时间:2021-10-27 03:07:08下载pdf

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

背景信息

名词解释

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

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

DP 格式

使用涂鸦Wi-Fi门禁模组 dp_data_len 的长度为 2 字节。其他 DP 格式信息,请参见下表:

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

交互示例

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

    Wi-Fi 门禁 DP 参考

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

Wi-Fi 门禁 DP 参考

解锁方式管理

解锁方式是跟用户信息相关的,例如用户的指纹、解锁密码、动态密码、人脸ID等。

添加解锁方式

下发

  • 数据流向:下发

  • dp_id(1byte):1

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    时效性
    (17字节)
    次数
    (1字节)
    密码长度
    (1字节)
    密码内容
    (n字节)
    消息UUID
    (2字节)
    0x01:密码
    0x02:门卡
    0x03:指纹
    0x04:人脸
    0x07:遥控器
    0x00:开始录入
    0xFE:取消录入
    0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 详见:时效性说明 0x00:永久有效
    0x01:一次有效
    0xyy:yy次有效
    0xFF:失效
    密码字节数n
    (仅用于密码类型)
    密码以数值形式下发
    如密码为123456,则下发密码内容[0x01,0x02,0x03,0x04,0x05,0x06]
    消息唯一序号,用于关联对应的消息上报;适用于DP通过云端下发的场景

上报

  • 数据流向:上报

  • dp_id(1byte):1

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    次数
    (1字节)
    添加的返回状态
    (1字节)
    消息UUID(2字节)
    0x01:密码

    0x02:门卡

    0x03:指纹

    0x04:人脸

    0x07:遥控器
    0x00:录入开始 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 需要录入的总次数,例如指纹可能是8次,门卡一般是1次 0x00,默认值 同下发
    0xFC:录入中 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 当前录入次数,例如指纹可能需要8次,填写当前录入次数(从1开始) 录入异常原因:
    0x00:无异常,指纹采图成功
    0x01:指纹采图失败,指纹不全/湿手指等
    0xFD:录入失败 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 用于表示当前处于的阶段:
    0x00:录入开始
    0xFC:录入中
    0xFF:录入完成
    失败原因:
    0x00-录入超时,
    0x01-录入失败,
    0x02-重复录入
    0x03-硬件ID分配完,
    0x04-添加密码错误,字段为非数字(备用)
    0x05-添加密码,密码长度错误,
    0x06-不支持添加的开锁方式类型
    0x07-当前正在指纹录入,
    0x08-当前正在绑定门卡,
    0x09-当前正在绑定人脸,
    0x0A-密码过于简单,
    0xFE:错误硬件ID
    0xFE:取消录入
    (APP端发起)
    0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 0x00,默认值 0x00,默认值
    0xFF:录入完成 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 0x00,默认值 0x00,默认值

删除解锁方式

下发

  • 数据流向:下发

  • dp_id(1byte):2

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    删除方式
    (1字节)
    0x00:删除成员 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 0x00:删除成员下所有解锁方式
    0x01:密码
    0x02:门卡
    0x03:指纹
    0x04:人脸
    0x07:遥控器
    0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 0x01:删除成员中的一个解锁方式

上报

  • 数据流向:上报

  • dp_id(1byte):2

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    删除方式
    (1字节)
    修改返回状态
    (1字节)
    0x00:删除成员 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 0x00:删除成员下所有解锁方式 0x00:删除失败
    0xFF:删除成功

    0x01:硬件编号不存在
    0x02:该编号不能删除(如管理员)
    0x01:密码
    0x02:门卡
    0x03:指纹
    0x04:人脸
    0x07:遥控器
    0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 0x01:删除成员中的一个解锁方式 0x00:删除失败
    0xFF:删除成功

    0x01:硬件编号不存在
    0x02:该编号不能删除(如管理员)

修改解锁方式

下发

  • 数据流向:下发

  • dp_id(1byte):3

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    时效性
    (17字节)
    次数
    (1字节)
    密码长度
    (1字节)
    密码内容
    (n字节)
    0x00:只修改成员时效 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 详见:时效性说明 0x00:默认
    (不允许修改)
    密码字节数n
    (仅用于密码类型)
    密码以数值形式下发
    如密码为123456,则下发密码内容[0x01,0x02,0x03,0x04,0x05,0x06]
    0xF1:只修改成员角色 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 无后续字段
    0x01:密码
    0x02:门卡
    0x03:指纹
    0x04:人脸
    0x07:遥控器
    0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 详见:时效性说明 0x00:永久有效
    0x01:一次有效
    0xyy:yy次有效
    0xFF:失效
    密码字节数n
    (仅用于密码类型)
    密码以数值形式下发
    如密码为123456,则下发密码内容[0x01,0x02,0x03,0x04,0x05,0x06]

上报

  • 数据流向:上报

  • dp_id(1byte):3

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    阶段
    (1字节)
    管理员标记
    (1字节)
    成员ID
    (2字节)
    硬件ID
    (2字节)
    次数
    (1字节)
    添加的返回状态
    (1字节)
    0x00:只修改成员时效 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 0x00:默认 0x00:修改失败
    0xFF:修改成功
    0xF1:只修改成员角色 0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0xFFFF:默认值 0x00:默认 0x00:修改失败
    0xFF:修改成功
    0x01:密码
    0x02:门卡
    0x03:指纹
    0x04:人脸
    0x07:遥控器
    0x00:默认 0x00:普通成员
    0x01:管理员
    0x0001~0xFFFE 0x0000~0xFFFE 0x00:永久有效
    0x01:一次有效
    0xXX:x次有效
    0xFF:失效
    0x00:修改失败
    0xFF:修改成功

同步解锁方式

为了保持云端和设备本地解锁方式的一致性,每次在app的解锁方式列表界面下拉刷新时都需要进行解锁方式的同步。

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

字段描述:

  • 阶段:用于描述当前同步的进度,0x00-表示同步中,0x01-表示同步结束
  • 数据包序号:用于描述同步序号的序号,从0开始依次递增。
  • 总包数:用于描述发送的总同步中包数,例如发送了2次阶段为同步中的包,则总包数为2

同步数据字段包括:硬件ID+硬件类型+硬件属性,具体为:

  • 硬件ID:2字节,取值范围:0x0000~0xFFFE;
  • 硬件类型:1字节
    • 0x01-密码
    • 0x02-门卡
    • 0x03-指纹
    • 0x04-人脸
    • 0x07-遥控器,
    • 0xF0-临时密码
  • 硬件属性:3字节,由成员ID冻结状态组成:
    • 成员ID:2字节,取值范围0x0001~0xFFFE;
    • 冻结状态:1字节,0x01-未冻结,0x00-冻结。

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

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

临时密码管理

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

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

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

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

  • 风险

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

    解决方案建议:

    • 本地添加后备电池,确保本地时钟不因断电产生异常;
    • 产品接受在上述情况下产生的问题。

添加临时密码

  • 密码类型:

    • 类型0:在时效的起始时间和结束时间范围内,次数有效,时效的循环方式无效,循环方式默认为0x00
    • 类型1:在时效的起始时间和结束时间范围内,次数无效,时效的循环方式有效,次数默认为0x00
  • 功能描述:

    • 临时密码不属于任何成员
    • 临时密码的时效性在连接状态下可单独更改
    • 临时密码解锁方式的类型为0xF0(如普通解锁方式0x01为密码,0x02为门卡,0x03为指纹…)

下发

  • 数据流向:下发

  • dp_id(1byte):5

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    类型
    (1字节)
    时效性
    (17字节)
    次数
    (1字节)
    密码长度
    (1字节)
    密码内容
    (n字节)
    消息UUID
    (2字节)
    0x00:类型0
    0x01:类型1
    详见:时效性说明 0x00:永久有效
    0x01:一次有效
    0xyy:yy次有效
    0xFF:失效
    密码字节数n
    (仅用于密码类型)
    密码以数值形式下发
    如密码为123456,则下发密码内容[0x01,0x02,0x03,0x04,0x05,0x06]
    消息唯一序号,用于关联对应的消息上报;适用于dp通过云端下发的场景

上报

  • 数据流向:上报

  • dp_id(1byte):5

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    硬件ID
    (2字节)
    返回状态 消息UUID
    (2字节)
    0x0000~0xFFFE 0x00:添加成功
    0x01:添加失败
    0x02:硬件ID分配完
    0x03:重复录入
    0x0A-密码过于简单
    同下发

删除临时密码

数据流向 dp_id(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
下发 6 raw len 硬件ID
(2字节)
0x0000~0xFFFE
上报 6 raw len 硬件ID
(2字节)
返回状态
(1字节)
0x0000~0xFFFE 0x00:删除成功
0x01:删除失败

修改临时密码

下发

  • 数据流向:下发

  • dp_id(1byte):7

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    硬件ID
    (2字节)
    类型
    (1字节)
    时效性
    (17字节)
    次数
    (1字节)
    密码长度
    (1字节)
    密码内容
    (n字节)
    0x0000~0xFFFE 同添加 同添加 同添加 同添加,如密码长度为0,表示密码内容不做修改 同添加

上报

  • 数据流向:上报

  • dp_id(1byte):7

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    硬件ID
    (2字节)
    返回状态
    (1字节)
    0x0000~0xFFFE 0x00:修改成功
    0x01:修改失败

远程解锁

远程解锁-设置秘钥

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

下发

  • 数据流向:下发

  • dp_id(1byte):8

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    是否生效 (1字节) 成员ID (2字节) 秘钥生效时间 (4字节) 秘钥失效时间 (4字节) 秘钥使用次数 (2字节) 秘钥内容 (8字节)
    0x00:失效 0x01:生效 0x0001~0xFFFF 时间戳 时间戳 次数(该值目前是0000FFFF) ASCII码

上报

  • 数据流向:上报

  • dp_id(1byte):8

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    状态
    (1字节)
    成员ID
    (2字节)
    0x00:成功
    0x01:失败
    0x0001~0xFFFF

免密远程解锁

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

  • 如果是通过手机进行开锁,则称为 手机远程开锁
  • 如果是通过音箱进行开锁,则称为 语音远程开锁

下发

  • 数据流向:下发

  • dp_id(1byte):9

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    状态
    (1字节)
    成员ID
    (2字节)
    秘钥内容
    (8字节)
    解锁方式
    (2字节)
    通道ID
    (2字节)
    0x00:关门
    0x01:开门
    0x0001~0xFFFE ASCII码 0x00:未知远程解锁
    0x01:app面板解锁
    0x02:语音音响解锁
    0x03:遥控器解锁
    0x0000~0xFFFE
    默认0xFFFF

上报

  • 数据流向:上报

  • dp_id(1byte):9

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    返回状态
    (1字节)
    成员ID
    (2字节)
    通道ID
    (2字节)
    0x00:成功
    0x01:失败
    0x02:失效
    0x03:秘钥次数使用完
    0x04:秘钥不在有效期内
    0x05:秘钥比对错误
    0x0001~0xFFFE 0x0000~0xFFFE
    默认0xFFFF

锁相关设置

设置类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(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
单一/组合解锁 下发/上报 25 enum 0x01 组合解锁方式枚举(1字节)
0x00:单一解锁
0x01:指纹+密码
0x02:指纹+门卡
0x03:指纹+人脸
0x04:密码+门卡
0x05:密码+人脸
0x06:门卡+人脸
门禁报警音量 下发/上报 26 enum 0x01 音量枚举(1字节)
0x00:静音
0x01:音量低
0x02:音量中
0x03:音量高
门锁语言 下发/上报 27 enum 0x01 语言枚举(1字节)
0x00:简体中文
0x01:英文
0x02:日文
...
0x09:繁体中文
0x0A:韩语
自动落锁延时 下发/上报 31 value 0x04 延时时长(4字节)
单位:秒
自动落锁开关 下发/上报 30 bool 0x01 状态(1字节)
0x00:关闭
0x01:开启
开门速度 下发/上报 32 enum 0x01 开门速度
0x00:低速
0x01:中速
0x02:高速
开门比例 下发/上报 33 value 0x01 比例(1字节)
按百分之5递增
报警声音时间 下发/上报 34 value 0x01 时间(1字节)
0-30min,默认3min

呼叫、拍照和告警等设置

  • 再次拍照:点击面板上的重新拍摄会触发一次对应DP的下发。
  • 语音播报:具体多语言支持客户自己配置. 请求远程解锁拒绝,面板上可选对应的拒绝原因,此时面板会通过该DP下发。设备完全基于该DP数值来决定是否播放对应的拒绝原因。
  • 告警弹窗:设备主动上报,此时面板有对应的消息通知,用户可选择不解除与解除报警,通过 DP39 下发告知设备。
功能 数据流向 dp_id(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
请求远程开门 下发/上报 24 raw len 多通道呼叫
上报数值请查看:通道协议说明

上报数值
00:请求开门

下发取值:
00:解锁
01:拒绝解锁
再次拍照 下发/上报 36 bool 0x01 是否再次拍照(1字节)
ture:拍照
false:不处理
语音播报 下发/上报 37 enum 0x01 播放类型(1字节)
0x00:第一段
0x01:第二段
0x02:第三段
0x03:第四段
0x04:第五段
0x05:第六段
告警弹窗 上报 38 raw len 多通道告警
具体查看:通道协议说明

取值:
00:本地解除
01:异常报警
解除告警 下发 39 raw len 多通道告警
具体查看:通道协议说明

取值:
0x00:不解除
0x01:解除报警
上报 39 raw len 具体查看:通道协议说明

取值:
0x00:解除失败
0x01:解除成功
0x02:未知(可能是下发了无效的指令,例如设备没有报警但下发了解除的指令)

常开设置项

下发

功能 数据流向 dp_id(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
常开设置开关 下发/上报 28 bool 0x01 状态(1字节)
0x00:关闭
0x01:开启

上报

  • 数据流向:上报

  • dp_id(1byte):29

  • dp_type(1byte):raw

  • dp_data_len(2byte):len

  • dp_value:见下表

    是否永久
    (1字节)
    周循环
    (1字节)
    时段个数
    (1字节)
    时段内容
    (n字节)
    0x00:非永久
    0x01:永久

    默认永久
    详见:附件1-时效性中的周编码示例 时段的个数,取值:0x00~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(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
门开合状态 35 raw 0x03 多通道状态
具体查看:通道协议说明

取值范围:
0x01:门打开
0x02:门关闭

记录上报

下表中:

  • 数据流向均为上报。
  • 功能点的 dp_type 均为 raw 型,占 1 个 byte。
上报记录类型 dp_id(1byte) dp_data_len(2byte) dp_data
指纹解锁 10 0x06 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF
普通密码解锁 11 0x06 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF
门卡解锁 12 0x06 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF
遥控器解锁 14 0x06 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE
默认:0xFF
0x0000 ~ 0xFFFE
默认值:0xFFFF
人脸识别解锁 13 0x06 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF
告警状态上报 23 0x01 报警枚举(1字节) 通道ID(2字节)
0=指纹试错报警
1=密码试错报警
2=卡试错报警
3=人脸试错报警
4=防撬报警
5=未识别开门
6=门铃告警
0x0000 ~ 0xFFFE
默认值:0xFFFF
组合解锁 15 0x02 组合解锁方式枚举
(1字节)
成员ID
(2字节)
通道ID(2字节)
0x01:指纹+密码
0x02:指纹+门卡
0x03:指纹+人脸
0x04:密码+门卡
0x05:密码+人脸
0x06:门卡+人脸
0x01~0x64 0x0000 ~ 0xFFFE
默认值:0xFFFF
离线密码解锁 17 0x10 离线密码记录 通道ID(2字节)
详见离线密码记录说明 0x0000 ~ 0xFFFE
默认值:0xFFFF
所有离线密码清空 19 0x10 离线密码记录 通道ID(2字节)
详见离线密码记录说明 0x0000 ~ 0xFFFE
默认值:0xFFFF
单条离线密码清除 21 0x10 离线密码记录 通道ID(2字节)
详见离线密码记录说明 0x0000 ~ 0xFFFE
默认值:0xFFFF
临时密码解锁 16 0x04 硬件ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF
app远程解锁 22 0x04 成员ID(4字节) 通道ID(2字节)
0x0000~0xFFFE 0x0000 ~ 0xFFFE
默认值:0xFFFF

其他密码

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

离线密码

  • 使用场景:

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

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

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

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

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

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

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

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

为离线密码设置T0时间

T0 时间戳字符串为 HexStr。例如,如当前时间戳为1586845269,则下发的 T0 时间戳字符串为5E955655

数据流向 dp_id(1byte) dp_type(1byte) dp_data_len(2byte) dp_data
下发 18 string len T0时间戳
(8字节)
T0时间戳字符串
上报 18 string len T0时间戳
(8字节)
T0时间戳字符串

离线密码记录说明

用户输入的解锁密码解密后的字符串,再通过 AES 加密作为数据内容的 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,则 input0000000123456789
  • output:16字节无符号整数,AES 加密的结果,即为dp_id=65/66/67的dp_data_value。

附录

附录一:时效性说明

字节 含义 说明 举例
1 时效
起始时间
unsigned int

4字节(大端)
例如unix时间为:

123-456-789 = 0x075BCD15
若时效为永久有效,则起始时间为0x00000000
7
2 5B
3 CD
4 15
5 时效
结束时间
unsigned int

4字节(大端)
例如unix时间为:

999-999-999 = 0x3B9AC9FF
若时效为永久有效,则结束时间为0x7FFFFFFF
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(十进制)

周编码示例:

bit7保留 bit6周六 bit5周五 bit4周四 bit3周三 bit2周二 bit1周一 bit0周日
0 0 1 0 1 0 1 0 0x2A
0 0 1 1 0 1 0 1 0x35
0 1 1 1 0 0 1 0 0x72
0 1 1 1 1 1 1 1 0x7F

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

  • 次数为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

附录二:通道协议

多通道数据定义:

通道总数(1字节) 通道信息
0x00 ~ 0xFE 详见 通道段位说明

通道段位:每个通道用两个字节表示:

  • 第一个字节表示当前通道的序号(从0开始)。
  • 后面 n-1 个字节表示当前通道的值。

以最多4个通道的场景,举例如下(假设DP的值占一个字节):

场景 通道1的值(1字节) 通道2的值(1字节) 通道3 的值(1字节) 通道4的值(1字节) 最终上报/下发的数据
假设下发3个通道的值 0x21 不下发 0x5B 0x0B 那么下发:0x03 0x00 0x21 0x02 0x5B 0x03 0x0B

附录三:常开时段说明

每段都包含4个字节:

  • 第一字节表示开始时间的小时
  • 第二字节表示开始时间的分钟
  • 第三字节表示结束时间的小时
  • 第四字节表示结束时间的分钟

例如,开始时间是 08:30,结束时间为:20:30,则该常开时段的表示为:

0x08 0x1E 0x14 0x1E