Zigbee 门锁

更新时间:2024-11-13 08:30:53下载pdf

本文介绍 Zigbee 门锁的相关功能,包括家庭成员、解锁方式、临时密码、记录、远程操作、设置操作等。

使用说明

类名 说明
TuyaOptimusSdk 初始化门锁 SDK 入口,用来获取门锁管理类
ITuyaLockManager 门锁管理类,可以获取不同类型的门锁类
ITuyaZigBeeLock Zigbee 门锁类,所有 Zigbee 门锁相关方法都包含在其中

示例代码

通过设备 ID,创建 Zigbee 门锁类。

// 初始化门锁 SDK,仅需要调用一次
TuyaOptimusSdk.init(getApplicationContext());
// 获取 ITuyaLockManager
ITuyaLockManager tuyaLockManager = TuyaOptimusSdk.getManager(ITuyaLockManager.class);
// 创建 ITuyaZigBeeLock
ITuyaZigBeeLock tuyaLockDevice = TuyaLockManager.getZigBeeLock("your_device_id");

名词解释

名词 说明
门锁劫持 指将特定的指纹、密码等,设置为劫持密码。当用户被劫持并使用该密码解锁时,门会打开。同时,门锁将开门报警信息发送至家人手机或物业管理系统。
门锁成员 门锁成员为 家庭成员,等同于智能生活 App SDK 中的家庭成员概念。门锁 SDK 将对应的门锁密码编号与该成员关联起来。更多详情,请参考 家庭管理
lockUserId 创建 门锁成员 时,云端为设备分配的固件成员 ID,代表着固件内记录的用户 ID。
userId 创建 门锁成员 时,云端分配的数据库记录 ID,代表着用户的唯一 ID。
dpCode 设备功能的标识符。每个设备功能都有名称和编号。
unlockId 解锁方式编号,由解锁方式 DP ID 加硬件锁 ID 组合而成。例如 12-c,其中 c 为 10 进制转换为十六进制。
opmodeId 解锁方式云端序号。

家庭成员

本小节主要介绍 家庭成员 的管理操作。

家庭成员列表

接口说明

/**
* 家庭成员列表
*
* @param callback 回调
*/
void getMemberList(ITuyaDataCallback<ArrayList<MemberInfoBean>> callback);

MemberInfoBean 数据模型中部分字段定义

字段 类型 描述
userId String 用户 ID
avatarUrl String 头像 URL
lockUserId Integer 用户在锁固件里的 ID
nickName String 昵称
userType Integer 用户类型
  • 10:管理员
  • 20:普通成员
  • 50:家庭拥有者
userContact String 用户联系方式
unlockDetail List 用户拥有的解锁方式列表,查看 UnlockDetail 数据模型

UnlockDetail 数据模型

字段 类型 描述
dpId Integer 解锁方式 DP ID
count Integer 解锁方式个数
unlockList List 解锁方式详情列表,参考 UnlockInfoBean 数据模型

UnlockInfoBean 数据模型

字段 类型 描述
unlockId String 解锁方式编号
opModeId Long 解锁方式云端序号
unlockName String 解锁方式名称
unlockAttr Integer 解锁方式属性
  • 1:劫持
  • 0:非劫持
admin Boolean 是否是管理员指纹

示例代码

zigBeeLock.getMemberList(new ITuyaResultCallback<ArrayList<MemberInfoBean>>() {
    @Override
    public void onSuccess(ArrayList<MemberInfoBean> result) {
        Log.i(Constant.TAG, "getMemberList success:" + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "getMemberList failed: code = " + code + " message = " + message);
    }
});

成员详情

获取当前用户或指定用户详细信息。

接口说明

/**
* 当前家庭成员信息查询
*
* @param callback 回调
*/
void getMemberInfo(ITuyaDataCallback<MemberInfoBean> callback);
/**
* 指定家庭成员信息查询
*
* @param callback 回调
*/
void getMemberInfo(String userId, ITuyaDataCallback<MemberInfoBean> callback);

示例代码

//当前用户信息
zigBeeLock.getMemberInfo(new ITuyaDataCallback<MemberInfoBean>() {
    @Override
    public void onSuccess(MemberInfoBean bean) {
        Log.i(Constant.TAG, "getMemberInfo success:" + bean);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "getMemberInfo failed: code = " + code + " message = " + message);
    }
});
//指定成员信息查询
zigBeeLock.getMemberInfo("userId", new ITuyaDataCallback<MemberInfoBean>() {
    @Override
    public void onSuccess(MemberInfoBean bean) {
        Log.i(Constant.TAG, "getMemberInfo success:" + bean);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "getMemberInfo failed: code = " + code + " message = " + message);
    }
});

