Zigbee 门锁

更新时间:2024-10-21 03:28:08下载pdf

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

使用说明

类名 说明
TuyaSmartZigbeeLockDevice Zigbee 门锁设备操作类,继承自 ThingSmartDevice
TuyaSmartZigbeeLockDeviceDelegate Zigbee 门锁设备协议代理,拓展自 ThingSmartDeviceDelegate

示例代码

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

//创建 Zigbee 门锁设备对象
TuyaSmartZigbeeLockDevice *zigbeeDevice = [TuyaSmartZigbeeLockDevice deviceWithDeviceId:devId];
//设置门锁对象代理
zigbeeDevice.delegate = self;

名词解释

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

家庭成员

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

家庭成员列表

接口说明

/// 家庭成员列表
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getMemberListWithDevId:(NSString *)devId
                       success:(nullable TYSuccessID)success
                       failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice getMemberListWithDevId:self.devId success:^(id result) {
      NSArray *memberList = (NSArray *)result;
      NSLog(@"获取家庭成员列表成功");
} failure:^(NSError *error) {
      NSLog(@"获取家庭成员列表失败");
}];

成员详情

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

接口说明

/// 成员详情
/// @param devId 设备 ID
/// @param userId 用户 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getMemberInfoWithDevId:(NSString *)devId
                        userId:(NSString *)userId
                       success:(nullable TYSuccessID)success
                       failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
userId 用户 ID
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice getMemberInfoWithDevId:devId userId:userId success:^(id result) {
      NSDictionary *memberInfo = (NSDictionary *)result;
      NSLog(@"获取家庭成员详情成功");
} failure:^(NSError *error) {
      NSLog(@"获取家庭成员详情失败");
}];

添加家庭成员

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

接口说明

/// 添加家庭成员
/// @param homeId 家庭 ID
/// @param requestModel 添加成员请求模型
/// @param success 成功回调
/// @param failure 失败回调
- (void)addMemberWithHomeId:(long long)homeId
               requestModel:(TuyaSmartHomeAddMemberRequestModel *)requestModel
                    success:(TYSuccessDict)success
                    failure:(TYFailureError)failure;

TuyaSmartHomeAddMemberRequestModel 数据模型

请参考 家庭成员信息

示例代码

[self.zigbeeDevice addMemberWithHomeId:homeId requestModel:model success:^(NSDictionary *dict) {
     NSLog(@"创建家庭成员成功");
} failure:^(NSError *error) {
     NSLog(@"创建家庭成员失败");
}];

删除单个家庭成员

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

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

接口说明

/// 删除单个家庭成员
/// @param memberId 用户 ID
/// @param isAdmin 是否是管理员
/// @param lockUserId 用户在锁固件里的 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)removeMemberWithMemberId:(NSString *)memberId
                         isAdmin:(BOOL)isAdmin
                      lockUserId:(int)lockUserId
                         success:(TYSuccessHandler)success
                         failure:(nullable TYFailureError)failure;

参数说明

字段 说明
memberId 用户 ID
isAdmin 是否是管理员
lockUserId 用户在锁固件里的 ID
success 成功回调
failure 失败回调

示例代码

int userType = [model[@"userType"] intValue];
BOOL isAdmin = (userType == 10 || userType == 50) ? YES : NO;
[self.zigbeeDevice removeMemberWithMemberId:model[@"userId"] isAdmin:isAdmin lockUserId:lockUserId success:^{
         NSLog(@"删除成员成功");
} failure:^(NSError *error) {
         NSLog(@"删除成员失败");
}];

修改单个成员信息

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

接口说明

/// 修改单个成员信息
/// @param memberRequestModel 家庭成员模型
/// @param success 成功回调
/// @param failure 失败回调
- (void)updateMemberWithRequestModel:(TuyaSmartHomeMemberRequestModel *)memberRequestModel
                             success:(TYSuccessHandler)success
                             failure:(TYFailureError)failure;

TuyaSmartHomeMemberRequestModel 数据模型

请参考 家庭成员信息

示例代码

[self.zigbeeDevice updateMemberWithRequestModel:model success:^{
        NSLog(@"修改单个成员成功");
} failure:^(NSError *error) {
        NSLog(@"修改单个成员失败");
}];

解锁方式

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

接口说明

/// 获取成员已绑定的解锁方式列表
/// @param devId 设备 ID
/// @param userId 用户 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getMemberOpmodeListWithDevId:(NSString *)devId
                              userId:(NSString *)userId
                             success:(nullable void(^)(NSArray<TuyaSmartZigbeeLockOpmodeModel *> *models))success
                             failure:(nullable TYFailureError)failure;

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

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

参数说明

