Wi-Fi 门锁

更新时间:2023-06-12 07:51:08下载pdf

功能简介

类名 说明
TuyaSmartLockDevice Wi-Fi 门锁设备操作类,继承自 TuyaSmartDevice
TuyaSmartLockDeviceDelegate Wi-Fi 门锁设备协议代理,拓展自 TuyaSmartDeviceDelegate

名词解释

名词列表 说明
门锁劫持 指将特定的指纹、密码等,设置为劫持密码,当用户被劫持,并使用该密码开锁时,门会打开。同时,门锁将开门报警信息发送至家人手机或物业管理系统。
门锁成员 门锁成员分为 家庭成员非家庭成员
  • 家庭成员:涂鸦智能生活 App SDK 中的家庭成员概念。门锁 SDK 将对应的门锁密码编号与该账号关联起来。相关管理操作,请参考 家庭管理
  • 非家庭成员:即为门锁设备单独的成员,仅跟随设备关联。用户可以创建并分配,门锁 SDK 将对应的门锁密码编号与该成员关联起来。
dpCode 设备功能的标识符。每个设备功能都有名称和编号,请参考下文 门锁功能列表

门锁成员

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

获取门锁成员

接口说明

- (void)getLockMemberListWithSuccess:(nullable void(^)(NSArray<TuyaSmartLockMemberModel *> *lockMemberModels))success
                             failure:(nullable TYFailureError)failure;

参数说明

参数 说明
success 接口成功回调,返回结果为门锁内成员用户信息
failure 接口失败回调

TuyaSmartLockMemberModel 数据模型

字段 类型 描述
userId NSString 成员 ID
userName NSString 用户昵称
avatarUrl NSString 头像地址
contact NSString 联系方式
unlockRelations NSArray<TuyaSmartLockRelationModel *> 开锁对应编号关系
devId NSString 门锁设备 ID
ownerId NSString 所属家庭 ID
userType NS_ENUM 门锁成员类型
  • 1:家庭成员
  • 2:非家庭成员

示例代码

Objective-C:

TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock getLockMemberListWithSuccess:^(id result) {
	NSLog(@"result %@", result);
} failure:^(NSError *error) {
	NSLog(@"error %@", error);
}];

Swift:

let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
lockDevice?.getLockMemberList(success: { (members) in
	print("门锁成员列表 \(members)")
}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
})

创建门锁成员

创建非家庭成员,以供后续开锁记录关联操作。

接口说明

- (void)addLockNormalUserWithUserName:(NSString *)userName
                          avatarImage:(nullable UIImage *)avatarImage
                      unlockRelations:(nullable NSArray<TuyaSmartLockRelationModel *> *)unlockRelations
                              success:(nullable TYSuccessString)success
                              failure:(nullable TYFailureError)failure;

参数说明

参数 说明
userName 成员名称
avatarImage 成员头像,不传则为默认头像
unlockRelations 成员解锁方式与密码 SN 的关联关系
success 接口成功回调,返回结果为创建的成员用户 ID,为字符串类型
failure 接口失败回调

TuyaSmartLockRelationModel 数据模型

字段 类型 描述
unlockType TYLockUnlockType 解锁方式
sn NSInteger 关联的密码编号,范围为 0~999
typedef NS_ENUM(NSUInteger, TYLockUnlockType) {
    TYLockUnlockTypeFingerprint, // 指纹解锁
    TYLockUnlockTypePassword,    // 普通密码解锁
    TYLockUnlockTypeTemporary,   // 临时密码解锁
    TYLockUnlockTypeDynamic,     // 动态密码解锁
    TYLockUnlockTypeCard,        // 卡片解锁
    TYLockUnlockTypeFace,        // 人脸识别解锁
    TYLockUnlockTypeKey,         // 钥匙解锁
};

示例代码

Objective-C:

TuyaSmartLockRelationModel *fingerModel = [[TuyaSmartLockRelationModel alloc] init];
fingerModel.unlockType = TYLockUnlockTypeFingerprint; // 指纹解锁
fingerModel.sn = 123;

TuyaSmartLockRelationModel *faceModel = [[TuyaSmartLockRelationModel alloc] init];
faceModel.unlockType = TYLockUnlockTypeFace; // 人脸解锁
faceModel.sn = 23;