添加成员

该接口创建的是家庭成员,添加的用户需要真实的 App 账号。

接口说明

/**
* 添加家庭成员
*
* @param memberWrapperBean 信息
* @param callback          回调
*/
void addMember(MemberWrapperBean memberWrapperBean, ITuyaDataCallback<MemberBean> callback);

MemberWrapperBean 数据模型

字段 类型 描述
homeId long 要添加成员的家庭的 ID
nickName String 为受邀请者设置的昵称
admin boolean 是否为家庭管理员
memberId long 家庭成员 ID
headPic String 为受邀请者设置的头像,nil 时使用受邀请者个人头像
account String 受邀请账号
countryCode String 受邀请者账号对应的国家或地区码
invitationCode String 邀请码
role int 成员角色,参考 MemberRole 定义类型
autoAccept boolean 是否需要受邀请者同意接受加入家庭邀请
  • true:受邀请账号自动接受家庭加入邀请
  • false:需要受邀请者同意后,才可加入家庭

详情请参考 家庭成员信息

示例代码

MemberWrapperBean.Builder memberWrapperBean = new MemberWrapperBean.Builder();
memberWrapperBean.setNickName();//成员昵称
memberWrapperBean.setCountryCode();//国家或地区编号
memberWrapperBean.setAccount();//App 账号
memberWrapperBean.setRole();//成员角色
memberWrapperBean.setHomeId();//当前设备所属家庭 ID
memberWrapperBean.setAutoAccept(false);//true 为受邀请账号自动接受家庭加入邀请
zigBeeLock.addMember(memberWrapperBean.build(), new ITuyaDataCallback<MemberBean>() {
    @Override
    public void onSuccess(MemberBean result) {
        Log.i(Constant.TAG, "add lock user success");
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "add lock user failed: code = " + code + " message = " + message);
    }
});

删除单个家庭成员

删除指定的家庭用户成员,并删除设备上该成员对应的所有解锁方式。

门锁App云端设备在线用户确认删除成员发送删除用户信息指令回复删除结果调用接口,删除家庭用户返回删除结果处理展示结果门锁App云端

接口说明

/**
* 删除单个家庭成员
*
* @param memberInfoBean 成员信息
* @param callback       回调
*/
void removeMember(MemberInfoBean memberInfoBean, IResultCallback callback);

示例代码

其中入参 memberInfoBean 为成员列表接口 getMemberList 返回的数据模型。

zigBeeLock.removeMember(memberInfoBean, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
        Log.e(Constant.TAG, "removeMember failed: code = " + code + " message = " + error);
    }

    @Override
    public void onSuccess() {
        Log.i(Constant.TAG, "removeMember success");
    }
});

修改单个成员信息

该接口只能修改指定成员的昵称及成员角色。

接口说明

/**
* 修改单个成员信息
*
* @param memberWrapperBean 入参
* @param callback          回调
*/
void updateMember(MemberWrapperBean memberWrapperBean, IResultCallback callback);

示例代码

MemberWrapperBean.Builder memberWrapperBean = new MemberWrapperBean.Builder();
memberWrapperBean.setNickName();//成员昵称
memberWrapperBean.setRole();//成员角色(请在家庭成员查看 MemberRole 定义类型)
memberWrapperBean.setMemberId();//成员列表返回的 userId
zigBeeLock.updateMember(memberWrapperBean.build(), new IResultCallback() {
    @Override
    public void onError(String code, String error) {
        Log.e(Constant.TAG, "updateMember failed: code = " + code + " message = " + error);
    }

    @Override
    public void onSuccess() {
        Log.i(Constant.TAG, "updateMember success");
    }
});

解锁方式

获取成员已绑定的解锁方式列表

接口说明

/**
* 获取成员已绑定的解锁方式列表
*
* @param userId   成员 ID
* @param callback 回调
*/
void getMemberOpmodeList(String userId, ITuyaResultCallback<ArrayList<OpModeBean>> callback);

示例代码

zigBeeLock.getMemberOpmodeList("userId", new ITuyaResultCallback<ArrayList<OpModeBean>>() {
    @Override
    public void onSuccess(ArrayList<OpModeBean> result) {
        Log.i(Constant.TAG, "getMemberOpmodeList onSuccess:" + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "getMemberOpmodeList failed: code = " + code + " message = " + message);
    }
});

OpModeBean 数据模型

字段 类型 描述
opmode String 返回 dpId,参考 功能定义 > 标准功能 > 开锁方式 DP ID
opmodeValue String 解锁方式在设备端编号,等同 SN
unlockId String 解锁方式编号
lockUserId Int 锁成员 ID
opmodeId Long 解锁方式云端序号
unlockAttr Int 解锁方式属性
  • 1:劫持
  • 0:非劫持