字段 说明
devId 设备 ID
userId 用户 ID
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice getMemberOpmodeListWithDevId:devId userId:memberId success:^(NSArray<TuyaSmartZigbeeLockOpmodeModel *> * _Nonnull models) {
         NSLog(@"解锁方式列表获取成功");
} failure:^(NSError *error) {
         NSLog(@"解锁方式列表获取失败");
}];

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

接口说明

/// 获取成员未绑定的解锁方式列表
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getUnallocOpModeWithDevId:(NSString *)devId
                          success:(nullable TYSuccessID)success
                          failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice getUnallocOpModeWithDevId:self.devId success:^(id result) {
        NSArray *datalist = (NSArray *)result;
        NSLog(@"获取未被分配的解锁方式成功");
} failure:^(NSError *error) {
         NSLog(@"获取未被分配的解锁方式失败");
}];

解锁方式分配到人

接口说明

/// 解锁方式分配到人
/// @param devId 设备 ID
/// @param userId 成员 ID
/// @param unlockIds 解锁方式 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)allocUnlockOpModeWithDevId:(NSString *)devId
                            userId:(NSString *)userId
                         unlockIds:(NSString *)unlockIds
                           success:(TYSuccessID)success
                           failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
userId 成员 ID
unlockIds 解锁方式列表
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice allocUnlockOpModeWithDevId:self.devId userId:userId unlockIds:@[unlockId].tysdk_JSONString success:^(id result) {
         BOOL isSuccess = [result boolValue];
         NSLog(@"解锁方式分配成功");
} failure:^(NSError *error) {
         NSLog(@"解锁方式分配失败");
}];

添加解锁方式

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

接口说明

/// 添加解锁方式
/// @param devId 设备 ID
/// @param isAdmin 是否是管理员
/// @param unlockOpType 解锁方式
/// @param unlockDpCode 解锁方式对应的 DP code,具体查看产品定义
/// @param lockUserId 用户在锁固件里的 ID
/// @param userId 用户 ID
/// @param unlockName 解锁方式名称
/// @param needHijacking 是否设置为防劫持
/// @param success 成功回调
/// @param failure 失败回调
- (void)addUnlockOpmodeForMemberWithDevId:(NSString *)devId
                                  isAdmin:(BOOL)isAdmin
                             unlockOpType:(TYUnlockOpType)unlockOpType
                             unlockDpCode:(NSString *)unlockDpCode
                               lockUserId:(int)lockUserId
                                   userId:(NSString *)userId
                               unlockName:(NSString *)unlockName
                            needHijacking:(BOOL)needHijacking
                                  success:(nullable TYSuccessID)success
                                  failure:(nullable TYFailureError)failure;

/// 添加解锁方式(直接带密码下发)
/// @param devId 设备 ID
/// @param isAdmin 是否是管理员
/// @param password 密码
/// @param lockUserId 用户在锁固件里的 ID
/// @param userId 用户 ID
/// @param unlockName 解锁方式名称
/// @param needHijacking 是否设置为防劫持
/// @param success 成功回调
/// @param failure 失败回调
- (void)addPasswordOpmodeForMemberWithDevId:(NSString *)devId
                                    isAdmin:(BOOL)isAdmin
                                   password:(NSString *)password
                                 lockUserId:(int)lockUserId
                                     userId:(NSString *)userId
                                 unlockName:(NSString *)unlockName
                              needHijacking:(BOOL)needHijacking
                                    success:(nullable TYSuccessID)success
                                    failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
isAdmin 是否是管理员
unlockOpType 解锁方式
unlockDpCode 解锁方式对应的 DP code
lockUserId 用户在门锁固件上的 ID
userId 用户 ID
unlockName 解锁方式名称
needHijacking 是否设置为防劫持
password 密码类型密码(带密码下发需要)
success 成功回调
failure 失败回调

密码添加解锁方式区别

  • addUnlockOpmodeForMemberWithDevId:设备端输入密码,来新增解锁方式包含门卡、指纹、密码

  • addPasswordOpmodeForMemberWithDevId:App 端输入密码,来新增密码解锁方式

云能力获取示例代码

通过接口返回的 tyabitmqxx 值,判断两种接口的使用。

字段 描述
true 使用 addUnlockOpmodeForMemberWithDevId
false 使用 addPasswordOpmodeForMemberWithDevId
self.tyabitmqxx = YES;
WEAKSELF_TYSDK
[self.zigbeeDevice getLockDeviceConfigWithProductId:self.zigbeeDevice.deviceModel.productId options:@"uiContent,cloudDp,powerCode" success:^(id result) {
      if (!result){
          weakSelf_TYSDK.tyabitmqxx = NO;
      }
      else{
          NSDictionary *powerCode = result[@"powerCode"];
          if (powerCode[@"tyabitmqxx"]){
              weakSelf_TYSDK.tyabitmqxx = [powerCode[@"tyabitmqxx"] boolValue];
          }
      }
} failure:^(NSError *error) {
         NSLog(@"云能力接口调用失败");
}];