// TuyaSmartLockDevice *lock
// 注意: 这里需要强引用持有
self.lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
	[self.lock addLockNormalUserWithUserName:@"user name"
								avatarImage:[UIImage imageNamed:@"xxx.png"]
								unlockIds:@[fingerModel, faceModel]
									success:^(NSString *userId) {
	NSLog(@"result %@", userId);
} failure:^(NSError *error) {
	NSLog(@"error %@", error);
}];

Swift:

let finger = TuyaSmartLockRelationModel()
finger.unlockType = .fingerprint // 指纹解锁
finger.sn = 123

let face = TuyaSmartLockRelationModel()
face.unlockType = .face // 人脸解锁
face.sn = 23
// 注意: 这里需要强引用持有
self.lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
self.lockDevice?.addLockNormalUser(withUserName: "user name", avatarImage: UIImage(named: "xxx.png"), unlockIds: [finger, face], success: { (userId) in
	print("添加用户成功 \(userId)")
}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
})

更新成员信息

更新门锁成员信息,包括用户名、头像、解锁密码对应关系等。

接口说明

- (void)updateLockNormalUserWithUserId:(NSString *)userId
                              userName:(nullable NSString *)userName
                           avatarImage:(nullable UIImage *)avatarImage
                       unlockRelations:(nullable NSArray<TuyaSmartLockRelationModel *> *)unlockRelations
                               success:(nullable TYSuccessBOOL)success
                               failure:(nullable TYFailureError)failure;

参数说明

参数 说明
userId 成员用户 ID,必填
userName 成员用户名称,可选,不传则不修改
avatarImage 成员用户头像,可选,不传则不修改
unlockRelations 成员解锁方式与密码 SN 的关联关系,可选,不传则不修改
success 接口成功回调,返回结果为创建的成员用户 ID,为字符串类型
failure 接口失败回调

示例代码

Objective-C:

TuyaSmartLockRelationModel *fingerModel = [[TuyaSmartLockRelationModel alloc] init];
fingerModel.unlockType = TYLockUnlockTypeFingerprint; // 指纹解锁
fingerModel.sn = 123;

TuyaSmartLockRelationModel *faceModel = [[TuyaSmartLockRelationModel alloc] init];
faceModel.unlockType = TYLockUnlockTypeFace; // 人脸解锁
faceModel.sn = 23;

// TuyaSmartLockDevice *lock
// 注意: 这里需要强引用持有
self.lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[self.lock updateLockNormalUserWithUserId:@"user id" userName:@"" avatarImage:nil unlockRelations:@[fingerModel,faceModel] success:^(BOOL result) {
	NSLog(@"result %d", result);
} failure:^(NSError *error) {
	NSLog(@"error %@", error);
}];

Swift:

let finger = TuyaSmartLockRelationModel()
finger.unlockType = .fingerprint // 指纹解锁
finger.sn = 123

let face = TuyaSmartLockRelationModel()
face.unlockType = .face // 人脸解锁
face.sn = 23
// 注意: 这里需要强引用持有
self.lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
	self.lockDevice?.updateLockNormalUser(withUserId: "user id", userName: "new user name", avatarImage: nil, unlockRelations: [finger, face], success: { (result) in
		print("更新结果 \(result)")
	}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
	})

删除门锁成员

删除门锁成员信息。删除成员后,并不会删除已有的密码。

接口说明

- (void)deleteLockUserWithUserId:(NSString *)userId
                         success:(nullable TYSuccessBOOL)success
                         failure:(nullable TYFailureError)failure;

参数说明

参数 说明
userId 门锁成员用户 ID
success 接口成功回调,返回结果为对应的删除结果,为布尔类型
failure 接口失败回调

示例代码

Objective-C:

TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock deleteLockUserWithUserId:@"0000004zl1" success:^(BOOL result) {
		NSLog(@"删除结果 %d", result);
} failure:^(NSError *error) {
		NSLog(@"error %@", error);
}];

Swift:

let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
lockDevice?.deleteLockUser(withUserId: "0000004zl1", success: { (result) in
	print("删除结果 \(result)")
}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
})

临时密码

创建临时密码,并在门锁上进行输入后即可开锁。

Wi-Fi 门锁

获取临时密码

获取临时密码列表的同时,可以查看临时密码的使用状态情况。

接口说明