unlockName String 解锁方式名称
userName String 所属用户昵称
userId String 所属用户 ID

获取成员未绑定的解锁方式列表

接口说明

/**
* 获取成员未绑定的解锁方式列表
*
* @param callback 回调
*/
void getUnAllocOpMode(ITuyaDataCallback<ArrayList<UnAllocOpModeBean>> callback);

示例代码

zigBeeLock.getUnAllocOpMode(new ITuyaDataCallback<ArrayList<UnAllocOpModeBean>>() {
    @Override
    public void onSuccess(ArrayList<UnAllocOpModeBean> result) {
        Log.i(Constant.TAG, "getUnAllocOpMode onSuccess:" + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "getUnAllocOpMode failed: code = " + code + "  message = " + message);
    }
});

UnAllocOpModeBean 数据模型

字段 类型 描述
opmode String 返回 dpId,参考 功能定义 > 标准功能 > 开锁方式 DP ID
unlockInfo List 待分配的解锁方式详情,参考数据模型 UnAllocLockBean

UnAllocLockBean 数据模型

字段 类型 描述
devId String 设备 ID
unlockSn Int 解锁方式在门锁设备上的 ID
unlockId String 解锁方式编号
opmodeId Long 解锁方式云端序号
unlockName String 解锁方式名称

解锁方式分配到人

接口说明

/**
* 解锁方式分配到人
*
* @param userId    用户 ID
* @param unlockIds 解锁方式
* @param callback 回调
*/
void allocUnlockOpMode(String userId, List<String> unlockIds, ITuyaResultCallback<Boolean> callback);

请求参数

字段 类型 描述
userId String 用户 ID
unlockIds List 解锁方式列表

示例代码

iTuyaZigBeeLock.allocUnlockOpMode(userId, unlockIds, new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.i(Constant.TAG, "allocUnlockOpMode onSuccess: " + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "allocUnlockOpMode failed: code = " + code + " message = " + message);
    }
});

添加解锁方式

门锁App云端设备在线设备云能力获取返回云能力 code:tyabitmqxx判断是否需要密码下发发送添加解锁方式指令设备提示录入用户在设备录入返回结果请求接口,同步云端返回结果处理展示结果门锁App云端

接口说明

/**
* 添加解锁方式
*
* @param opModeAddRequest 入参
* @param callback         回调
*/
void addUnlockOpmodeForMember(OpModeAddRequest opModeAddRequest, ITuyaResultCallback<OpModeAddBean> callback);

/**
* 添加解锁方式(带密码下发)
*
* @param opModeAddRequest 入参
* @param callback         回调
*/
void addPasswordOpmodeForMember(OpModeAddRequest opModeAddRequest, ITuyaResultCallback<OpModeAddBean> callback);

OpModeAddRequest 数据模型

字段 类型 描述
userId String 用户 ID
lockUserId Integer 用户在门锁固件上的 ID
unlockName String 解锁方式名称
unlockAttr Integer 是否开启特殊解锁通知(劫持)
  • 0:否
  • 1:是
password String 密码类型密码(带密码下发需要)
unlockType String 解锁方式类型 dpCode
userType Integer 用户类型
  • 10:管理员
  • 20:普通成员
  • 50:家庭拥有者

OpModeAddBean 数据模型

字段 类型 描述
opModeId long 解锁方式云端 ID
unlockName String 解锁方式名称

云能力获取示例代码

通过接口返回的 tyabitmqxx 值来判断两种接口的使用。如果返回为空,默认为 true

字段 描述
true 使用 addUnlockOpmodeForMember
false 使用 addPasswordOpmodeForMember
private boolean tyabitmqxx = true;
zigBeeLock.getLockDeviceConfig(new ITuyaResultCallback<JSONObject>() {
    @Override
    public void onSuccess(JSONObject result) {
        JSONObject powerCode = result.getJSONObject("powerCode");
        if (powerCode != null) {
            if (powerCode.containsKey("tyabitmqxx")) {
                tyabitmqxx = powerCode.getBooleanValue("tyabitmqxx");
            } else {
                tyabitmqxx = true;
            }
        }
        //特别注意:UI 展示输入框根据 tyabitmqxx=false 来判断
    }

    @Override
    public void onError(String errorCode, String errorMessage) {

    }
});

添加解锁方式示例代码