添加解锁方式示例代码

[self.zigbeeDevice addUnlockOpmodeForMemberWithDevId:self.devId
                                             isAdmin:isAdmin
                                        unlockOpType:self.unlockModeType
                                        unlockDpCode:@"unlock_password"
                                          lockUserId:self.lockUserId
                                         userId:self.memberId
                                         unlockName:@"zigbee 密码测试-01"
                                         needHijacking:NO
                                         success:^(id result) {
         NSDictionary *data = (NSDictionary*)result;
         NSLog(@"添加密码成功");
} failure:^(NSError *error) {
         NSLog(@"添加密码失败");
}];

[self.zigbeeDevice addPasswordOpmodeForMemberWithDevId:self.devId
                                                  isAdmin:isAdmin
                                               password:password
                                             lockUserId:lockUserId
                                                 userId:userId
                                             unlockName:@"zigbee 密码测试-08"
                                          needHijacking:NO
                                                success:^(id result) {
         NSDictionary *data = (NSDictionary*)result;
         NSLog(@"添加密码成功");
} failure:^(NSError *error) {
         NSLog(@"添加密码失败");
}];

更新解锁方式信息

该方法只能更新解锁方式名称。关于防劫持操作,参考 设置防劫持移除防劫持

接口说明

/// 更新解锁方式信息
/// @param devId 设备 ID
/// @param opmodeId 解锁方式 ID
/// @param unlockName 解锁方式名称
/// @param success 成功回调
/// @param failure 失败回调
- (void)modifyUnlockOpmodeForMemberWithDevId:(NSString *)devId
                                    opmodeId:(NSString *)opmodeId
                                  unlockName:(NSString *)unlockName
                                     success:(nullable TYSuccessID)success
                                     failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice modifyUnlockOpmodeForMemberWithDevId:self.devId
                                               opmodeId:opmodeId
                                             unlockName:unlockName
                                                success:^(id result) {
         NSDictionary *data = (NSDictionary*)result;
         NSLog(@"更新解锁成功");
} failure:^(NSError *error) {
         NSLog(@"更新解锁失败");
}];

删除解锁方式

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

接口说明

/// 删除解锁方式
/// @param devId 设备 ID
/// @param isAdmin 是否是管理员
/// @param lockUserId 用户在锁固件里的 ID
/// @param opmodeId 解锁方式 ID
/// @param firmwareId 设备硬件 ID
/// @param unlockDpCode 解锁方式对应的 DP code,具体查看产品定义
/// @param unlockOpType 解锁方式
/// @param success 成功回调
/// @param failure 失败回调
- (void)removeUnlockOpmodeForMemberWithDevId:(NSString *)devId
                                     isAdmin:(BOOL)isAdmin
                                  lockUserId:(int)lockUserId
                                    opmodeId:(NSString *)opmodeId
                                  firmwareId:(NSString *)firmwareId
                                unlockDpCode:(NSString *)unlockDpCode
                                unlockOpType:(TYUnlockOpType)unlockOpType
                                     success:(nullable TYSuccessID)success
                                     failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
isAdmin 是否是管理员
lockUserId 用户在锁固件里的 ID
opmodeId 解锁方式云端序号
firmwareId 硬件 ID
unlockDpCode 解锁方式对应的 DP code
unlockOpType 解锁方式
success 回调成功
failure 回调失败

示例代码

[self.zigbeeDevice removeUnlockOpmodeForMemberWithDevId:self.devId
                                                isAdmin:isAdmin
                                             lockUserId:lockUserId
                                               opmodeId:opmodeId
                                             firmwareId:opmodeValue
                                           unlockDpCode:@"unlock_fingerprint"
                                           unlockOpType:TYUnlockOpTypeFinger
                                                success:^(id result) {
         BOOL isSuccess = [result boolValue];
         NSLog(@"删除指纹成功");
} failure:^(NSError *error) {
       NSLog(@"删除指纹失败");
}];

解锁方式取消录入

接口说明

/// 解锁方式取消录入
/// @param isAdmin 是否是管理员
/// @param lockUserId 用户在锁固件里的 ID
/// @param unlockOpType 解锁方式
/// @param success 成功回调
/// @param failure 失败回调
- (void)cancelUnlockOpmodeWithAdmin:(BOOL)isAdmin
                         lockUserId:(int)lockUserId
                       unlockOpType:(TYUnlockOpType)unlockOpType
                            success:(nullable TYSuccessBOOL)success
                            failure:(nullable TYFailureError)failure;

参数说明

