更新时间:2023-06-29 03:03:37下载pdf
介绍 | |
---|---|
劫持 | 门锁劫持是指将录入特定的密码(指纹、密码等),设置为劫持密码,当受到劫持使用该密码进行开锁时,被迫开门,门锁将防劫持特殊开门报警信息发送至家人手机或物业管理系统。 |
门锁成员 | 门锁成员分为家庭成员与非家庭成员。 家庭成员即为涂鸦全屋智能的家庭成员概念,门锁内可将对应的门锁密码编号与该账号关联起来; 非家庭成员即为门锁内的成员,跟随设备关联,可以创建并分配,门锁内可将对应的门锁密码编号与该成员关联起来。 |
dpCode | 设备功能点的标识符。设备中的每个功能点都有名称和编号,可参考门锁功能点列表 |
类名 | 说明 |
---|---|
ThingSmartLockDevice |
Wi-Fi 门锁设备操作类,继承自 ThingSmartDevice |
ThingSmartLockDeviceDelegate |
Wi-Fi 门锁设备协议代理,拓展自 ThingSmartDeviceDelegate |
门锁内可以分为家庭成员和非家庭成员,家庭成员为全屋智能中的概念,具体可以查阅家庭成员管理
以下介绍在门锁中的非家庭成员管理操作
接口说明
- (void)getLockMemberListWithSuccess:(nullable void(^)(NSArray<ThingSmartLockMemberModel *> *lockMemberModels))success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
success | 接口成功回调,返回结果为门锁内成员用户信息 |
failure | 接口失败回调 |
ThingSmartLockMemberModel
数据模型
字段 | 类型 | 描述 |
---|---|---|
userId | NSString | 成员 id |
userName | NSString | 用户昵称 |
avatarUrl | NSString | 头像地址 |
contact | NSString | 联系方式 |
unlockRelations | NSArray<ThingSmartLockRelationModel *> | 开锁对应编号关系 |
devId | NSString | 门锁设备 id |
ownerId | NSString | 所属家庭 id |
userType | NS_ENUM | 门锁成员类型,1: 家庭成员 2: 非家庭成员 |
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock getLockMemberListWithSuccess:^(id result) {
NSLog(@"result %@", result);
} failure:^(NSError *error) {
NSLog(@"error %@", error);
}];
Swift:
let lockDevice = ThingSmartLockDevice(deviceId: "your_lock_device_id")
lockDevice?.getLockMemberList(success: { (members) in
print("门锁成员列表 \(members)")
}, failure: { (error) in
if let e = error {
print("error \(e)")
}
})
使用 SDK 创建非家庭成员。以供后续开锁记录关联操作
接口说明
- (void)addLockNormalUserWithUserName:(NSString *)userName
avatarImage:(nullable UIImage *)avatarImage
unlockRelations:(nullable NSArray<ThingSmartLockRelationModel *> *)unlockRelations
success:(nullable ThingSuccessString)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
userName | 成员名称 |
avatarImage | 成员头像,不传则为默认头像 |
unlockRelations | 成员解锁方式与密码 sn 的关联关系 |
success | 接口成功回调,返回结果为创建的成员用户 id,string 类型 |
failure | 接口失败回调 |
ThingSmartLockRelationModel
数据模型
字段 | 类型 | 描述 |
---|---|---|
unlockType | TYLockUnlockType | 解锁方式 |
sn | NSInteger | 关联的密码编号, 范围 0 - 999 |
typedef NS_ENUM(NSUInteger, TYLockUnlockType) {
TYLockUnlockTypeFingerprint, // 指纹解锁
TYLockUnlockTypePassword, // 普通密码解锁
TYLockUnlockTypeTemporary, // 临时密码解锁
TYLockUnlockTypeDynamic, // 动态密码解锁
TYLockUnlockTypeCard, // 卡片解锁
TYLockUnlockTypeFace, // 人脸识别解锁
TYLockUnlockTypeKey, // 钥匙解锁
};
示例代码
Objc:
ThingSmartLockRelationModel *fingerModel = [[ThingSmartLockRelationModel alloc] init];
fingerModel.unlockType = TYLockUnlockTypeFingerprint; // 指纹解锁
fingerModel.sn = 123;
ThingSmartLockRelationModel *faceModel = [[ThingSmartLockRelationModel alloc] init];
faceModel.unlockType = TYLockUnlockTypeFace; // 人脸解锁
faceModel.sn = 23;
// ThingSmartLockDevice *lock
// 注意: 这里需要强引用持有
self.lock = [ThingSmartLockDevice 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 = ThingSmartLockRelationModel()
finger.unlockType = .fingerprint // 指纹解锁
finger.sn = 123
let face = ThingSmartLockRelationModel()
face.unlockType = .face // 人脸解锁
face.sn = 23
// 注意: 这里需要强引用持有
self.lockDevice = ThingSmartLockDevice(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)")
}
})
使用 SDK 更新门锁成员信息,包括用户名、头像、解锁密码对应关系等
接口说明
- (void)updateLockNormalUserWithUserId:(NSString *)userId
userName:(nullable NSString *)userName
avatarImage:(nullable UIImage *)avatarImage
unlockRelations:(nullable NSArray<ThingSmartLockRelationModel *> *)unlockRelations
success:(nullable ThingSuccessBOOL)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
userId | 成员用户 id,必填 |
userName | 成员用户名称,可选,不传则不修改 |
avatarImage | 成员用户头像,可选,不传则不修改 |
unlockRelations | 成员解锁方式与密码 sn 的关联关系,可选,不传则不修改 |
success | 接口成功回调,返回结果为创建的成员用户 id,string 类型 |
failure | 接口失败回调 |
示例代码
Objc:
ThingSmartLockRelationModel *fingerModel = [[ThingSmartLockRelationModel alloc] init];
fingerModel.unlockType = TYLockUnlockTypeFingerprint; // 指纹解锁
fingerModel.sn = 123;
ThingSmartLockRelationModel *faceModel = [[ThingSmartLockRelationModel alloc] init];
faceModel.unlockType = TYLockUnlockTypeFace; // 人脸解锁
faceModel.sn = 23;
// ThingSmartLockDevice *lock
// 注意: 这里需要强引用持有
self.lock = [ThingSmartLockDevice 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 = ThingSmartLockRelationModel()
finger.unlockType = .fingerprint // 指纹解锁
finger.sn = 123
let face = ThingSmartLockRelationModel()
face.unlockType = .face // 人脸解锁
face.sn = 23
// 注意: 这里需要强引用持有
self.lockDevice = ThingSmartLockDevice(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)")
}
})
使用 SDK 删除门锁成员信息,删除成员并不会删除已有的密码
接口说明
- (void)deleteLockUserWithUserId:(NSString *)userId
success:(nullable ThingSuccessBOOL)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
userId | 门锁成员用户 id |
success | 接口成功回调,返回结果为对应的删除结果,bool 类型 |
failure | 接口失败回调 |
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock deleteLockUserWithUserId:@"0000004zl1" success:^(BOOL result) {
NSLog(@"删除结果 %d", result);
} failure:^(NSError *error) {
NSLog(@"error %@", error);
}];
Swift:
let lockDevice = ThingSmartLockDevice(deviceId: "your_lock_device_id")
lockDevice?.deleteLockUser(withUserId: "0000004zl1", success: { (result) in
print("删除结果 \(result)")
}, failure: { (error) in
if let e = error {
print("error \(e)")
}
})
使用 SDK 创建临时密码并在门锁上进行输入后即可开锁
title: 临时密码开门
participant 门锁
participant 用户
participant app
participant 云端
note over 用户: 输入 7 位纯数字临时密码
app->云端: 创建临时密码
云端-->app: 返回创建结果
用户->门锁: 在门锁上输入密码,让设备触发更新密码列表
note over 门锁: 更新密码列表
用户->门锁: 输入密码
note over 门锁: 执行
使用 SDK 获取临时密码列表,可以查看临时密码的使用状态情况
接口说明
- (void)getLockTempPwdListWithSuccess:(nullable void (^)( NSArray<ThingSmartLockTempPwdModel *> *lockTempPwdModels))success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
success | 接口成功回调,返回结果为对应获取的临时密码数据列表 |
failure | 接口失败回调 |
ThingSmartLockTempPwdModel
数据模型
字段 | 类型 | 描述 |
---|---|---|
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, // 已过期
};
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock getLockTempPwdListWithSuccess:^(NSArray<ThingSmartLockTempPwdModel *> * _Nullable lockTempPwdModels) {
NSLog(@"result %@", lockTempPwdModels);
} failure:^(NSError *error) {
NSLog(@"error %@", error);
}];
Swift:
let lockDevice = ThingSmartLockDevice(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 ThingSuccessBOOL)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
password | 临时密码,纯数字,7 位 |
name | 密码标示名字,创建完成无法再知晓密码,请牢记该密码 |
effectiveDate | 密码生效时间 |
invalidDate | 密码失效时间 |
countryCode | 国家码,例如 86 |
phone | 手机号码,当创建成功时,会通知给该手机用户 |
success | 接口成功回调,返回结果为对应的创建结果,bool 类型 |
failure | 接口失败回调 |
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice 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 = ThingSmartLockDevice(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)")
}
})
使用 SDK 删除临时密码,删除后需要门锁设备进行更新
接口说明
- (void)deleteLockTempPwdWithPwdId:(NSInteger)tempPwdId
force:(BOOL)force
success:(nullable ThingSuccessBOOL)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
tempPwdId | 门锁临时密码唯一 id |
force | 是否强制删除 yes: 不需要等门锁同步,密码列表里面就不再返回; no: 等门锁确认后,才是真的已删除,列表还会返回 |
success | 接口成功回调,返回结果为对应的删除结果,bool 类型 |
failure | 接口失败回调 |
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice 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 = ThingSmartLockDevice(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)")
}
})
使用 SDK 获取动态密码并在门锁上进行输入后即可开锁,动态密码有效时间为 5 分钟
title: 动态密码开门
participant 门锁
participant 用户
participant app
participant 云端
app->云端: 请求获取动态密码
云端-->app: 返回动态密码结果
app-->用户: 传达密码
note over 用户: 得到动态密码
用户->门锁: 输入动态密码
note over 门锁: 执行
接口说明
- (void)getLockDynamicPasswordWithSuccess:(nullable ThingSuccessString)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
success | 接口成功回调,返回结果为对应获取的动态密码 |
failure | 接口失败回调 |
示例代码
Objc:
ThingSmartLockDevice *lock = [ThingSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
[lock getLockDynamicPasswordWithSuccess:^(NSString *result) {
NSLog(@"动态密码获取结果 %@", result);
} failure:^(NSError *error) {
NSLog(@"error %@", error);
}];
Swift:
let lockDevice = ThingSmartLockDevice(deviceId: "your_lock_device_id")
lockDevice?.getLockDynamicPassword(success: { (pwd) in
print("动态密码获取结果 \(pwd)")
}, failure: { (error) in
if let e = error {
print("error \(e)")
}
})
在门锁上触发远程开门请求后,使用 SDK 可以进行远程开门
Title: 门锁远程开门流程
participant 用户
participant 门锁
participant app
用户->门锁: 操作门锁(4+#)
门锁->app: 发起远程开门请求
note over app: 收到门锁请求,通知门锁拥有者决定确认是否开门
app-->门锁: 发送开门结果
note over 门锁: 处理结果
接口说明
- (void)replyRemoteUnlock:(BOOL)open
success:(nullable ThingSuccessHandler)success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
open | 是否允许开门,yes: 允许开门,no: 不允许开门 |
success | 接口成功回调 |
failure | 接口失败回调 |
ThingSmartLockDeviceDelegate
回调说明
设置 ThingSmartLockDevice
的 delegate
之后,当用户操作门锁进行远程开锁时,SDK 会触发以下回调方法
/// 设备收到远程开锁请求,需要在一定时间内处理该请求
///
/// @param device 门锁设备
/// @param seconds 剩余处理时间
- (void)device:(ThingSmartLockDevice *)device didReceiveRemoteUnlockRequest:(NSInteger)seconds;
示例代码
Objc:
// 用户操作门锁 4+#
// ThingSmartLockDevice *lock;
self.lock = [ThingSmartLockDevice deviceWithDeviceId:@"your_lock_device_id"];
self.lock.delegate = self;
// 实现代理方法
- (void)device:(ThingSmartLockDevice *)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: ThingSmartLockDevice
self.lock = ThingSmartLockDevice(deviceId: "your_lock_device_id")
self.lock.delegate = self;
// 实现代理方法
func device(_ device: ThingSmartLockDevice, 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)")
}
}
}
}
使用 SDK 获取门锁记录,包括开锁记录、门铃记录、报警记录等
接口说明
- (void)getLockRecordListWithDpCodes:(NSArray<NSString *> *)dpCodes
offset:(NSInteger)offset
limit:(NSInteger)limit
success:(nullable void(^)(NSArray<ThingSmartLockRecordModel *> *lockRecordModels))success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
dpCodes | 需要查询的记录的 dp code,具体可以参考对应设备的门锁产品功能定义 |
offset | 页数 |
limit | 条数 |
success | 接口成功回调,返回结果为对应的记录数据列表 |
failure | 接口失败回调 |
ThingSmartLockRecordModel
数据模型
字段 | 类型 | 描述 |
---|---|---|
userId | NSString | 成员 id |
userName | NSString | 用户昵称 |
time | NSTimeInterval | 发生时间, 13 位时间戳 |
devId | NSString | 设备 id |
dpData | NSDictionary | dp 数据 |
tags | NSInteger | 标位,0表示其他,1表示劫持报警 |
dpsArray | NSArray<NSDictionary *> | dps 数据组 |
使用 SDK 获取门锁的开门记录,包括指纹解锁、普通密码解锁、临时密码解锁、动态密码解锁、卡片解锁、人脸识别解锁、钥匙解锁记录
接口说明
- (void)getUnlockRecordList:(NSInteger)offset
limit:(NSInteger)limit
success:(nullable void(^)(NSArray<ThingSmartLockRecordModel *> *lockRecordModels))success
failure:(nullable ThingFailureError)failure
参数说明
参数 | 说明 |
---|---|
offset | 页数 |
limit | 条数 |
success | 接口成功回调,返回结果为对应的记录数据列表 |
failure | 接口失败回调 |
使用 SDK 获取门锁劫持开门记录,可根据传入的解锁功能定义点进行查询
接口说明
- (void)getLockHijackRecordListWithDpCodes:(NSArray<NSString *> *)dpCodes
offset:(NSInteger)offset
limit:(NSInteger)limit
success:(void(^)(NSArray<ThingSmartLockRecordModel *> *))success
failure:(nullable ThingFailureError)failure;
参数说明
参数 | 说明 |
---|---|
dpCodes | 需要查询劫持的记录的解锁方式 dp codes,具体可以参考对应设备的门锁产品功能定义 |
offset | 页数 |
limit | 条数 |
success | 接口成功回调,返回结果为对应的记录数据列表 |
failure | 接口失败回调 |
dp name | dp code |
---|---|
指纹解锁 | 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远程解锁wifi门锁 | 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 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