private void addUnlockMode() {
    if (!tyabitmqxx) {
        //正常解锁方式添加
        zigBeeLock.addPasswordOpmodeForMember(request, new ITuyaResultCallback<OpModeAddBean>() {
            @Override
            public void onSuccess(OpModeAddBean result) {
                Log.i(Constant.TAG, "addPasswordOpmodeForMember onSuccess:" + result);
            }

            @Override
            public void onError(String errorCode, String errorMessage) {
                Log.e(Constant.TAG, "addProUnlockOpModeForMember:" + errorMessage);
            }
        });
        return;
    }
    //密码下发添加
    zigBeeLock.addUnlockOpmodeForMember(request, new ITuyaResultCallback<OpModeAddBean>() {
        @Override
        public void onSuccess(OpModeAddBean result) {
            Log.i(Constant.TAG, "addUnlockOpmodeForMember onSuccess:" + result);
        }

        @Override
        public void onError(String errorCode, String errorMessage) {
            Log.e(Constant.TAG, "addProUnlockOpModeForMember:" + errorMessage);
        }
    });
}

更新解锁方式信息

该方法只能更新解锁方式名称及劫持功能开关控制。

接口说明

/**
* 更新解锁方式信息
*
* @param unlockName 解锁方式名称
* @param opModeId   解锁方式云端 ID
* @param unlockAttr 是否劫持:0 取消,1 开启
* @param unlockId   锁 ID
* @param callback   回调
*/
void modifyUnlockOpmodeForMember(String unlockName, long opModeId, int unlockAttr, String unlockId, ITuyaResultCallback<Boolean> callback);

示例代码

zigBeeLock.modifyUnlockOpmodeForMember(
    "unlockName",
    "opmodeId",
    "unlockAttr",
    "unlockId",
    new ITuyaResultCallback<Boolean>() {
        @Override
        public void onSuccess(Boolean result) {
        }

        @Override
        public void onError(String errorCode, String errorMessage) {
        }
    });

删除解锁方式

门锁App云端设备在线发送删除解锁方式指令返回结果请求接口,同步云端返回结果处理展示结果门锁App云端

接口说明

/**
* 删除解锁方式
*
* @param removeRequest 入参
* @param callback      回调
*/
void removeUnlockOpmodeForMember(OpModeRemoveRequest removeRequest, ITuyaResultCallback<Boolean> callback);

OpModeRemoveRequest 数据模型

字段 类型 描述
userId String 用户 ID
lockUserId String 用户在锁固件里的 ID
userType Integer 用户类型
unlockId String 解锁方式编号
opModeId String 解锁方式云端编号

示例代码

OpModeRemoveRequest removeRequest = new OpModeRemoveRequest();
removeRequest.setUserId(infoBean.getUserId());
removeRequest.setLockUserId(infoBean.getLockUserId());
removeRequest.setUnlockId(infoBean.getUnlockId());
removeRequest.setOpModeId(infoBean.getOpmodeId());
removeRequest.setUserType(infoBean.getUserType());
zigBeeLock.removeUnlockOpmodeForMember(removeRequest, new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.i(Constant.TAG, "removeUnlockOpmodeForMember onSuccess:" + result);
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(Constant.TAG, "removeUnlockOpmodeForMember:" + errorMessage);
    }
});

解锁方式取消录入

接口说明

/**
* 解锁方式取消录入
*
* @param unlockType     解锁方式 DpCode
* @param lockUserId 锁用户 ID
* @param userType   成员权限
* @param callback   回调
*/
void cancelUnlockOpMode(String dpCode, int lockUserId, int userType, IResultCallback callback);

示例代码

private void cancelUnlock() {
    zigBeeLock.cancelUnlockOpMode(request.getUnlockType(), request.getLockUserId(), request.getUserType(), new IResultCallback() {
        @Override
        public void onError(String code, String error) {

        }

        @Override
        public void onSuccess() {

        }
    });
}

防劫持设置

在添加或更新成员解锁方式方法内,已经内置该接口调用。

接口说明

/**
* 防劫持设置
*
* @param dpId     功能点
* @param unlockId 功能点设置值
* @param callback 回调
*/
void addHijackingConfig(String dpId, String unlockId, ITuyaResultCallback<Boolean> callback);

移除防劫持设置

在添加或更新成员解锁方式方法内,已经内置该接口调用。

接口说明

/**
* 移除防劫持设置
*
* @param dpId     功能点
* @param unlockId 功能点设置值
* @param callback 回调
*/
void removeHijacking(String dpId, String unlockId, ITuyaResultCallback<Boolean> callback);

临时密码

临时密码列表

接口说明

/**
* 临时密码列表
*
* @param limit    分页数量
* @param offset   起始记录数
* @param callback 回调
*/
void getPasswordList(int offset, int limit, ITuyaResultCallback<PasswordBean> callback);

示例代码