字段 说明
isAdmin 是否管理员
lockUserId 用户在锁固件里的 ID
unlockOpType 解锁方式
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice cancelUnlockOpmodeWithAdmin:isAdmin
                                    lockUserId:lockUserId
                                  unlockOpType:unlockOpType
                                       success:^(BOOL result) {
         NSLog(@"取消录入成功");
}failure:^(NSError *error) {
         NSLog(@"取消录入失败");
}];

防劫持设置

接口说明

/// 防劫持设置
/// @param devId 设备 ID
/// @param dpId DP ID
/// @param unlockId 解锁方式编号
/// @param success 成功回调
/// @param failure 失败回调
- (void)addHijackingConfigWithDevId:(NSString *)devId
                               dpId:(NSString *)dpId
                           unlockId:(NSString *)unlockId
                            success:(nullable TYSuccessBOOL)success
                            failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
dpId 设备 DP ID
unlockId 解锁方式编号
success 成功回调
failure 失败回调

示例代码

[self.zigbeeDevice addHijackingConfigWithDevId:self.devId
                                          dpId:dpId
                                      unlockId:unlockId
                                       success:^(BOOL result) {
         NSLog(@"设置劫持成功");
} failure:^(NSError *error) {
         NSLog(@"设置劫持失败");
}];

移除防劫持设置

接口说明

/// 移除防劫持设置
/// @param devId 设备 ID
/// @param dpId DP ID
/// @param unlockId 解锁方式编号
/// @param success 成功回调
/// @param failure 失败回调
- (void)removeHijackingConfigWithDevId:(NSString *)devId
                                  dpId:(NSString *)dpId
                              unlockId:(NSString *)unlockId
                               success:(nullable TYSuccessID)success
                               failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice removeHijackingConfigWithDevId:self.devId
                                             dpId:dpId
                                         unlockId:unlockId
                                          success:^(id result) {
         NSLog(@"劫持设置移除成功");
} failure:^(NSError *error) {
         NSLog(@"劫持设置移除失败");
}];

临时密码

临时密码列表

接口说明

/// 临时密码列表
/// @param devId 设备 ID
/// @param offset 起始记录数
/// @param limit 每页限制数据条数
/// @param success 成功回调
/// @param failure 失败回调
- (void)getPasswordListWithDevId:(NSString *)devId
                          offset:(int)offset
                           limit:(int)limit
                         success:(nullable TYSuccessID)success
                         failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getPasswordListWithDevId:self.devId offset:0 limit:50 success:^(id result) {
         NSLog(@"有效临时密码列表获取成功");
} failure:^(NSError *error) {
         NSLog(@"有效临时密码列表获取失败");
}];

临时密码无效列表

接口说明

/// 临时密码无效列表
/// @param devId 设备 ID
/// @param offset 起始记录数
/// @param limit 每页限制数据条数
/// @param success 成功回调
/// @param failure 失败回调
- (void)getInvalidPasswordListWithDevId:(NSString *)devId
                                 offset:(int)offset
                                  limit:(int)limit
                                success:(nullable TYSuccessID)success
                                failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getInvalidPasswordListWithDevId:self.devId offset:0 limit:50 success:^(id result) {
         NSLog(@"无效临时密码列表获取成功");
} failure:^(NSError *error) {
         NSLog(@"无效临时密码列表获取失败");
}];

清空无效密码

接口说明

/// 清空无效密码
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)removeInvalidPasswordWithDevId:(NSString *)devId
                               success:(nullable TYSuccessID)success
                               failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice removeInvalidPasswordWithDevId:self.devId success:^(id result) {
         NSLog(@"清空无效密码成功");
} failure:^(NSError *error) {
         NSLog(@"清空无效密码失败");
}];

获取动态密码

接口说明

/// 获取动态密码
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getDynamicPasswordWithDevId:(NSString *)devId
                            success:(nullable TYSuccessID)success
                            failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getDynamicPasswordWithDevId:self.devId success:^(id result) {
        NSLog(@"动态密码获取成功");
} failure:^(NSError *error) {
        NSLog(@"动态密码获取失败");
}];

添加临时密码

接口说明

/// 添加临时密码
/// @param devId 设备 ID
/// @param name 密码名称
/// @param effectiveTime 生效时间
/// @param invalidTime 失效时间
/// @param password 密码
/// @param schedule 周期
/// @param oneTime 是否一次性密码(0 否,1 是)
/// @param success 成功回调
/// @param failure 失败回调
- (void)addTemporaryPasswordWithDevId:(NSString *)devId
                                 name:(NSString *)name
                        effectiveTime:(NSTimeInterval)effectiveTime
                          invalidTime:(NSTimeInterval)invalidTime
                             password:(NSString *)password
                             schedule:(NSString *)schedule
                              oneTime:(NSInteger)oneTime
                              success:(nullable TYSuccessID)success
                              failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