- (void)getLockTempPwdListWithSuccess:(nullable void (^)( NSArray<TuyaSmartLockTempPwdModel *> *lockTempPwdModels))success
                              failure:(nullable TYFailureError)failure;

参数说明

参数 说明
success 接口成功回调,返回结果为对应获取的临时密码数据列表
failure 接口失败回调

TuyaSmartLockTempPwdModel 数据模型

字段 类型 描述
phone NSString 手机号
name NSString 临时密码名称
invalidTime NSTimeInterval 失效时间戳,10 位
effectiveTime NSTimeInterval 生效时间戳,10 位
createTime NSTimeInterval 创建时间戳,13 位
code NSInteger 密码唯一 ID
sn NSInteger 密码编号,关联账号使用
phase TYLockTempPwdStatusType 密码状态
effective TYLockTempPwdEffectiveType 密码有效性状态
// 密码状态
typedef NS_ENUM(NSUInteger, TYLockTempPwdStatusType) {
    TYLockTempPwdStatusTypeRemoved     = 0, // 已删除
    TYLockTempPwdStatusTypeToBeDeleted = 3, // 待删除

    TYLockTempPwdStatusTypeToBePubilsh = 1, // 待下发
    TYLockTempPwdStatusTypePublished   = 2, // 已下发
};

// 密码有效性状态
typedef NS_ENUM(NSUInteger, TYLockTempPwdEffectiveType) {
    TYLockMemberStatusTypeInvalid     = 1, // 失效
    TYLockMemberStatusTypeToBePubilsh = 2, // 待下发
    TYLockMemberStatusTypeWorking     = 3, // 使用中
    TYLockMemberStatusTypeToBeDeleted = 4, // 待删除
    TYLockTempPwdEffectiveTypeExpired = 5, // 已过期
};

示例代码

Objective-C:

TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock getLockTempPwdListWithSuccess:^(NSArray<TuyaSmartLockTempPwdModel *> * _Nullable lockTempPwdModels) {
	NSLog(@"result %@", lockTempPwdModels);
} failure:^(NSError *error) {
	NSLog(@"error %@", error);
}];

Swift:

let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
	lockDevice?.getLockTempPwdList(success: { (lockTempPwdModels) in
	print("获取临时密码列表结果 \(lockTempPwdModels)")
}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
})

创建临时密码

临时密码可以自定义密码的有效期间。当创建临时密码后,需要在门锁设备上进行同步。

接口说明

- (void)createLockTempPwd:(NSString *)password
                     name:(NSString *)name
            effectiveDate:(NSDate *)effectiveDate
              invalidDate:(NSDate *)invalidDate
              countryCode:(NSString *)countryCode
                    phone:(NSString *)phone
                  success:(nullable TYSuccessBOOL)success
                  failure:(nullable TYFailureError)failure;

参数说明

参数 说明
password 7 位纯数字的临时密码
name 密码标示名字,创建完成无法再知晓密码,请牢记该密码
effectiveDate 密码生效时间
invalidDate 密码失效时间
countryCode 国家或地区的编码,例如 86 表示中国大陆地区
phone 手机号码,当创建成功时,会通知给该手机用户
success 接口成功回调,返回结果为对应的创建结果,为布尔类型
failure 接口失败回调

示例代码

Objective-C:

TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
// 创建 20 分钟时效的密码
	NSDate *invalidDate = [NSDate dateWithTimeInterval:60 * 20 sinceDate:[NSDate date]];
[lock createLockTempPwd:@"1472589"
					name:@"1472589hkk"
			effectiveDate:[NSDate date]
			invalidDate:invalidDate
			countryCode:@"86"
					phone:@"13912345678"
				success:^(BOOL result) {
	NSLog(@"创建结果 %d", result);
} failure:^(NSError *error) {
	NSLog(@"error %@", error);
}];

Swift:

let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
	lockDevice?.createLockTempPwd("1472589", name: "1472589hkk", effectiveDate: Date(), invalidDate: Date(timeIntervalSince1970: 60 * 20), countryCode: "86", phone: "13912345678", success: { (result) in
	print("创建结果 \(result)")
}, failure: { (error) in
	if let e = error {
		print("error \(e)")
	}
})

删除临时密码

删除临时密码后,需要门锁设备进行更新。

接口说明

- (void)deleteLockTempPwdWithPwdId:(NSInteger)tempPwdId
                             force:(BOOL)force
                           success:(nullable TYSuccessBOOL)success
                           failure:(nullable TYFailureError)failure;