zigBeeLock.getPasswordList(0, 50, new ITuyaResultCallback<PasswordBean>() {
    @Override
    public void onSuccess(PasswordBean result) {
        Log.i(Constant.TAG, "getPasswordList success: " + result);
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(Constant.TAG, "getPasswordList failed: code = " + errorCode + "  message = " + errorMessage);
    }
});

PasswordBean 数据模型

字段 类型 描述
hasNext Boolean 是否有下一页
totalCount Integer 总数量
datas List 数据列表,参考文档下模型 DataBean

DataBean 数据模型

字段 类型 描述
effectiveTime long 生效时间
invalidTime long 失效时间
password String 明文密码
phase Integer 状态阶段
  • 1:处理中
  • 2:正常
  • 3:冻结
oneTime Integer 密码类型
  • 1:一次性
  • 0:周期性
ifEffective Boolean 是否生效中
operate Integer 最近操作
  • 125:删除
  • 126:修改
  • 127:冻结
  • 128:解冻
name String 密码名称
deliveryStatus Integer 状态
  • 1:未确认
  • 2:已确认
modifyData List 数据列表,参考文档下模型 ModifyDataBean

ModifyDataBean 数据模型

字段 类型 描述
effectiveTime long 生效时间
invalidTime long 失效时间
ifEffective Boolean 是否生效中
name String 密码名称
scheduleList List 周期区间,模型参考ScheduleBean

临时密码无效列表

接口说明

/**
* 临时密码无效列表
*
* @param limit    分页数量
* @param offset   起始记录数
* @param callback 回调
*/
void getInvalidPasswordList(int offset, int limit, ITuyaResultCallback<PasswordBean> callback);

示例代码

zigBeeLock.getInvalidPasswordList(0, 100, new ITuyaResultCallback<PasswordBean>() {
    @Override
    public void onSuccess(PasswordBean result) {
        Log.i(Constant.TAG, "getInvalidPasswordList success: " + result);
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(Constant.TAG, "getInvalidPasswordList failed: code = " + errorCode + "  message = " + errorMessage);
    }
});

清空无效密码

接口说明

/**
* 清空无效密码
*
* @param callback 回调
*/
void removeInvalidPassword(ITuyaResultCallback<String> callback);

示例代码

zigBeeLock.removeInvalidPassword(new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
        Log.i(Constant.TAG, "removeInvalidPassword success: " + result);
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(Constant.TAG, "removeInvalidPassword failed: code = " + errorCode + "  message = " + errorMessage);
    }
});

获取动态密码

接口说明

/**
* 获取动态密码
*
* @param callback 回调
*/
void getDynamicPassword(ITuyaResultCallback<DynamicPasswordBean> callback);

DynamicPasswordBean 数据模型

字段 类型 描述
dynamicPassword String 动态明文密码

示例代码

zigBeeLock.getDynamicPassword(new ITuyaResultCallback<DynamicPasswordBean>() {
    @Override
    public void onSuccess(DynamicPasswordBean result) {
        Log.i(Constant.TAG, "getDynamicPassword success: " + result.getDynamicPassword());
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
        Log.e(Constant.TAG, "getDynamicPassword failed: code = " + errorCode + "  message = " + errorMessage);
    }
});

添加临时密码

接口说明

/**
* 添加临时密码
*
* @param request 入参
* @param callback 回调
*/
void addTemporaryPassword(PasswordRequest request, ITuyaResultCallback<String> callback);

PasswordRequest 数据模型

字段 类型 描述
id Long 云端序号
name String 密码名称
password String 密码内容
sn Int 临时密码在设备的编号
effectiveTime Long 生效时间
invalidTime Long 失效时间
availTime Int 可用次数
  • 0:永久
  • 1:一次性
schedule List 定时数据,参考ScheduleBean

ScheduleBean 数据模型

字段 类型 描述
workingDay Integer 工作日选择,详见workingDay特殊说明
allDay Boolean 是否全天
effectiveTime Integer 生效分钟
例如:当前早上 8 点整,值为 800
invalidTime Integer 失效分钟
例如:当前下午 18 点整,值为 1800
timeZoneId String 时区信息(选填)

workingDay 特殊说明

周循环的选择字段 workingDay 由七个 10 组成。其中 1 为开启、0 为关闭,排序示例如下。由二进制转换为十进制存储。

周日 周一 周二 周三 周四 周五 周六 二进制表示 计算结果(十进制)
1 1 1 1 1 1 1 1111111 127
0 0 0 0 0 0 0 0000000 0
0 1 1 1 1 0 0 0111100 60

示例代码