name 密码名称
effectiveTime 生效时间
invalidTime 失效时间
password 密码内容
schedule 定时数据,参考 NSArray <TuyaSmartBLELockScheduleModel*> *
oneTime 可用次数,0 表示永久,1 表示一次性
success 回调成功
failure 回调失败

TuyaSmartBLELockScheduleModel 数据模型

字段 类型 描述
workingDay NSInteger 工作日选择,详见 workingDay 特殊说明
allDay BOOL 是否全天
effectiveTime NSInteger 生效分钟
例如:当前早上 8 点整,值为 800
invalidTime NSInteger 失效分钟
例如:当前下午 18 点整,值为 1800

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

示例代码

NSArray<ThingSmartBLELockScheduleModel *> *scheduleList = data;
NSString *schedule = scheduleList.yy_modelToJSONString;
[self.zigbeeDevice addTemporaryPasswordWithDevId:self.devId
                                            name:name
                                   effectiveTime:effectiveTime
                                     invalidTime:invalidTime
                                        password:password
                                        schedule:schedule
                                         oneTime:0
                                         success:^(id result) {
        NSDictionary *data = (NSDictionary*)result;
        NSLog(@"创建周期密码成功");
} failure:^(NSError *error) {
        NSLog(@"创建周期密码失败");
}];

临时密码重命名

接口说明

/// 密码名称重命名
/// @param devId 设备 ID
/// @param pwdId 密码 ID
/// @param name 密码名称
/// @param success 成功回调
/// @param failure 失败回调
- (void)updateTemporaryPasswordWithDevId:(NSString *)devId
                                   pwdId:(NSInteger)pwdId
                                    name:(NSString *)name
                                 success:(nullable TYSuccessID)success
                                 failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice updateTemporaryPasswordWithDevId:self.devId
                                              pwdId:pwdId
                                               name:name
                                            success:^(id result) {
        NSLog(@"密码重命名成功");
} failure:^(NSError *error) {
        NSLog(@"密码重命名失败");
}];

修改临时密码

修改周期性临时密码。

接口说明

/// 修改密码时效(硬件交互)
/// @param devId 设备 ID
/// @param pwdId 密码 ID
/// @param name 密码名称
/// @param effectiveTime 生效时间
/// @param invalidTime 失效时间
/// @param schedule 周期
/// @param oneTime 是否一次性密码(0 否,1 是)
/// @param success 成功回调
/// @param failure 失败回调
- (void)modifyTemporaryPasswordWithDevId:(NSString *)devId
                                   pwdId:(NSInteger)pwdId
                                    name:(NSString *)name
                           effectiveTime:(NSTimeInterval)effectiveTime
                             invalidTime:(NSTimeInterval)invalidTime
                                schedule:(NSString *)schedule
                                 oneTime:(NSInteger)oneTime
                                 success:(nullable TYSuccessID)success
                                 failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice modifyTemporaryPasswordWithDevId:self.devId
                                               pwdId:pwdId                                                                      name:name
                                      effectiveTime:effectiveTime
                                        invalidTime:invalidTime
                                           schedule:schedule
                                            oneTime:oneTime
                                            success:^(id result) {
        NSLog(@"密码更新成功");
} failure:^(NSError *error) {
        NSLog(@"密码更新失败");
}];

删除临时密码

接口说明

/// 删除临时密码
/// @param devId 设备 ID
/// @param pwdId 密码 ID
/// @param name 密码名称
/// @param effectiveTime 生效时间
/// @param invalidTime 失效时间
/// @param oneTime 是否一次性密码(0 否,1 是)
/// @param success 成功回调
/// @param failure 失败回调
- (void)removeTemporaryPasswordWithDevId:(NSString *)devId
                                   pwdId:(NSInteger)pwdId
                                    name:(NSString *)name
                           effectiveTime:(NSTimeInterval)effectiveTime
                             invalidTime:(NSTimeInterval)invalidTime
                                 oneTime:(NSInteger)oneTime
                                 success:(nullable TYSuccessID)success
                                 failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice removeTemporaryPasswordWithDevId:self.devId
                                                        pwdId:pwdId
                                                         name:name
                                                effectiveTime:effectiveTime
                                                  invalidTime:invalidTime
                                                      oneTime:oneTime
                                                      success:^(id result) {
        NSLog(@"删除密码成功");
} failure:^(NSError *error) {
        NSLog(@"删除密码失败");
}];

冻结临时密码

接口说明