参数说明

参数 说明
tempPwdId 门锁临时密码唯一 ID
force 是否强制删除:
  • yes:不需要等门锁同步,密码列表里面就不再返回
  • no:等门锁确认后,才是真的已删除,列表还会返回
    success 接口成功回调,返回结果为对应的删除结果,为布尔类型
    failure 接口失败回调

    示例代码

    Objective-C:

    TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
    [lock deleteLockTempPwdWithPwdId:1274067 force:YES success:^(BOOL result) {
    	NSLog(@"删除结果 %d", result);
    } failure:^(NSError *error) {
    	NSLog(@"error %@", error);
    }];
    

    Swift:

    let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
    lockDevice?.deleteLockTempPwd(withPwdId: 1274067, force: true, success: { (result) in
    	print("删除结果 \(result)")
    }, failure: { (error) in
    	if let e = error {
    		print("error \(e)")
    	}
    })
    

    动态密码

    Wi-Fi 门锁

    接口说明

    获取动态密码。在门锁上输入动态密码后即可开锁,动态密码有效时间为 5 分钟。

    - (void)getLockDynamicPasswordWithSuccess:(nullable TYSuccessString)success
                                      failure:(nullable TYFailureError)failure;
    

    参数说明

    参数 说明
    success 接口成功回调,返回结果为对应获取的动态密码
    failure 接口失败回调

    示例代码

    Objective-C:

    TuyaSmartLockDevice *lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
    [lock getLockDynamicPasswordWithSuccess:^(NSString *result) {
    	NSLog(@"动态密码获取结果 %@", result);
    } failure:^(NSError *error) {
    	NSLog(@"error %@", error);
    }];
    

    Swift:

    let lockDevice = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
    lockDevice?.getLockDynamicPassword(success: { (pwd) in
    	print("动态密码获取结果 \(pwd)")
    }, failure: { (error) in
    	if let e = error {
    		print("error \(e)")
    	}
    })
    

    远程开门

    在门锁上触发远程开门请求后,使用 SDK 可以进行远程开门。

    Wi-Fi 门锁

    接口说明

    - (void)replyRemoteUnlock:(BOOL)open
                      success:(nullable TYSuccessHandler)success
                      failure:(nullable TYFailureError)failure;
    

    参数说明

    参数 说明
    open 是否允许开门
    • yes:允许开门
    • no:不允许开门
    success 接口成功回调
    failure 接口失败回调

    TuyaSmartLockDeviceDelegate 回调说明

    设置 TuyaSmartLockDevicedelegate 之后,当用户操作门锁进行远程开锁时,SDK 会触发回调。

    /// 设备收到远程开锁请求,需要在一定时间内处理该请求
    ///
    /// @param device 门锁设备
    /// @param seconds 剩余处理时间
    - (void)device:(TuyaSmartLockDevice *)device didReceiveRemoteUnlockRequest:(NSInteger)seconds;
    

    示例代码

    Objective-C:

    // 用户操作门锁 4+#
    	// TuyaSmartLockDevice *lock;
    self.lock = [TuyaSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
    self.lock.delegate = self;
    
    // 实现代理方法
    - (void)device:(TuyaSmartLockDevice *)device didReceiveRemoteUnlockRequest:(NSInteger)seconds {
    	NSLog(@"收到远程开门指令, 需在 %d 秒内处理", seconds);
    
    	// second = 0,说明已经处理过
    	// 所以这里要区分情况
    	if (seconds > 0) {
    		BOOL open = YES; // 是否允许开门
    		// 执行远程开门结果
    		[device replyRemoteUnlock:open success:^{
    			NSLog(@"success");
    		} failure:^(NSError *error) {
    			NSLog(@"error %@", error);
    		}];
    	}
    }
    

    Swift:

    // 用户操作门锁 4+#
    	// var lock: TuyaSmartLockDevice
    self.lock = TuyaSmartLockDevice(deviceId: "your_lock_device_id")
    self.lock.delegate = self;
    
    // 实现代理方法
    func device(_ device: TuyaSmartLockDevice, didReceiveRemoteUnlockRequest seconds: Int) {
    	print("收到远程开门指令, 需在 \(seconds) 秒内处理";
    	if seconds > 0 {
    		let open = true; // 是否允许开门
    		// 执行远程开门结果
    		device.replyRemoteUnlock(open, success: {
    			print("success")
    		}) { (error) in
    			if let e = error {
    				print("error: \(e)")
    			}
    		}
    	}
    }
    

    门锁记录

    门锁记录包括开锁记录、门铃记录、报警记录等。

    获取门锁记录

    接口说明

    - (void)getLockRecordListWithDpCodes:(NSArray<NSString *> *)dpCodes
                                  offset:(NSInteger)offset
                                   limit:(NSInteger)limit
                                 success:(nullable void(^)(NSArray<TuyaSmartLockRecordModel *> *lockRecordModels))success
                                 failure:(nullable TYFailureError)failure;
    

    参数说明

    参数 说明
    dpCodes 需要查询的记录的设备功能,具体可以参考对应设备的 门锁功能列表
    offset 查询的页数
    limit 查询的条数
    success 接口成功回调,返回结果为对应的记录数据列表
    failure 接口失败回调

    TuyaSmartLockRecordModel 数据模型

    字段 类型 描述
    userId NSString 成员 ID
    devId NSString 设备 ID
    userName NSString 用户昵称
    time NSTimeInterval 发生时间,为 13 位时间戳
    dpData NSDictionary DP 数据
    tags NSInteger 门锁记录标位:
    • 0:其他
    • 1:劫持报警
    dpsArray NSArray<NSDictionary *> 门锁 DP 的数据组

    获取门锁开锁记录

    门锁的开门记录包括指纹解锁、普通密码解锁、临时密码解锁、动态密码解锁、卡片解锁、人脸识别解锁、钥匙解锁记录等。

    接口说明

    - (void)getUnlockRecordList:(NSInteger)offset
                          limit:(NSInteger)limit
                        success:(nullable void(^)(NSArray<TuyaSmartLockRecordModel *> *lockRecordModels))success
                        failure:(nullable TYFailureError)failure
    

    参数说明

    参数 说明
    offset 查询的页数
    limit 查询的条数
    success 接口成功回调,返回结果为对应的记录数据列表
    failure 接口失败回调

    获取门锁劫持记录

    可根据传入的解锁功能定义点进行查询门锁劫持开门记录。

    接口说明

    - (void)getLockHijackRecordListWithDpCodes:(NSArray<NSString *> *)dpCodes
                                        offset:(NSInteger)offset
                                         limit:(NSInteger)limit
                                       success:(void(^)(NSArray<TuyaSmartLockRecordModel *> *))success
                                       failure:(nullable TYFailureError)failure;
    

    参数说明

    参数 说明
    dpCodes 需要查询劫持的记录的解锁方式的设备功能,具体可以参考对应设备的 门锁功能列表
    offset 查询的页数
    limit 查询的条数
    success 接口成功回调,返回结果为对应的记录数据列表
    failure 接口失败回调

    门锁功能列表

    功能名称 功能标识符(dpCode)
    指纹解锁 unlock_fingerprint
    普通密码解锁 unlock_password
    临时密码解锁 unlock_temporary
    动态密码解锁 unlock_dynamic
    卡片解锁 unlock_card
    人脸识别解锁 unlock_face
    钥匙解锁 unlock_key
    告警 alarm_lock
    远程开门请求倒计时 unlock_request
    远程开门请求回复 reply_unlock_request
    电池电量状态 battery_state
    剩余电量 residual_electricity
    反锁状态 reverse_lock
    童锁状态 child_lock
    App 远程解锁 Wi-Fi 门锁 unlock_app
    劫持告警 hijack
    从门内侧打开门锁 open_inside
    开合状态 closed_opened
    门铃呼叫 doorbell
    短信通知 message
    上提反锁 anti_lock_outside
    虹膜解锁 unlock_eye
    掌纹解锁 unlock_hand
    指静脉解锁 unlock_finger_vein
    同步所有指纹编号 update_all_finger
    同步所有密码编号 update_all_password
    同步所有卡编号 update_all_card
    同步所有人脸编号 update_all_face
    同步所有虹膜编号 update_all_eye
    同步所有掌纹编号 update_all_hand
    同步所有指静脉编号 update_all_fin_vein
    离线密码解锁上报 unlock_offline_pd
    离线密码清空上报 unlock_offline_clear
    单条离线密码清空上报 unlock_offline_clear_single