设备定时业务实现

更新时间:2024-04-24 07:06:34下载pdf

业务能力介绍

设备定时业务能力包括:

  • 获取设备/群组定时列表
  • 添加设备/群组定时
  • 更新设备/群组定时
  • 删除设备/群组定时
  • 更新设备/群组定时状态

实现设备定时业务

前置准备

定时业务的所有接口统一通过 IThingTimerManager 的实现类来调用。以设备定时为例,完成下面的步骤来实现定时业务。群组定时与设备定时一样,唯一区别在于入参是 groupId

只有当有家庭且家庭下存在设备或群组,才能实现定时业务。

获取定时管理类。

  // 获取定时管理类
  IThingTimerManager timerManager = ThingDeviceDetailKit.getInstance().getDeviceTimerManager();

步骤 1:添加定时

当需要设备在某一个时间执行某个指令时,可以通过 addTimer() 接口为设备添加一个定时。

需要传入的参数如下:

参数 是否必传
deviceId
category
time
dps
loops
aliasName
isOpen
isAppPush
callback
    TimerManagerBuilder builder = new TimerManagerBuilder.Builder()
            .setDeviceId(deviceId)
            .setCategory("schedule")
            .setTime("12:12")
            .setDps({"1":false})
            .setLoops("0000000")
            .setAliasName("aliasName")
            .isOpen(true)
            .isAppPush(true)
            .setCallback(new IThingTimerCallBack() {
                @Override
                public void successful(@Nullable List<? extends AlarmTimerBean> list) {
                  // 添加成功之后,返回一个定时列表。列表里只有一个数据,就是当前添加成功的定时数据。
                  if (list!=null&&list.size()>0){
                    AlarmTimerBean alarmTimerBean = list.get(0);
                    // groupId 是设备的定时 ID
                    String groupId = alarmTimerBean.getGroupId();
                  }

                }

                @Override
                public void fail(int i, @NonNull String s) {

                }
            })
            .build();
    timerManager.addTimer(builder);

步骤 2:修改定时

当需要修改一个定时的信息时,可以通过 editTimer() 接口来完成。

修改定时需要传入的参数如下:

参数 是否必传
deviceid
timerId
time
loops
aliasName
isAppPush
callback
    TimerManagerBuilder builder = new TimerManagerBuilder.Builder()
            .setDeviceId(deviceId)
            .setTime("12:32")
            .setTimerId("xxxx")
            .setDps({"1":false})
            .setLoops("1000000")
            .setAliasName("aliasName")
            .isOpen(true)
            .isAppPush(false)
            .setCallback(new IThingTimerCallBack() {
                @Override
                public void successful(@Nullable List<? extends AlarmTimerBean> list) {
                  // 修改成功之后,返回一个定时列表。列表里只有一个数据,就是当前修改成功的定时数据。
                  if (list!=null&&list.size()>0){
                    AlarmTimerBean alarmTimerBean = list.get(0);
                    // groupId 是设备的定时 ID
                    String groupId = alarmTimerBean.getGroupId();
                  }

                }

                @Override
                public void fail(int i, @NonNull String s) {

                }
            })
            .build();
    timerManager.editTimer(builder);

步骤 3:更新定时状态

可以通过 updateTimerStatus() 接口,更新一个定时的状态。就像添加了一个闹钟,但并不希望它到时间执行一样。

更新定时状态需要传入的参数如下:

参数 是否必传
deviceid
timerId
isOpen
callback
    TimerManagerBuilder builder = new TimerManagerBuilder.Builder()
            .setDeviceId(deviceId)
            .setTimerId("xxxx")
            .setCallback(new IThingTimerCallBack() {
                @Override
                public void successful(@Nullable List<? extends AlarmTimerBean> list) {
                  // 更新定时状态成功之后,会触发 successful 回调,但返回的 list 数据为 null。
                }

                @Override
                public void fail(int i, @NonNull String s) {

                }
            })
            .build();
    timerManager.updateTimerStatus(builder);

步骤 4:删除定时

如果不再需要定时,那可以通过 deleteTimer() 接口来删除。

删除定时需要传入的参数如下:

参数 是否必传
deviceid
timerId
callback
    TimerManagerBuilder builder = new TimerManagerBuilder.Builder()
            .setDeviceId(deviceId)
            .setTimerId("xxxx")
            .setCallback(new IThingTimerCallBack() {
                @Override
                public void successful(@Nullable List<? extends AlarmTimerBean> list) {
                  // 删除定时成功之后,会触发 successful 回调,但返回的 list 数据为 null。
                }

                @Override
                public void fail(int i, @NonNull String s) {

                }
            })
            .build();
    timerManager.deleteTimer(builder);

步骤 5:查看定时列表

如果要查看设备的定时数据,可以通过 getTimerList() 查询该设备下所有定时信息。

查询设备定时列表需要传入的参数如下:

参数 是否必传
deviceid
callback
    TimerManagerBuilder builder = new TimerManagerBuilder.Builder()
            .setDeviceId(deviceId)
            .setCallback(new IThingTimerCallBack() {
                @Override
                public void successful(@Nullable List<? extends AlarmTimerBean> list) {
                  // 请求成功之后,返回设备的定时列表
                }

                @Override
                public void fail(int i, @NonNull String s) {

                }
            })
            .build();
    timerManager.getTimerList(builder);

Demo

上述的步骤是按照增改删查的思路一步步完成定时业务的。实际业务开发时,可灵活组合。更多信息,可以参考 业务拓展 SDK Demo 中的 定时业务模块