/// 冻结临时密码
/// @param devId 设备 ID
/// @param pwdId 密码 ID
/// @param name 密码名称
/// @param effectiveTime 生效时间
/// @param invalidTime 失效时间
/// @param oneTime 是否一次性密码(0 否,1 是)
/// @param success 成功回调
/// @param failure 失败回调
- (void)freezeTemporaryPasswordWithDevId:(NSString *)devId
                                   pwdId:(NSInteger)pwdId
                                    name:(NSString *)name
                           effectiveTime:(NSTimeInterval)effectiveTime
                             invalidTime:(NSTimeInterval)invalidTime
                                 oneTime:(NSInteger)oneTime
                                 success:(nullable TYSuccessID)success
                                 failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice freezeTemporaryPasswordWithDevId:self.devId
                                              pwdId:pwdId
                                               name:name
                                      effectiveTime:effectiveTime
                                        invalidTime:invalidTime
                                            oneTime:oneTime
                                            success:^(id result) {
            NSLog(@"冻结密码成功");
} failure:^(NSError *error) {
            NSLog(@"冻结密码失败");
}];

解冻临时密码

接口说明

/// 解冻临时密码
/// @param devId 设备 ID
/// @param pwdId 密码 ID
/// @param name 密码名称
/// @param effectiveTime 生效时间
/// @param invalidTime 失效时间
/// @param oneTime 是否一次性密码(0 否,1 是)
/// @param success 成功回调
/// @param failure 失败回调
- (void)unfreezeTemporaryPasswordWithDevId:(NSString *)devId
                                     pwdId:(NSInteger)pwdId
                                      name:(NSString *)name
                             effectiveTime:(NSTimeInterval)effectiveTime
                               invalidTime:(NSTimeInterval)invalidTime
                                   oneTime:(NSInteger)oneTime
                                   success:(nullable TYSuccessID)success
                                   failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice unfreezeTemporaryPasswordWithDevId:self.devId
                                                pwdId:pwdId
                                                 name:name
                                        effectiveTime:effectiveTime
                                          invalidTime:invalidTime
                                              oneTime:oneTime
                                              success:^(id result) {
            NSLog(@"解冻密码成功");
} failure:^(NSError *error) {
            NSLog(@"解冻密码失败");
}];

临时密码列表状态

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

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

记录

告警未读数

接口说明

/// 告警未读数
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getUnreadAlarmNumberWithDevId:(NSString *)devId
                              success:(nullable TYSuccessID)success
                              failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getUnreadAlarmNumberWithDevId:self.devId success:^(id result){
            int value = [result intValue];
            NSLog(@"告警未读数获取成功");
} failure:^(NSError *error) {
            NSLog(@"告警未读数获取失败");
}];

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

接口说明

/// 告警记录
/// @param devId 设备 ID
/// @param dpIds 告警类型 dpId
/// @param offset 起始记录数
/// @param limit 分页数量
/// @param success 成功回调
/// @param failure 失败回调
- (void)getAlarmRecordListWithDevId:(NSString *)devId
                              dpIds:(NSArray *)dpIds
                             offset:(int)offset
                              limit:(int)limit
                            success:(nullable TYSuccessID)success
                            failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getAlarmRecordListWithDevId:self.devId
                                         dpIds:@[@"hijack",@"alarm_lock",@"doorbell"]
                                        offset:0
                                        limit:50
                                       success:^(id result) {
            NSLog(@"告警记录获取成功");
  } failure:^(NSError *error) {
            NSLog(@"告警记录获取失败");
  }];

开门记录

接口说明

/// 开门记录
/// @param devId 设备 ID
/// @param dpIds 开门记录 dpId 集合
/// @param startTime 开始时间
/// @param endTime 结束时间
/// @param offset 起始记录数
/// @param limit 每页限制数据条数
/// @param success 成功回调
/// @param failure 失败回调
- (void)getUnlockRecordListWithDevId:(NSString *)devId
                               dpIds:(NSArray *)dpIds
                           startTime:(NSInteger)startTime
                             endTime:(NSInteger)endTime
                              offset:(int)offset
                               limit:(int)limit
                             success:(nullable TYSuccessID)success
                             failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getUnlockRecordListWithDevId:self.devId
                                          dpIds:dpIds
                                      startTime:0
                                        endTime:0
                                         offset:0
                                          limit:50
                                        success:^(id result) {
            NSLog(@"开门记录获取成功");
} failure:^(NSError *error) {
            NSLog(@"开门记录获取失败");
}];

绑定开门记录到用户

接口说明

/// 绑定开门记录到用户
/// @param devId 设备 ID
/// @param userId 用户 ID
/// @param unlockIds 解锁方式列表
/// @param success 成功回调
/// @param failure 失败回调
- (void)bindUnlockOpModeWithDevId:(NSString *)devId
                           userId:(NSString *)userId
                        unlockIds:(NSString *)unlockIds
                          success:(TYSuccessID)success
                          failure:(nullable TYFailureError)failure;