PasswordRequest passwordRequest = new PasswordRequest();
passwordRequest.setName("昵称");
passwordRequest.setPassword("密码");
passwordRequest.setSchedule("周期");
passwordRequest.setEffectiveTime("生效时间");
passwordRequest.setInvalidTime("失效时间");
passwordRequest.setAvailTime(0);
zigBeeLock.addTemporaryPassword(passwordRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

添加临时一次性密码

使用前,需要通过设备是否存在该 dpCode single_use_password,判断是否支持添加临时一次性密码。

接口说明

/**
* 添加临时一次性密码
*
* @param request 入参
* @param callback 回调
*/
void addTemporaryPassword(PasswordRequest request, ITuyaResultCallback<String> callback);

示例代码

PasswordRequest passwordRequest = new PasswordRequest();
passwordRequest.setName("昵称");
passwordRequest.setPassword("密码");//可以为空,云端生成
passwordRequest.setAvailTime(1);
zigBeeLock.addTemporaryPassword(passwordRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
        //如果未传密码,云端会生成随机密码,需自行解析展示返回的数据内容
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

临时密码重命名

接口说明

/**
* 临时密码重命名
*
* @param unlockName 密码名称
* @param pwdId   密码 ID(临时密码列表的 DataBean.id)
* @param callback   回调
*/
void updateTemporaryPassword(String unlockName, long pwdId, ITuyaResultCallback<Boolean> callback);

示例代码

zigBeeLock.updateTemporaryPassword("name", "id", new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

修改临时密码

修改周期性临时密码。

接口说明

/**
* 修改临时密码
*
* @param request 入参
* @param callback 回调
*/
void modifyTemporaryPassword(PasswordRequest request, ITuyaResultCallback<String> callback);

示例代码

PasswordRequest passwordRequest = new PasswordRequest();
passwordRequest.setId("id");
passwordRequest.setName("昵称");
passwordRequest.setSchedule("时效");
passwordRequest.setEffectiveTime("生效时间");
passwordRequest.setInvalidTime("失效时间");
passwordRequest.setAvailTime(0);
zigBeeLock.modifyTemporaryPassword(passwordRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

删除临时密码

接口说明

/**
* 删除临时密码
*
* @param removeRequest 入参
* @param callback      回调
*/
void removeTemporaryPassword(PasswordRemoveRequest removeRequest, ITuyaResultCallback<String> callback);

示例代码

PasswordRemoveRequest removeRequest = new PasswordRemoveRequest();
removeRequest.setId(dataBean.id);//密码 ID
removeRequest.setAvailTime(dataBean.oneTime);//一次性或周期性
removeRequest.setName(dataBean.name);//昵称
removeRequest.setEffectiveTime(dataBean.effectiveTime);//生效时间
removeRequest.setInvalidTime(dataBean.invalidTime);//失效时间
zigBeeLock.removeTemporaryPassword(removeRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

冻结临时密码

接口说明

/**
* 冻结临时密码
*
* @param request 入参
* @param callback 回调
*/
void freezeTemporaryPassword(PasswordRequest request, ITuyaResultCallback<String> callback);

示例代码

PasswordRequest passwordRequest = new PasswordRequest();
passwordRequest.setPassword(dataBean.password);
passwordRequest.setName(dataBean.name);
passwordRequest.setEffectiveTime(dataBean.effectiveTime);
passwordRequest.setInvalidTime(dataBean.invalidTime);
passwordRequest.setAvailTime(dataBean.oneTime);
passwordRequest.setId(dataBean.id);
zigBeeLock.freezeTemporaryPassword(passwordRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

解冻临时密码

接口说明

/**
* 解冻临时密码
*
* @param request 入参
* @param callback 回调
*/
void unfreezeTemporaryPassword(PasswordRequest request, ITuyaResultCallback<String> callback);

示例代码

PasswordRequest passwordRequest = new PasswordRequest();
passwordRequest.setPassword(dataBean.password);
passwordRequest.setName(dataBean.name);
passwordRequest.setEffectiveTime(dataBean.effectiveTime);
passwordRequest.setInvalidTime(dataBean.invalidTime);
passwordRequest.setAvailTime(dataBean.oneTime);
passwordRequest.setId(dataBean.id);
zigBeeLock.unfreezeTemporaryPassword(passwordRequest, new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

临时密码列表状态

根据列表返回的数据,展示对应的 UI 状态。

密码状态
phase:2
phase:3
operate:125
deliveryStatus:1
删除中
operate:其他
deliveryStatus:1
deliveryStatus:2
修改中
ifEffective:true
ifEffective:false
已生效
未生效
deliveryStatus:1
deliveryStatus:2
冻结中
已冻结

记录

告警未读数

接口说明

/**
* 告警未读数
*
* @param callback 回调
*/
void getUnreadAlarmNumber(ITuyaResultCallback<String> callback);

示例代码

zigBeeLock.getUnreadAlarmNumber(new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

告警记录(门铃+告警+劫持)

接口说明

/**
* 告警记录
*
* @param devId    设备 ID
* @param dpIds    告警类型 dpId
* @param offset   起始记录数
* @param limit    分页数量
* @param callback 回调
*/
void getAlarmRecordList(String devId, List<String> dpIds, int offset, int limit, final ITuyaResultCallback<RecordBean> callback);

示例代码

List<String> dpIds = new ArrayList<>();
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.HI_JACK));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.ALARM_LOCK));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.DOORBELL));
zigBeeLock.getAlarmRecordList(mDevId, dpIds, 0, 30, new ITuyaResultCallback<RecordBean>() {
    @Override
    public void onSuccess(RecordBean result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

开门记录

接口说明

/**
* 开门记录
*
* @param devId    设备 ID
* @param dpIds    各种解锁方式对应 dpId
* @param offset   起始记录数
* @param limit    分页数量
* @param callback 回调
*/
void getUnlockRecordList(String devId, List<String> dpIds, int offset, int limit, final ITuyaResultCallback<RecordBean> callback);

示例代码

List<String> dpIds = new ArrayList<>();
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_CARD));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_PASSWORD));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_DYNAMIC));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_FINGERPRINT));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_TEMPORARY));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_KEY));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.UNLOCK_REMOTE));
dpIds.add(zigBeeLock.convertCode2Id(ZigBeeDatePoint.OPEN_INSIDE));
zigBeeLock.getUnlockRecordList(mDevId, dpIds, 0, 30, new ITuyaResultCallback<RecordBean>() {
    @Override
    public void onSuccess(RecordBean result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
    }
});

