更新时间:2024-08-22 02:25:31下载pdf
本文介绍设备定时业务,即设置智能设备定时触发执行既定的设置。例如,有一个自动窗帘设备,设置每天晚上 7 点钟关闭、早上 9 点钟打开,那么到达对应的时间点后,设备就会自动执行相关的操作。
ThingSmartBusinessExtensionKit
组件提供了比 ThingSmartTimer
更多的功能。如果您仍直接在使用 ThingSmartTimer
,请参考 此链接。
ThingTimerModel 类
属性 | 类型 | 说明 |
---|---|---|
timerId | NSString | 定时 ID。 |
date | NSString | 定时日期。 |
time | NSString | 定时时间,时分:12:30 。 |
status | BOOL | 定时状态。
|
loops | NSString | 循环次数,格式为 0000000 ,每一位数字的取值可以是 0 (关闭)和 1 (开启)。从左至右依次表示周日、周一、周二、周三、周四、周五、周六。例如,每周一循环该任务,则取值为 0100000 。0000000 表示只执行一次,1111111 表示每天执行。 |
dps | NSDictionary | 定时执行的 DP。格式为 {“dpid”:“dp 值”}。 |
timezoneId | NSString | 设备时区。 |
aliasName | NSString | 定时别名。 |
isAppPush | BOOL | 定时执行时是否发送 App 推送。
|
接口说明
查询定时列表。
- (void)getTimers:(ThingDeviceTimerGetParams *)params success:(void(^)(NSArray<ThingTimerModel *> *timers))success failure:(void(^)(NSError *error))failure;
参数说明
ThingDeviceTimerGetParams
属性 | 类型 | 说明 |
---|---|---|
bizType | ThingDeviceTimerBizType | 业务类型。
|
bizId | NSString | 业务类型为设备,则是设备 ID。业务类型为群组,则是群组 ID。 |
category | NSString | 分类,一般不传。 |
返回数据说明
数据 | 说明 |
---|---|
success | 成功回调。timers :定时信息,请参考 定时模型。 |
failure | 失败回调。 |
调用示例
func getTimerList(success: @escaping ([ThingTimerModel]) -> Void, failure: @escaping (Error) -> Void) {
let params = ThingDeviceTimerGetParams(bizType: isGroup ? .group : .device, bizId: bizId, category: "")
self.manager.getTimers(params, success: success, failure: failure)
}
接口说明
将定时列表数据同步给设备,仅蓝牙设备支持。
- (void)syncTimers:(NSArray<ThingTimerModel *> *)timers toDevice:(NSString *)deviceId success:(void(^)(void))success failure:(void(^)(NSError *error))failure;
在调接口之前,应该先通过 isDeviceCanSync:
接口判断是否支持同步。
- (BOOL)isDeviceCanSync:(NSString *)deviceId;
参数说明
属性 | 类型 | 说明 |
---|---|---|
timers | NSArray | 定时信息列表。请参考 定时模型。 |
success | - | 成功回调。 |
failure | - | 失败回调。 |
调用示例
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DeviceDetailListViewControllerReuseIdentifier")
self.setUpNavigationItem()
SVProgressHUD.show()
self.getTimerList { [weak self] list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
guard let self = self, self.isGroup == false && self.manager.isDeviceCanSync(bizId) else {
return
}
manager.syncTimers(list, toDevice: bizId) {
} failure: { e in
}
} failure: { e in
SVProgressHUD.dismiss()
}
}
接口说明
添加定时。
- (void)addTimer:(ThingDeviceTimerAddParams *)params success:(void(^)(NSString *timerId))success failure:(void(^)(NSError *error))failure;
参数说明
属性 | 类型 | 说明 |
---|---|---|
params | ThingDeviceTimerAddParams | 添加定时参数。请参考 ThingDeviceTimerAddParams。 |
success | - | 成功回调。 |
failure | - | 失败回调。 |
ThingDeviceTimerAddParams
属性 | 类型 | 说明 |
---|---|---|
bizType | ThingDeviceTimerBizType | 业务类型。
|
bizId | NSString | 业务类型为设备,则是设备 ID。业务类型为群组,则是群组 ID。 |
category | NSString | 分类,一般不传。 |
time | NSString | 定时时间,时分:12:30 。 |
status | BOOL | 定时状态。
|
loops | NSString | 循环次数,格式为 0000000 ,每一位数字的取值可以是 0 (关闭)和 1 (开启)。从左至右依次表示周日、周一、周二、周三、周四、周五、周六。例如,每周一循环该任务,则取值为 0100000 。0000000 表示只执行一次,1111111 表示每天执行。 |
dps | NSDictionary | 定时执行的 DP。格式为 {“dpid”:“dp 值”}。 |
aliasName | NSString | 定时别名。 |
isAppPush | BOOL | 定时执行时是否发送 App 推送。
|
调用示例
@objc func add() {
SVProgressHUD.show()
var dps: [AnyHashable: Any] = ["1": true]
let params = ThingDeviceTimerAddParams(bizType: isGroup ? .group : .device, bizId: bizId, category: "", loops: "0000000", time: "12:30", dps: dps, aliasName: "new timer", isAppPush: true, status: true)
self.manager.addTimer(params) { [weak self] timerId in
self?.getTimerList(success: { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
}, failure: { e in
SVProgressHUD.dismiss()
})
} failure: { e in
SVProgressHUD.dismiss()
}
}
接口说明
更新定时。
- (void)updateTimer:(ThingDeviceTimerUpdateParams *)params success:(void(^)(void))success failure:(void(^)(NSError *error))failure;
参数说明
属性 | 类型 | 说明 |
---|---|---|
params | ThingDeviceTimerUpdateParams | 更新定时参数,请参考 ThingDeviceTimerUpdateParams。 |
success | - | 成功回调。 |
failure | - | 失败回调。 |
ThingDeviceTimerUpdateParams
属性 | 类型 | 说明 |
---|---|---|
timerId | NSString | 定时 ID。 |
bizType | ThingDeviceTimerBizType | 业务类型。
|
bizId | NSString | 业务类型为设备,则是设备 ID。业务类型为群组,则是群组 ID。 |
time | NSString | 定时时间,时分:12:30 。 |
status | BOOL | 定时状态。
|
loops | NSString | 循环次数,格式为 0000000 ,每一位数字的取值可以是 0 (关闭)和 1 (开启)。从左至右依次表示周日、周一、周二、周三、周四、周五、周六。例如,每周一循环该任务,则取值为 0100000 。0000000 表示只执行一次,1111111 表示每天执行。 |
dps | NSDictionary | 定时执行的 DP。格式为 {“dpid”:“dp 值”}。 |
aliasName | NSString | 定时别名。 |
isAppPush | BOOL | 定时执行时是否发送 App 推送。
|
调用示例
let params = ThingDeviceTimerUpdateParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId, loops: timer.loops, time: timer.time, dps: timer.dps, aliasName: timer.aliasName, isAppPush: !timer.isAppPush, status: !timer.status)
SVProgressHUD.show()
self.manager.updateTimer(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
接口说明
更新定时状态。
- (void)updateTimerStatus:(ThingDeviceTimerStatusUpdateParams *)params success:(void(^)(void))success failure:(void(^)(NSError *error))failure;
参数说明
属性 | 类型 | 说明 |
---|---|---|
params | ThingDeviceTimerStatusUpdateParams | 更新定时状态参数,请参考 ThingDeviceTimerStatusUpdateParams。 |
success | - | 成功回调。 |
failure | - | 失败回调。 |
ThingDeviceTimerStatusUpdateParams
属性 | 类型 | 说明 |
---|---|---|
timerId | NSString | 定时 ID。 |
bizType | ThingDeviceTimerBizType | 业务类型。
|
bizId | NSString | 业务类型为设备,则是设备 ID。业务类型为群组,则是群组 ID。 |
time | NSString | 定时时间,时分:12:30 。 |
status | BOOL | 定时状态。
|
loops | NSString | 循环次数,格式为 0000000 ,每一位数字的取值可以是 0 (关闭)和 1 (开启)。从左至右依次表示周日、周一、周二、周三、周四、周五、周六。例如,每周一循环该任务,则取值为 0100000 。0000000 表示只执行一次,1111111 表示每天执行。 |
dps | NSDictionary | 定时执行的 DP。格式为 {“dpid”:“dp 值”}。 |
aliasName | NSString | 定时别名。 |
isAppPush | BOOL | 定时执行时是否发送 App 推送。
|
调用示例
let params = ThingDeviceTimerStatusUpdateParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId, loops: timer.loops, time: timer.time, dps: timer.dps, aliasName: timer.aliasName, isAppPush: timer.isAppPush, status: !timer.status)
SVProgressHUD.show()
self.manager.updateTimerStatus(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
接口说明
删除定时。
- (void)removeTimer:(ThingDeviceTimerRemoveParams *)params success:(void(^)(void))success failure:(void(^)(NSError *error))failure;
参数说明
属性 | 类型 | 说明 |
---|---|---|
params | ThingDeviceTimerRemoveParams | 删除定时参数,请参考 ThingDeviceTimerRemoveParams。 |
success | - | 成功回调。 |
failure | - | 失败回调。 |
ThingDeviceTimerRemoveParams
属性 | 类型 | 说明 |
---|---|---|
timerId | NSString | 定时 ID。 |
bizType | ThingDeviceTimerBizType | 业务类型。
|
bizId | NSString | 业务类型为设备,则是设备 ID。业务类型为群组,则是群组 ID。 |
调用示例
let params = ThingDeviceTimerRemoveParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId)
SVProgressHUD.show()
self.manager.removeTimer(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
import UIKit
import ThingDeviceDetailKit
import SVProgressHUD
import ThingSmartDeviceCoreKit
class DeviceDetailKitTimerVC: UITableViewController {
var bizId: String
var isGroup: Bool
var manager: ThingDeviceTimerManager
var items: [ThingTimerModel] = []
init(bizId: String, isGroup: Bool) {
self.bizId = bizId
self.isGroup = isGroup
self.manager = ThingDeviceTimerManager()
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setUpNavigationItem() {
let title = "add"
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: #selector(add))
}
@objc func add() {
SVProgressHUD.show()
var dps: [AnyHashable: Any] = ["1": true]
let params = ThingDeviceTimerAddParams(bizType: isGroup ? .group : .device, bizId: bizId, category: "", loops: "0000000", time: "12:30", dps: dps, aliasName: "new timer", isAppPush: true, status: true)
self.manager.addTimer(params) { [weak self] timerId in
self?.getTimerList(success: { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
}, failure: { e in
SVProgressHUD.dismiss()
})
} failure: { e in
SVProgressHUD.dismiss()
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DeviceDetailListViewControllerReuseIdentifier")
self.setUpNavigationItem()
SVProgressHUD.show()
self.getTimerList { [weak self] list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
guard let self = self, self.isGroup == false && self.manager.isDeviceCanSync(bizId) else {
return
}
manager.syncTimers(list, toDevice: bizId) {
} failure: { e in
}
} failure: { e in
SVProgressHUD.dismiss()
}
}
func getTimerList(success: @escaping ([ThingTimerModel]) -> Void, failure: @escaping (Error) -> Void) {
let params = ThingDeviceTimerGetParams(bizType: isGroup ? .group : .device, bizId: bizId, category: "")
self.manager.getTimers(params, success: success, failure: failure)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .value1, reuseIdentifier: "DeviceDetailListViewControllerReuseIdentifier")
cell.textLabel?.text = self.items[indexPath.row].time
cell.detailTextLabel?.text = self.items[indexPath.row].status ? "on" : "off"
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
self.handle(index: indexPath.row)
}
func handle(index: Int) {
if (index >= self.items.count) {return}
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
let timer = self.items[index]
alert.addAction(UIAlertAction(title: "delete", style: .default, handler: { action in
let params = ThingDeviceTimerRemoveParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId)
SVProgressHUD.show()
self.manager.removeTimer(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
}))
alert.addAction(UIAlertAction(title: "update", style: .default, handler: { action in
let params = ThingDeviceTimerUpdateParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId, loops: timer.loops, time: timer.time, dps: timer.dps, aliasName: timer.aliasName, isAppPush: !timer.isAppPush, status: !timer.status)
SVProgressHUD.show()
self.manager.updateTimer(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
}))
alert.addAction(UIAlertAction(title: "update status", style: .default, handler: { action in
let params = ThingDeviceTimerStatusUpdateParams(timerId: timer.timerId, bizType: self.isGroup ? .group : .device, bizId: self.bizId, loops: timer.loops, time: timer.time, dps: timer.dps, aliasName: timer.aliasName, isAppPush: timer.isAppPush, status: !timer.status)
SVProgressHUD.show()
self.manager.updateTimerStatus(params) { [weak self] in
self?.getTimerList { list in
self?.items = list
self?.tableView.reloadData()
SVProgressHUD.dismiss()
} failure: { e in
SVProgressHUD.dismiss()
}
} failure: { e in
SVProgressHUD.dismiss()
}
}))
alert.addAction(UIAlertAction(title: "cancel", style: .cancel))
self.present(alert, animated: true)
}
}
错误码 | 说明 |
---|---|
-10001 | 获取设备信息失败。 |
-10002 | 设备离线。 |
-10003 | 获取定时信息失败。 |
-10004 | 蓝牙数据传输超时。 |
-10005 | 蓝牙数据解析失败。 |
-10006 | 设备不支持同步。 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