参数说明

字段 说明
devId 设备 ID
userId 成员 ID
unlockIds 解锁方式列表
success 成功回调
failure 失败回调

示例代码

NSString *unlockIds = [NSString stringWithFormat:@"%@-%@",[self.currentDic[@"dpId"] stringValue],[self.currentDic[@"dpValue"] stringValue]];
[self.zigbeeDevice bindUnlockOpModeWithDevId:self.devId userId:[dic[@"userId"] stringValue] unlockIds:@[unlockIds].tysdk_JSONString success:^(id result) {
         BOOL isSuccess = [result boolValue];
         NSLog(@"绑定成功");
} failure:^(NSError *error) {
         NSLog(@"绑定失败");
}];

远程相关功能

远程解锁

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

接口说明

/// 远程解锁
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)remoteUnlockWithDevId:(NSString *)devId
                      success:(nullable TYSuccessID)success
                      failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice remoteUnlockWithDevId:self.devId success:^(id result) {
            NSLog(@"免密远程解锁成功");
} failure:^(NSError *error) {
            NSLog(@"免密远程解锁失败");
}];

远程关锁

接口说明

/// 远程关锁
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)remoteLockWithDevId:(NSString *)devId
                    success:(nullable TYSuccessID)success
                    failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice remoteLockWithDevId:self.devId success:^(id result) {
            NSLog(@"远程关锁成功");
} failure:^(NSError *error) {
            NSLog(@"远程关锁失败");
}];

查询远程解锁开关状态

接口说明

/// 查询远程解锁开关状态
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)fetchRemoteUnlockTypeWithDevId:(NSString *)devId
                               success:(nullable TYSuccessID)success
                               failure:(nullable TYFailureError)failure;

示例代码

WEAKSELF_TYSDK
[self.zigbeeDevice fetchRemoteUnlockTypeWithDevId:self.devId
                                           success:^(id result) {
    weakSelf_TYSDK.isRemoteOpen = [result[@"isRemoteOpen"] boolValue];
        NSLog(@"查询状态成功");
} failure:^(NSError *error) {
        NSLog(@"查询状态失败");
}];

设置远程解锁开关

接口说明

/// 设置远程解锁开关
/// @param devId 设备 ID
/// @param open 开关状态
/// @param success 成功回调
/// @param failure 失败回调
- (void)setRemoteUnlockTypeWithDevId:(NSString *)devId
                                open:(BOOL)open
                             success:(nullable TYSuccessID)success
                             failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice setRemoteUnlockTypeWithDevId:self.devId
                                           open:isOpen
                                             success:^(id result) {
        NSLog(@"设置成功");
} failure:^(NSError *error) {
        NSLog(@"设置失败");
}];

获取远程解锁权限

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

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

接口说明

/// 获取远程解锁权限
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getRemoteUnlockPermissionValueWithDevId:(NSString *)devId
                                        success:(nullable void(^)(TuyaSmartZigbeeLockRemotePermissionModel *model))success
                                        failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getRemoteUnlockPermissionValueWithDevId:self.devId             success:^(TuyaSmartZigbeeLockRemotePermissionModel * _Nonnull model) {
        NSLog(@"远程解锁权限获取成功");
} failure:^(NSError *error) {
        NSLog(@"远程解锁权限获取失败");
}];

接口返回解析

{
    "remoteOpenState": {
        "type": "password",
        "user": "admin",
        "way": "remote_no_dp_key"//remote_unlock
    }
}

TuyaSmartZigbeeLockRemotePermissionModel 数据模型

如果是管理员免密、或者管理员含密,则普通用户展示不可用。

字段 类型 描述
type NSString 类型,password 不变
user NSString 用户
  • admin:管理员
  • all:所有人
way NSString
  • remote_no_dp_key:免密解锁
  • remote_unlock:含密解锁

更多信息,参考 ThingRemotePermissionType 枚举

远程含密解锁

接口说明

/// 含密远程解锁
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)remoteUnlockWithDevId:(NSString *)devId
                     password:(NSString *)password
                      success:(nullable TYSuccessID)success
                      failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice remoteUnlockWithDevId:self.devId
                                password:password
                                 success:^(id result) {
            NSLog(@"含密远程解锁成功");
} failure:^(NSError *error) {
            NSLog(@"含密远程解锁失败");
}];

设置远程解锁权限

接口说明

/// 设置远程解锁权限
/// @param devId 设备 ID
/// @param remotePermissionType 权限类型
/// @param success 成功回调
/// @param failure 失败回调
- (void)setRemoteUnlockPermissionValueWithDevId:(NSString *)devId
                           remotePermissionType:(TYRemotePermissionType)remotePermissionType
                                        success:(nullable TYSuccessID)success
                                        failure:(nullable TYFailureError)failure;