绑定开门记录到用户

接口说明

/**
* 绑定开门记录到用户
*
* @param userId    用户 ID
* @param unlockIds 解锁方式
* @param callback 回调
*/
void bindOpModeToMember(String userId, List<String> unlockIds, ITuyaResultCallback<Boolean> callback);

请求参数

字段 类型 描述
userId String 用户 ID
unlockIds List 解锁方式列表

示例代码

iTuyaZigBeeLock.bindOpModeToMember(userId, unlockIds, new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.i(Constant.TAG, "bindOpModeToMember onSuccess: " + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "bindOpModeToMember failed: code = " + code + " message = " + message);
    }
});

远程相关功能

远程解锁

您需要自行监听设备支持的门状态相关 DP,用于展示是否正确开门,接口只返回执行成功。

接口说明

/**
* 远程解锁
*
* @param callback 回调
*/
void remoteUnlock(IResultCallback callback);

示例代码

zigBeeLock.remoteUnlock(new IResultCallback() {
    @Override
    public void onError(String code, String error) {
    }

    @Override
    public void onSuccess() {
    }
});

远程关锁

接口说明

/**
* 远程关锁
*
* @param callback 回调
*/
void remoteLock(IResultCallback callback);

示例代码

zigBeeLock.remoteLock(new IResultCallback() {
    @Override
    public void onError(String code, String error) {
    }

    @Override
    public void onSuccess() {
    }
});

查询远程解锁开关状态

接口说明

/**
* 查询远程解锁开关状态
*
* @param callback 回调
*/
void fetchRemoteUnlockType(ITuyaResultCallback<Boolean> callback);

示例代码

zigBeeLock.fetchRemoteUnlockType(new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.i(Constant.TAG, "fetchRemoteUnlockType success:" + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "fetchRemoteUnlockType failed: code = " + code + "  message = " + message);
    }
});

设置远程解锁开关

接口说明

/**
* 设置远程解锁开关
*
* @param isOpen   开关配置
* @param callback 回调
*/
void setRemoteUnlockType(boolean isOpen, IResultCallback callback);

示例代码

zigBeeLock.setRemoteUnlockType(isOpen, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
    }

    @Override
    public void onSuccess() {
    }
});

获取远程解锁权限

前置条件:设备需要支持 remote_no_dp_keyremote_unlock 两个远程 dpCode,其中 remote_unlock 为远程含密解锁的前置判断。如果不支持 remote_unlock,需要隐藏含密相关功能。

门锁App云端dpCode 远程含密或免密能力支持判断获取远程解锁权限返回结果数据用户单击远程开门按钮判断是否需要远程含密或免密如果是免密,直接请求远程开门返回结果如果是含密,填写解锁方式的密码调用远程含密接口返回结果处理展示结果门锁App云端

接口说明

