定时任务
注意:
1、timePoint的格式为
"yyyy-MM-dd HH:mm:ss"
,否则会失败。2、timeCycle需要在timePoint时间点的基础上,选择循环方式。
"once":单次循环
"hour":在每小时的
mm:ss
时间点循环执行"day":在每天的
HH:mm:ss
时间点循环执行"month":在每月的
dd HH:mm:ss
时间点循环执行"year":在每年的
MM-dd HH:mm:ss
时间点循环执行"week[0,1,2,3,4,5,6]":在每星期的
HH:mm:ss
时间点循环执行(如周一,周五重复,则表示为"week[1,5]")3、timeZone支持标准时区列表,标准时区列表请参考wiki。
设备定时任务
||SKIP||
获取设备定时管理器
使用默认时区
//设备的逻辑ID
long deviceId = 1L;
ACDeviceTimerMgr timerMgr = AC.deviceTimerMgr(deviceId);
使用自定义时区
//设备的逻辑ID
long deviceId = 1L;
//使用北京时区
ACDeviceTimerMgr timerMgr = AC.deviceTimerMgr(deviceId, TimeZone.getTimeZone("Etc/GTM-8"));
添加设备定时任务
ACDeviceTask task = new ACDeviceTask();
//设置任务时间周期
task.setTimeCycle("day");
//设置任务执行的时间点,由于时间周期为天,所以只有19点精确到小时以后为有效参数,日期设置无效,即在每天19点执行任务
task.setTimePoint("2000-01-01 19:00:00");
//设置任务名称
task.setName("control");
//设置任务描述,选填
task.setDescription("open Air Condition");
//具体下发给设备的消息指令,msgCode与二进制流
ACDeviceMsg msg = new ACDeviceMsg(68, new byte[]{1,0,0,0});
task.setDeviceMsg(msg);
timerMgr.addTask(task, new PayloadCallback<ACDeviceTask>() {
@Override
public void success(ACDeviceTask task) {
//成功添加定时任务,创建后默认为开启状态
}
@Override
public void error(ACException e) {
//网络错误或其他,根据e.getErrorCode()做不同的提示或处理,此处一般为参数类型错误,请仔细阅读注意事项
}
});
修改设备定时任务
接口为modifyTask,其他参数与定义与创建定时任务相同。
开启设备定时任务
//taskId可以通过接口addTask/listTasks返回值获取
timerMgr.openTask(taskId, new VoidCallback() {
@Override
public void success() {
//开启定时任务成功
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
关闭设备定时任务
timerMgr.closeTask(taskId, new VoidCallback() {
@Override
public void success() {
//关闭定时任务
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
删除设备定时任务
timerMgr.deleteTask(taskId, new VoidCallback() {
@Override
public void success() {
//删除定时任务
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
获取定时任务列表
timerMgr.listTasks(new PayloadCallback<List<ACDeviceTask>>(){
@Override
public void success(List<ACDeviceTask> tasks) {
for (ACDeviceTask task : tasks){
//通过logcat查看获取到的定时任务列表进行显示或下一步操作
LogUtil.d("TAG", task.toString());
//如获取taskId
long taskId = task.getTaskId();
}
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
设备定时任务组
与普通设备定时任务的区别是,将多个定时任务进行分组管理。 以下场景举例:用户设置每天早上9点上班,下午17点下班。那么我们希望在每天8:30自动关闭空调,下午16:30提前打开空调,实现代码如下:
||SKIP||
获取设备定时管理器
使用默认时区
//设备的逻辑ID
long deviceId = 1L;
ACDeviceTimerMgr timerMgr = AC.deviceTimerMgr(deviceId);
使用自定义时区
//设备的逻辑ID
long deviceId = 1L;
//使用北京时区
ACDeviceTimerMgr timerMgr = AC.deviceTimerMgr(deviceId, TimeZone.getTimeZone("Etc/GTM-8"));
创建设备任务组
List<ACDeviceTask> tasks = new ArrayList<>();
ACDeviceTask closeTask = new ACDeviceTask();
//任务名字
closeTask.setName("Close air condition");
//任务描述,选填
closeTask.setDescription("Go to work");
//设置任务时间周期为每周工作日
closeTask.setTimeCycle("week[1,2,3,4,5]");
//由于时间周期为周,所以只有早上9点精确到小时为有效参数,日期设置无效
closeTask.setTimePoint("2000-01-01 09:00:00");
//关闭空调的具体控制指令
ACDeviceMsg msg = new ACDeviceMsg(68, new byte[]{0, 0, 0, 0});
closeTask.setDeviceMsg(msg);
tasks.add(closeTask);
ACDeviceTask openTask = new ACDeviceTask();
openTask.setName("Open air condition");
openTask.setDescription("Go off work");
openTask.setTimeCycle("week[1,2,3,4,5]");
openTask.setTimePoint("2000-01-01 17:00:00");
ACDeviceMsg msg = new ACDeviceMsg(68, new byte[]{1, 0, 0, 0});
openTask.setDeviceMsg(msg);
tasks.add(openTask);
timerMgr.addTaskGroup(new ACDeviceGroup("working", tasks), new PayloadCallback<ACDeviceGroup>() {
@Override
public void success(ACDeviceGroup group) {
//获取任务组ID等信息
String groupId = group.getGroupId();
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
修改设备任务组
//groupId可通过接口addTaskGroup/listTaskGroups返回
timerMgr.modifyTaskGroup(new ACDeviceGroup(groupId, groupName, tasks), new VoidCallback() {
@Override
public void success() {
//修改设备任务组成功
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
关闭设备任务组
timerMgr.closeTaskGroup(groupId, new VoidCallback() {
@Override
public void success() {
//成功关闭任务组
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
打开设备任务组/删除设备任务组/获取单个任务组详情与该接口类似,分别调用接口
openTaskGroup
/deleteTaskGroup
/getTaskGroup
获取所有设备任务组
timerMgr.listTaskGroups(new PayloadCallback<List<ACDeviceGroup>>() {
@Override
public void success(List<ACDeviceGroup> groups) {
for(ACDeviceGroup group : groups){
//获取任务组ID
String groupId = group.getGroupId();
//获取任务组名字
String groupName = group.getGroupName();
//获取任务组详情
List<ACDeviceTask> tasks = group.getTasks();
}
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
用户定时任务
||SKIP||
获取用户定时管理器
使用默认时区
ACUserTimerMgr timerMgr = AC.userTimerMgr();
使用自定义时区
//使用北京时区
ACUserTimerMgr timerMgr = AC.userTimerMgr(TimeZone.getTimeZone("Etc/GTM-8"));
添加用户定时任务
ACUserTask task = new ACUserTask();
//设置任务时间周期
task.setTimeCycle("day");
//设置任务执行的时间点,由于时间周期为天,所以只有19点精确到小时以后为有效参数,日期设置无效,即在每天19点执行任务
task.setTimePoint("2000-01-01 19:00:00");
//设置任务名称
task.setName("control");
//设置任务描述,选填
task.setDescription("open Air Condition");
//具体发送到uds的消息指令,与sendToService参数类似,接口名及参数由UDS实际提供为主
ACMsg req = new ACMsg();
req.setName("openAirCondition");
req.put("deviceId", 1L);
//ACUserCommand参数分别为子域名,服务名,请求参数,默认发送到UDS最新版本号
ACUserCommand command = new ACUserCommand(subDomain, serviceName, req);
task.setUserCommand(command);
timerMgr.addTask(task, new PayloadCallback<ACUserTask>() {
@Override
public void success(ACUserTask task) {
//成功添加定时任务,创建后默认为开启状态
}
@Override
public void error(ACException e) {
//网络错误或其他,根据e.getErrorCode()做不同的提示或处理,此处一般为参数类型错误,请仔细阅读注意事项
}
});
修改用户定时任务
接口为modifyTask,其他参数与定义与创建定时任务相同。
开启用户定时任务
//taskId可以通过接口addTask/listTasks返回值获取
timerMgr.openTask(taskId, new VoidCallback() {
@Override
public void success() {
//开启定时任务成功
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
关闭用户定时任务
timerMgr.closeTask(taskId, new VoidCallback() {
@Override
public void success() {
//关闭定时任务
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
删除用户定时任务
timerMgr.deleteTask(taskId, new VoidCallback() {
@Override
public void success() {
//删除定时任务
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
获取定时任务列表
timerMgr.listTasks(new PayloadCallback<List<ACUserTask>>(){
@Override
public void success(List<ACUserTask> tasks) {
for (ACUserTask task : tasks){
//通过logcat查看获取到的定时任务列表进行显示或下一步操作
LogUtil.d("TAG", task.toString());
//如获取taskId
long taskId = task.getTaskId();
}
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
用户定时任务组
与普通定时定时任务的区别是,将多个定时任务进行分组管理。 以下场景举例:用户设置每天早上9点上班,下午17点下班。那么我们希望在每天8:30自动关闭空调,下午16:30提前打开空调,并且在操作完空调后把处理结果推送给用户;这时我们建议将操作空调及推送的功能通过UDS实现,APP通过定时调用UDS提供的接口实现这个需求,APP端实现代码如下:
||SKIP||
获取用户定时管理器
使用默认时区
ACUserTimerMgr timerMgr = AC.userTimerMgr();
使用自定义时区
//使用北京时区
ACUserTimerMgr timerMgr = AC.userTimerMgr(TimeZone.getTimeZone("Etc/GTM-8"));
创建用户任务组
List<ACUserTask> tasks = new ArrayList<>();
ACUserTask closeTask = new ACUserTask();
//任务名字
closeTask.setName("Close air condition");
//任务描述,选填
closeTask.setDescription("Go to work");
//设置任务时间周期为每周工作日
closeTask.setTimeCycle("week[1,2,3,4,5]");
//由于时间周期为周,所以只有早上9点精确到小时为有效参数,日期设置无效
closeTask.setTimePoint("2000-01-01 09:00:00");
//具体发送到uds的消息指令,与sendToService参数类似,接口名及参数由UDS实际提供为主
ACMsg req = new ACMsg();
req.setName("closeAirCondition");
req.put("deviceId", 1L);
//ACUserCommand参数分别为子域名,服务名,请求参数,默认发送到UDS最新版本号
ACUserCommand command = new ACUserCommand(subDomain, serviceName, req);
closeTask.setUserCommand(command);
tasks.add(closeTask);
ACUserTask openTask = new ACUserTask();
openTask.setName("Open air condition");
openTask.setDescription("Go off work");
openTask.setTimeCycle("week[1,2,3,4,5]");
openTask.setTimePoint("2000-01-01 17:00:00");
ACMsg req = new ACMsg();
req.setName("openAirCondition");
req.put("deviceId", 1L);
ACUserCommand command = new ACUserCommand(subDomain, serviceName, req);
openTask.setUserCommand(command);
tasks.add(openTask);
timerMgr.addTaskGroup(new ACUserGroup("working", tasks), new PayloadCallback<ACUserGroup>() {
@Override
public void success(ACUserGroup group) {
//获取任务组ID等信息
String groupId = group.getGroupId();
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
修改用户任务组
//groupId可通过接口addTaskGroup/listTaskGroups返回
timerMgr.modifyTaskGroup(new ACUserGroup(groupId, groupName, tasks), new VoidCallback() {
@Override
public void success() {
//修改设备任务组成功
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
关闭用户任务组
timerMgr.closeTaskGroup(groupId, new VoidCallback() {
@Override
public void success() {
//成功关闭任务组
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});
打开设备任务组/删除设备任务组/获取单个任务组详情与该接口类似,分别调用接口
openTaskGroup
/deleteTaskGroup
/getTaskGroup
获取所有用户任务组
timerMgr.listTaskGroups(new PayloadCallback<List<ACUserGroup>>() {
@Override
public void success(List<ACUserGroup> groups) {
for(ACUserGroup group : groups){
//获取任务组ID
String groupId = group.getGroupId();
//获取任务组名字
String groupName = group.getGroupName();
//获取任务组详情
List<ACUserTask> tasks = group.getTasks();
}
}
@Override
public void error(ACException e) {
//参数无误下一般为网络错误
}
});