ThingRemotePermissionType 枚举类型:

类型 描述
ThingRemotePermissionType_NonePwd_Admin 免密-管理员
ThingRemotePermissionType_NonePwd_All 免密-所有人
ThingRemotePermissionType_Pwd_Admin 含密-管理员
ThingRemotePermissionType_Pwd_All 含密-所有人

示例代码

 [self.zigbeeDevice setRemoteUnlockPermissionValueWithDevId:self.devId remotePermissionType:TYRemotePermissionType_NonePwd_Admin success:^(id result) {
            NSLog(@"设置免密-管理员成功");
} failure:^(NSError *error) {
            NSLog(@"设置免密-管理员失败");
}];

查询音箱密码开启状态

接口说明

/// 查询音箱密码开启状态
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)fetchRemoteVoiceUnlockWithDevId:(NSString *)devId
                                success:(TYSuccessID)success
                                failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice fetchRemoteVoiceUnlockWithDevId:self.devId
                                             success:^(id result) {
        NSLog(@"音箱密码开启状态获取成功");
} failure:^(NSError *error) {
        NSLog(@"音箱密码开启状态获取失败");
}];

设置或取消音箱密码

接口说明

/// 设置或取消音箱密码
/// @param devId 设备 ID
/// @param open 设置或取消
/// @param pwd 密码
/// @param success 成功回调
/// @param failure 失败回调
- (void)setRemoteVoiceUnlockWithDevId:(NSString *)devId
                                 open:(BOOL)open
                                  pwd:(NSString *)pwd
                              success:(TYSuccessID)success
                              failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice setRemoteVoiceUnlockWithDevId:self.devId open:isOpen pwd:pwd success:^(id result) {
            NSLog(@"设置音箱密码成功");
} failure:^(NSError *error) {
            NSLog(@"设置音箱密码失败");
}];

其他功能

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

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

接口说明

/// 获取设备迄今为止的激活时间
/// @param devId 设备 ID
/// @param success 成功回调
/// @param failure 失败回调
- (void)getSecurityGuardDaysWithDevId:(NSString *)devId
                              success:(nullable TYSuccessID)success
                              failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getSecurityGuardDaysWithDevId:self.devId success:^(id result){
            NSLog(@"获取天数成功");
} failure:^(NSError *error) {
            NSLog(@"获取天数失败");
}];

获取设备云能力

获取设备的面板云能力。

接口说明

/// 获取设备云能力
/// @param productId 产品 ID
/// @param options 查询项(uiContent,cloudDp,powerCode)
/// @param success 成功回调
/// @param failure 失败回调
- (void)getLockDeviceConfigWithProductId:(NSString *)productId
                                 options:(NSString *)options
                                 success:(TYSuccessID)success
                                 failure:(nullable TYFailureError)failure;

示例代码

[self.zigbeeDevice getLockDeviceConfigWithProductId:self.zigbeeDevice.deviceModel.productId options:@"uiContent,cloudDp,powerCode" success:^(id result) {
            NSLog(@"获取配置成功");
} failure:^(NSError *error) {
            NSLog(@"获取配置失败");
}];

其他

错误码

业务错误码

错误码 说明
4000 产品定义错误
4001 用户名错误
4002 时间错误
4003 设备处理超时
4004 设备未连接

固件上报错误码

ThingUnlockOpErrorCode 枚举类型

错误码 说明
ThingUnlockOpErrorCodeTimeout 添加解锁方式-超时
ThingUnlockOpErrorCodeWriteError 添加解锁方式-写入失败
ThingUnlockOpErrorCodeRepeatWrite 添加解锁方式-重复写入
ThingUnlockOpErrorCodeFirmwareIdUnavailable 添加解锁方式-无可用硬件 ID
ThingUnlockOpErrorCodePasswordTypeError 添加解锁方式-密码类型错误,非数字
ThingUnlockOpErrorCodePasswordLengthError 添加解锁方式-密码长度错误
ThingUnlockOpErrorCodeUnspoortOpType 添加解锁方式-不支持添加的开锁方式
ThingUnlockOpErrorCodeFingerWriting 添加解锁方式-指纹录入中
ThingUnlockOpErrorCodeCardWriting 添加解锁方式-卡片录入中
ThingUnlockOpErrorCodeFaceWriting 添加解锁方式-人脸录入中
ThingUnlockOpErrorCodePasswordIsTooSimple 添加解锁方式-密码过于简单
ThingUnlockOpErrorCodeFirmwareIdError 添加解锁方式-错误的硬件 ID

开门记录对应 DP

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