/**
* 获取远程解锁权限
*
* @param callback 回调
*/
void getRemoteUnlockPermissionValue(ITuyaResultCallback<RemotePermissionEnum> callback);

示例代码

zigBeeLock.getRemoteUnlockPermissionValue(new ITuyaResultCallback<RemotePermissionEnum>() {
    @Override
    public void onSuccess(RemotePermissionEnum result) {
    }
}

RemotePermissionEnum 枚举解析

类型 描述
REMOTE_NOT_DP_KEY_ALL 所有人免密
REMOTE_NOT_DP_KEY_ADMIN 管理员免密
REMOTE_UNLOCK_ALL 所有人含密
REMOTE_UNLOCK_ADMIN 管理员含密

远程含密解锁

注意,含密解锁的密码是成员解锁方式的密码,不是临时密码。

示例代码

zigBeeLock.remoteUnlock(password, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
    }

    @Override
    public void onSuccess() {
    }
});

设置远程解锁权限

接口说明

/**
* 设置远程解锁权限
*
* @param permissionEnum 权限枚举
* @param callback       回调
*/
void setRemoteUnlockPermissionValue(RemotePermissionEnum permissionEnum, IResultCallback callback);

示例代码

zigBeeLock.setRemoteUnlockPermissionValue(RemotePermissionEnum.REMOTE_NOT_DP_KEY_ADMIN, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
    }

    @Override
    public void onSuccess() {
    }
});

查询音箱密码开启状态

接口说明

/**
* 查询音箱密码开启状态
*
* @param callback 回调
*/
void fetchRemoteVoiceUnlock(ITuyaResultCallback<Boolean> callback);

示例代码

zigBeeLock.fetchRemoteVoiceUnlock(new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
        Log.i(Constant.TAG, "fetchRemoteVoiceUnlock success:" + result);
    }

    @Override
    public void onError(String code, String message) {
        Log.e(Constant.TAG, "fetchRemoteVoiceUnlock failed: code = " + code + "  message = " + message);
    }
});

设置或取消音箱密码

接口说明

/**
* 设置或取消音箱密码
*
* @param isOpen   设置或取消
* @param password 密码
* @param callback 回调
*/
void setRemoteVoiceUnlock(boolean isOpen, String password, ITuyaResultCallback<Boolean> callback);

示例代码

zigBeeLock.setRemoteVoiceUnlock(isOpen, password, new ITuyaResultCallback<Boolean>() {
    @Override
    public void onSuccess(Boolean result) {
    }

    @Override
    public void onError(String code, String error) {
    }
});

其他功能

获取设备迄今为止的激活时间

获取设备迄今为止的激活时间,例如,已安全守护多少天等功能。

接口说明

/**
* 获取设备迄今为止的激活时间
*
* @param callback 回调
*/
void getSecurityGuardDays(ITuyaResultCallback<String> callback);

示例代码

zigBeeLock.getSecurityGuardDays(new ITuyaResultCallback<String>() {
    @Override
    public void onSuccess(String result) {
    }

    @Override
    public void onError(String errorCode, String errorMessage) {

    }
});

获取设备云能力

获取设备的面板云能力。

接口说明

/**
* 获取设备云能力
*
* @param callback 回调
*/
void getLockDeviceConfig(ITuyaResultCallback<JSONObject> callback);

示例代码

zigBeeLock.getLockDeviceConfig(new ITuyaResultCallback<JSONObject>() {
    @Override
    public void onSuccess(JSONObject result) {
        JSONObject powerCode = result.getJSONObject("powerCode");
    }

    @Override
    public void onError(String errorCode, String errorMessage) {

    }
});

其他

错误码

错误码 说明
-10002 设备离线
-10003 请求超时
-10004 数据校验失败
-10005 数据不存在
-10006 DP 不存在
-11001 用户取消录入解锁方式
-11002 指纹不完整
-11003 设备上报添加开锁方式录入失败
-11004 删除解锁方式失败
-11005 解锁方式不可删除
-11007 添加解锁方式-重复录入
-11008 添加解锁方式-硬件编号分配完
-11009 添加开锁方式-添加密码非数字
-11010 添加开锁方式-密码长度错误
-11011 添加开锁方式-不支持添加的解锁方式类型
-11012 添加开锁方式-当前正处于指纹录入
-11013 添加开锁方式-错误的编号
-11014 密码为空

开门记录对应 DP

DP 功能说明
unlock_fingerprint 指纹
unlock_password 密码
unlock_temporary 临时密码
unlock_dynamic 动态密码
unlock_card 门卡
unlock_face 人脸
unlock_key 钥匙
unlock_remote 远程
open_inside 从门内打开