更新时间:2024-08-20 10:28:38下载pdf
本文介绍了 Android 版本的涂鸦智慧行业可视对讲门禁接入。
序号 | 术语 | 说明 |
---|---|---|
1 | cid | 门禁设备 ID,设备的唯一编号 |
2 | sn | 下发 DP 点的唯一编号 |
3 | atop 接口 | 涂鸦对外提供的 HTTPS 接口 |
4 | 下发 | 云端指令通过 MQTT 消息通知给设备 |
5 | 上报 | 设备端消息通过 atop 接口或 MQTT 消息上报至云端 |
本文档仅支持直连设备的接入方式,即门禁设备内置 Tuya IPC SDK 的方式。
序号 | 功能点 | 说明 |
---|---|---|
1 | 设备配网 | 设备配网完成后,才能接收云端的指令,和云端进行交互 |
2 | 视频通话 | 包含发起呼叫、接听、挂断 |
3 | 住户操作 | 包括住户的新增、更新、移除、禁用、启用 |
4 | 人脸操作 | 包括人脸的新增、更新、移除 |
5 | 门禁卡操作 | 包括门禁卡的新增、更新、移除 |
6 | 二维码操作 | 包括二维码的新增、更新、移除 |
7 | 远程开门 | 用户通过 App,下发开门指令给门禁设备,门禁设备收到开门指令后,打开门并上报通行记录 |
8 | 通行事件上报 | 门禁设备识别到有人通行,上报通行记录 |
9 | 评估人脸照片分数 | 服务端评估抓拍的人脸照片分数,仅在酒店前台登记客户时使用 |
10 | 动态刷新住户通行二维码 | 除支持下发的二维码通行以外,增加了对动态可刷新二维码通行的支持 |
11 | 门禁通行密码操作 | 包括通行密码的新增、更新、移除 |
implementation 'com.squareup.okhttp3:okhttp:3.14.0'
implementation 'org.apache.commons:commons-lang3:3.3.2'
应用商店下载集智社区 App,通过集智社区 App 建立起和设备之间的音视频通话。
请参考:
向涂鸦申请私钥,申请的私钥用来对配网信息进行解密。
在 二维码的生成地址 向涂鸦申请测试账号。
使用设备扫描施工 App 二维码,进行设备配网。二维码信息格式如下:
{
"t":"AYRfQ***",
"a":"a1-cn***",
"key":"1168***"
}
二维码生成后,10 分钟就会过期。
设备根据 a、key 和 CID 调用接口,获取二维码的内容并解密,解密结果转为 qrcodeMap。
//查询配网信息
NetQrcodeVO netQrcodeVO = AtopFacade.getInstance().queryQrcodeInfo(a, key, cid);
//对配网信息进行解密
String qrcodeInfo = AESUtils.decrypt(netQrcodeVO.getData(), secret);
//组装 qrcodeMap;
Map<String, String> qrcodeMap = JSON.parseObject(qrcodeInfo, new TypeReference<HashMap<String, String>>() {});
qrcodeMap.put(QrcodeEnum.TOKEN.getCode(), t);
/**
* 扫二维码配网及设备重启时调用
*
* @param ctx 系统上下文
* @param cid 三方设备 ID,不同的设备唯一
* @param qrcodeMap 二维码信息 Map
* @param basePath 可写的一个路径,用于存储 SDK 相关的配置,建议 App 存储目录
* @param recordPath 可写的一个路径,用于存储录像,建议 sd 卡
* @param properties 实现类的配置
* @param paramConfigCallBack 音视频参数设置回调
*/
public void initSDK(Context ctx, String cid, Map<String,String> qrcodeMap,
String basePath, String recordPath, Properties properties,
MediaParamConfigCallback paramConfigCallBack)
关于 qrcodeMap 的 key,请参见 QrcodeEnum 中的 code, 其中 t、 PID、 UUID、authKey 在配网成功后,需要写入系统。保证设备重启、断电或恢复出厂设置后,还能重新获取,从而连上云端。
判断设备是否配网成功:
SharedPreferences sp = ctx.getSharedPreferences("edge_config",Context.MODE_PRIVATE);
boolean isBind = sp.getBoolean("bind_status",false);
如果 isBind = true 即为配网成功。
properties 的 key 请参见下面的示例,其中的 value 是三方接口实现类的路径。初始化后的实现类才会被调用。
Properties properties = new Properties();
//可视对讲事件处理
properties.put("dc_talk", "com.tuya.ai.ipcsdkdemo.edge.TalkReceiveEventImpl");
//远程开门事件处理
properties.put("dc_door", "com.tuya.ai.ipcsdkdemo.edge.DoorReceiveEventImpl");
//人员事件处理
properties.put("dc_userInfo", "com.tuya.ai.ipcsdkdemo.edge.TenementReceiveEventImpl");
//人脸事件处理
properties.put("dc_faceInfo", "com.tuya.ai.ipcsdkdemo.edge.TenementReceiveEventImpl");
//人卡事件处理
properties.put("dn_cardInfo","com.tuya.ai.ipcsdkdemo.edge.CardReceiveEventImpl");
//二维码事件处理
properties.put("dc_qrCodeInfo","com.tuya.ai.ipcsdkdemo.edge.QrCodeReceiveEventImpl");
//密码通行事件处理
properties.put("dc_passPwd","com.tuya.ai.ipcsdkdemo.edge.PassPwdReceiveEventImpl");
//数据清理事件处理
properties.put("dc_dataClear", "com.tuya.ai.ipcsdkdemo.edge.DataClearEventImpl");
//时间同步事件处理
properties.put("dc_timeSync", "com.tuya.ai.ipcsdkdemo.edge.TimeSyncEventImpl");
IPC SDK 已经将云端下发的指令封装成了接口,三方只需要实现具体的接口,详情请查看 接口列表。
//开启视频通话、接听、挂断时调用
AtopFacade.getInstance().sendControlProtocol(controlProtocolRequest);
调用方法
接口 | 方法 |
---|---|
AtopFacade | sendControlProtocol |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
controlProtocolRequest | ControlProtocolRequest | 请求对象 | 是 |
ControlProtocolRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
SN | String | SN 号,除呼叫以外,其它模式都需要设置;设置的值为呼叫时返回的 SN | 否 |
mode | String | 设备模式,如门铃:ac_doorbell | 是 |
type | String | 操作类型,见详细说明 | 是 |
deviceId | String | 涂鸦设备 ID | 是 |
targetAddress | String | 目标地址格式:01-01-01-01-01-01,表示 01 小区 01 苑 01 幢 01 单元 01 层 01 号房间。没有则传 00,比如没有苑,苑的位置传 00。 | 是 |
extend | String | 通话后挂断返回 JOSN 字符串:{“beginTime”:1592373736,“endTime”:1593373736}
|
否 |
返回参数
类型 | 说明 |
---|---|
String | SN 号 |
操作类型详细说明
操作类型 | 场景 | 操作 |
---|---|---|
1 | 设备呼叫 App 和室内机。 | 设备发送 type=1 事件 |
3 | 设备呼叫 App 和室内机,设备主动挂断,App 或室内机不操作。 | 设备发送 type=3 事件如果 App 已接听,需要传 extend |
4 | 设备呼叫 App 和室内机,App 或室内机未接听,呼叫时间超过设备限定,设备挂断。设备限定呼叫超时时间默认 30s。 | 设备发送 type=4 事件 |
5 | 设备呼叫 App 和室内机,App 或室内机接听后,App 或室内机挂断。SDK 会有回调事件给设备。 | 设备发送 type=5 事件,需要传 extend |
6 | 设备呼叫 App 和室内机,App 或室内机接听。SDK 会有回调事件给设备。 | 设备发送 type=6 事件 |
7 | 设备呼叫 App 和室内机,App 或室内机接听后,通话时间超过设备限定,设备挂断。设备限定通话超时时间默认 90s。 | 设备发送 type=7 事件,需要传 extend |
//通过该接口上报门禁通行事件
MqttEventSupport.getInstance().publishThirdEvent(thirdEventRequest);
调用方法
接口 | 方法 |
---|---|
AtopFacade | publishThirdEvent |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
thirdEventRequest | ThirdEventRequest | 请求对象 | 是 |
ThirdEventRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
UID | String | 用户 ID | 是 |
operTime | String | 事件发生时间 | 是 |
way | int | 开门方式
|
是 |
imageId | String | 图片文件 ID,请参见 获取图片 ID 的接口 | 否 |
passPwd | String | 通行密码(密码通行方式下必传) | 否 |
cardNo | String | 卡号 | 否 |
temp | String | 体温 | 否 |
passType | Integer | 通行类型
|
否 |
location | String | 位置信息 | 否 |
isSuccess | boolean | 是否成功
|
是 |
message | String | 消息提示(错误原因) | 否 |
返回参数
类型 | 说明 |
---|---|
boolean |
|
//通过该接口上报门禁告警事件
MqttEventSupport.getInstance().publishDoorAlarmEvent(thirdDoorAlarmRequest);
调用方法
接口 | 方法 |
---|---|
MqttEventSupport | publishDoorAlarmEvent |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
thirdDoorAlarmRequest | ThirdDoorAlarmRequest | 请求对象 | 是 |
ThirdDoorAlarmRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
alarmId | String | 告警 ID | 是 |
alarmType | Integer | 告警类型。
|
是 |
alarmCont | String | 告警值 | 是 |
imageId | String | 图片文件 ID,请参见 获取图片 ID 的接口 | 否 |
happenTime | Long | 告警发送时间 | 是 |
confirmEnable | Boolean | 处理状态。
|
否 |
extendData | String | 扩展信息 Json 类型 | 否 |
extendData Json字段说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
taggerType | Integer | 尾随者类型,告警类型为尾随类型时须传(alarmType=3 时须传)。
|
否 |
返回参数
类型 | 说明 |
---|---|
boolean |
|
//通过该接口上报图片,上传的图片格式默认为 jpg
String fileId = AtopFacade.getInstance().uploadImageFile(fileBytes);
调用方法
接口 | 方法 |
---|---|
AtopFacade | uploadImageFile |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
fileBytes | byte[] | 图片的字节数组 | 是 |
返回参数
类型 | 说明 |
---|---|
String | 图片文件 ID |
对门禁抓拍的人脸照片进行评估,返回人脸照片分数。对抓拍的人脸照片进行评分,确认照片合格后,下发到其它门禁。
//人脸评分
FaceScoreVO faceScoreVO = AtopFacade.getInstance().evaluateFaceQuality(fileId);
调用方法
接口 | 方法 |
---|---|
AtopFacade | evaluateFaceQuality |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
fileID | String | 图片文件 ID | 是 |
返回参数
类型 | 说明 |
---|---|
FaceScoreVO | 人脸评分结果对象 |
FaceScoreVO 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
value | Double | 人脸评分阀值范围 0~10,8 分以上为识别成功 | 是 |
url | String | 人脸照片 URL | 是 |
住户通行权限校验步骤:
//健康码校验
HealthCodeVO healthCodeVO = AtopFacade.getInstance().checkHealthCode(UID, deviceId, verifyTypeList);
调用方法
接口 | 方法 |
---|---|
AtopFacade | checkHealthCode |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
UID | String | 用户 ID | 是 |
deviceID | String | 涂鸦设备 ID | 是 |
verifyTypeList | List<Integer> | 验证类型列表
|
是 |
返回参数
类型 | 说明 |
---|---|
HealthCodeVO | 健康码结果对象 |
HealthCodeVO 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
UID | String | 用户 ID | 是 |
extend | String | JSON 字符串,如{“healthCode”:“unknown”} | 是 |
extend 字段说明
验证类型 | extend | 描述 |
---|---|---|
1 | 返回 healthCode 字段 |
|
该接口需要支持幂等,即同一个 UID 住户新增成功后,还支持再次新增,再次新增返回成功。
调用方法
接口 | 方法 |
---|---|
TenementReceiveEvent | addTenement |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
tenementRequest | TenementRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话 | 是 |
EventContext 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
gatewayId | String | 涂鸦边缘网关设备 ID | 是 |
deviceId | String | 涂鸦设备 ID | 是 |
deviceName | String | 涂鸦设备名称 | 否 |
cid | String | 三方设备 ID | 是 |
commType | String | 设备接入类型(MQTT,HTTP) | 否 |
deviceIp | String | 设备 IP | 否 |
macAddress | String | 设备 MAC 地址 | 否 |
productType | String | 品类 | 否 |
productId | String | 产品 ID | 是 |
installLocation | String | 设备安装地点 | 否 |
deviceDesc | String | 设备描述 | 否 |
activeStatus | String | 设备状态
|
是 |
extendData | String | 扩展信息,json串 | 否 |
TenementRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
name | String | 涂鸦用户名 | 否 |
idCard | String | 证件 ID | 否 |
phone | String | 手机号 | 否 |
beginTime | Long | 有效期开始时间,13 位时间戳 | 否 |
endTime | Long | 有效期结束时间,13 位时间戳 | 否 |
timeRuleList | List<TimeRuleInfo> | 时间规则列表 | 否 |
userFloor | Integer | 住户所在楼层,边缘侧呼梯时使用,需要设备端支持 | 否 |
secretKey | String | 用户秘钥,长度 32 位,建议 UUID 生成;App 端和设备端基于同一个秘钥生成动态二维码 | 否 |
refreshTime | Long | 二维码刷新时间,默认 5 分钟, 单位毫秒 | 否 |
extend | String | 扩展信息, json 字符串 | 否 |
TimeRuleInfo 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
ruleId | String | 规则 ID | 是 |
ruleName | String | 规则名称 | 否 |
period | String | 可通行时间周期,json 字符串,例如: [{“weekDay”:1,“weekTime”:[{“start”:“32400000”,“end”:“64800000”}]},{“weekDay”:2,“weekTime”:[{“start”:“68400000”,“end”:“75600000”}]}] | 否 |
allowedDate | String | 可通行时间段,json 字符串,例如:[{“start”:“1571587200000”,“end”:“1864569600000”},{“start”:“1573022801885”,“end”:“1864569600000”}] | 否 |
deniedDate | String | 不可通行时间段, json 字符串,例如:[{“start”:“1571587200000”,“end”:“1864569600000”},{“start”:“1573022801885”,“end”:“1864569600000”}] | 否 |
如果 beginTime 和 endTime 不为空,则住户有效期取 beginTime 和 endTime,否则以 timeRuleList 为准,timeRuleList 最大长度支持 3 条。
时间段规则说明:
period
:可通行时间周期:可以指定在一周中哪些时间允许进行
weekDay
:用 1 到 7 分别表示周一到周日,开始时间、结束时间用距离 0 点相隔的毫秒数表示,比如 32400000 表明是 9 点。如 [{“weekDay”:1,“weekTime”:[{“start”:“32400000”,“end”:“64800000”}]},{“weekDay”:2,“weekTime”:[{“start”:“684000000”,“end”:“75600000”}]}] 表明的含义是 周一 9:00~18:00,周二 19:00~21:00 可通行,
allowedDate
:可通行时间段,13 位时间戳表示
deniedDate
:不可通行时间段,13 位时间戳表示
时间优先级:不可通行时间段 > 可通行时间段 > 可通行时间周期
先判断访问时间是否在 不可通行时间段 中,若在则不允许通行。再看访问时间是否在 可通行时间段 中,若在其中则允许通行,若不在其中,则继续判断是否在 可通行时间周期 中,若在其中则允许通行。若都不在以上两者中,则不能通行。
时间规则判断可以参考或使用 com.tuya.edge.utils.RuleCheckUtils
工具类。
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果 |
BaseResult 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
success | boolean | 是否返回成功
|
是 |
code | String | 返回 code | 否 |
msg | String | 返回 msg | 是 |
data | Object | 返回数据 | 否 |
调用方法
接口 | 方法 |
---|---|
TenementReceiveEvent | modifyTenement |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
tenementRequest | TenementRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
TenementReceiveEvent | removeTenement |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
removeTenementRequest | RemoveTenementRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
RemoveTenementRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
TenementReceiveEvent | enableTenement |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
enableTenementRequest | EnableTenementRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
EnableTenementRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
enable | Integer | 启用/禁用
|
是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
该接口需要支持幂等,即同一个 faceId 人脸照片新增成功后,还支持再次新增,再次新增时返回成功。
调用方法
接口 | 方法 |
---|---|
FaceImageReceiveEvent | addFaceImage |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
faceImageRequest | FaceImageRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
FaceImageRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
faceId | String | 人脸 ID | 是 |
url | String | 人脸照片地址 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
FaceImageReceiveEvent | modifyFaceImage |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
faceImageRequest | FaceImageRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
FaceImageReceiveEvent | removeFaceImage |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
removeFaceImageRequest | RemoveFaceImageRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
RemoveFaceImageRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
faceId | String | 人脸 ID | 否 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
CardReceiveEvent | addCard |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
cardRequest | CardRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
CardRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
cardNo | String | 门禁卡号 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
该接口需要支持幂等,即同一个 cardNo 卡新增成功后,还支持再次新增,再次新增时返回成功。门禁须限制用户单个门禁卡,同个用户新增第二个门禁卡时,结果应返回失败。
用户限制单个门禁卡,更新门禁卡先清空该用户原先门禁卡,再新增。
调用方法
接口 | 方法 |
---|---|
CardReceiveEvent | modifyCard |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
cardRequest | CardRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
CardReceiveEvent | removeCard |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
removeCardRequest | RemoveCardRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
RemoveCardRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
cardNo | String | 被删除门禁卡号 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
CardReceiveEvent | enableCard |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
enableCardRequest | EnableCardRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
EnableCardRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
enable | Integer | 启用/禁用
|
是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
该接口需要支持幂等,即同一个 qrCode 新增成功后,还支持再次新增,再次新增时返回成功。门禁须限制用户单个二维码,同个用户新增第二个二维码时,结果应返回失败。
调用方法
接口 | 方法 |
---|---|
QcCodeReceiveEvent | addQcCode |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
qrCodeRequest | QrCodeRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
QrCodeRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
qrCode | String | 二维码 Code,二维码的有效期同住户的有效期 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
用户限制单个二维码,更新二维码先清空该用户原先二维码,再新增。
调用方法
接口 | 方法 |
---|---|
QcCodeReceiveEvent | modifyQcCode |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
qrCodeRequest | QrCodeRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
调用方法
接口 | 方法 |
---|---|
QcCodeReceiveEvent | removeQcCode |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
removeQrCodeRequest | RemoveQrCodeRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
RemoveQrCodeRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
远程开门不需要校验用户权限,即设备收到远程开门调用后,就会进行开门操作,而不会校验住户信息。
调用方法
接口 | 方法 |
---|---|
DoorReceiveEvent | openDoor |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
doorRequest | DoorRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
DoorRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
一键清空设备数据,例如:人、人脸、卡及密码等信息。设备返厂维修或初始化设备场景下使用。
调用方法
接口 | 方法 |
---|---|
DataClearEvent | clearData |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
doorDataClearRequest | DoorDataClearRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
DoorDataClearRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
all | Boolean | 是否清空全量数据 | 否 |
person | Boolean | 是否清空人员数据 | 否 |
face | Boolean | 是否清空人脸数据 | 否 |
card | Boolean | 是否清空卡号数据 | 否 |
qrcode | Boolean | 是否清空二维码数据 | 否 |
passPwd | Boolean | 是否清空通行密码数据 | 否 |
other | Boolean | 是否清空其他数据 | 否 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
设备时间同步,云端下发时间给设备,使设备时间与云端时间进行同步。
调用方法
接口 | 方法 |
---|---|
TimeSyncEvent | syncTime |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
doorTimeSyncRequest | DoorTimeSyncRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
DoorTimeSyncRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
timestamp | Long | 时间戳 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
1、若禁用设备功能,则刷卡、密码、二维码、人脸、指纹、远程开门等功能不可用。
2、若启用设备功能,则刷卡、密码、二维码、人脸、指纹、远程开门等功能可用。
调用方法
接口 | 方法 |
---|---|
CustomReceiveEvent | receiveCustomInfo |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
customRequest | CustomRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
CustomRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
sn | String | 请求唯一标识 | 是 |
bizType | String | 业务类型,默认值:maintain | 是 |
operateType | String | 操作类型,默认值:enable_disable_device | 是 |
extendData | String | JSON 字符串,如: {“value” :1},value:
|
是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
用户支持多个通行密码,不同用户间通行密码允许相同。
该接口需要支持幂等,当同一个用户重复新增同一个通行密码时返回成功。
调用方法
接口 | 方法 |
---|---|
PassPwdReceiveEvent | addPassPwd |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
passPwdRequest | PassPwdRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
PassPwdRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
uid | String | 涂鸦用户 ID | 是 |
passPwd | String | 门禁通行密码 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
修改用户通行密码,如果用户下不存在被修改的通行密码(oldPassPwd),需返回失败。
调用方法
接口 | 方法 |
---|---|
PassPwdReceiveEvent | modifyPassPwd |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
passPwdRequest | PassPwdRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
移除用户通行密码,如果用户下不存在被删除的通行密码(passPwd),需返回失败。
调用方法
接口 | 方法 |
---|---|
PassPwdReceiveEvent | removePassPwd |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
passPwdRequest | PassPwdRequest | 请求对象,请参见 参数说明 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
可视门禁收到挂断指令后,中断视频流传输。
调用方法
接口 | 方法 |
---|---|
CallRefuseEvent | callRefuse |
请求参数
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
callRefuseRequest | CallRefuseRequest | 请求对象 | 是 |
eventContext | EventContext | 上下文会话,请参见 参数说明 | 是 |
QrCodeRequest 说明
参数名 | 类型 | 说明 | 是否必传 |
---|---|---|---|
type | Integer | 挂断类型。1 :全量 app 拒接,业务方主动挂断 |
是 |
mes | String | 挂断原因 | 否 |
返回参数
类型 | 说明 |
---|---|
BaseResult | 返回结果,请参见 参数说明 |
设备端需要支持两种二维码格式:
1.0 版本的二维码格式:
7421371370865597349888943036
2.0 版本的二维码格式:
{
"qrcode": "YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY=" //value:Base64 编码后字符串
}
设备扫描二维码后的校验步骤:
根据二维码的内容判断二维码是 1.0 版本还是 2.0 版本。
如果是 1.0 版本,直接和住户的二维码进行比较,比较成功则允许通行。
如果是 2.0 版本,则先通过 Base64 方法对内容进行解码,解析出二维码信息。
进行静态二维码对比校验,二维码信息和住户的二维码进行比较,比较成功并且在有效期则允许通行。
如果比对失败则通过动态二维码验证接口进行验证, 验证成功则允许通行, 验证失败则不允许通行。
动态二维码验证接口
TOTPUtils.java
/**
* 动态二维码验证
*
* @param UID 涂鸦用户 ID
* @param secretKey 用户秘钥,32 位字符串
* @param willVerifyTotp 待验证的二维码信息
* @param refreshTime 二维码刷新时间
* @return boolean 二维码验证结果
*/
public static boolean verifyTOTPFlexibility(String UID,String secretKey,String willVerifyTotp, Long refreshTime)
2.0 版二维码示例
二维码内容
{
"qrcode": "YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY=" //value:Base64 编码后字符串
}
YXkxNjExMDU4MTc4MTM4N240Mjd8ZTRhZjIzZTY= Base64 解码后获得字符串
"ay16110581781387***|e4af***"
用户 id: ay16110581781387***
二维码信息: e4af***
1. 首先根据用户 ID 获取静态二维码进行对比.
2. 如果对比失败,则进行动态二维码校验。
二维码刷新时间为: 5 * 60 * 1000
3. 再根据用户 ID 查询到用户的秘钥 secretKey
4. 然后调用动态二维码验证接口 TOTPUtils.verifyTOTPFlexibility
如果返回 true,则校验通过.
门禁设备需支持读取门禁卡功能。住户卡号数据在门禁卡第 7 扇区,门禁从门禁卡第 7 扇区读取门禁卡后,与设备内住户门禁卡对比,若对比成功,则门禁刷卡成功。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