文档

设备的自定义任务示例

更新时间:

物联网平台提供设备任务的配置和管理服务。设备的自定义任务需要您根据实际需求,自行定义任务规则和设备端的实现逻辑。本文提供示例代码,通过手动输入命令,模拟设备上报自定义任务状态,为您介绍自定义任务运行过程。

本文以华东2(上海)地域企业版实例下设备为例,模拟设备的自定义任务流程。

准备工作

您需先完成以下操作:

  1. 创建产品名称任务管理演示产品所属品类自定义品类的产品。配置参数时,其他参数使用默认设置。具体操作,请参见创建产品

  2. 为产品添加3个设备,分别命名为Device1Device2Device3。具体操作,请参见批量创建设备

    设备添加成功后,分别获取3个设备的设备证书信息(ProductKey、DeviceName和DeviceSecret)。

  3. 自定义JSON格式的任务规则文件。本文规则文件命名为任务执行规则.json,内容如下。

    {
        "fileName":"jobTest",
        "fileVersion":"1",
        "fileDescription":"任务管理演示使用"
    }

创建自定义任务

  1. 登录物联网平台控制台
  2. 实例概览页面,单击目标实例名称或ID。

  3. 在左侧导航栏,选择监控运维 > 任务管理

  4. 任务页面,单击创建任务

  5. 在创建任务向导页面,完成以下配置,单击下一步

    创建任务

    参数

    说明

    任务名称

    输入任务演示

    任务类型

    选择自定义任务

    目标设备,产品,或分组

    选择产品任务管理演示

    下发给设备的任务执行规则

    上传规则文件:任务执行规则.json

  6. 设置每分钟作业执行数量 (50-1000)为50,超时时间(分钟)为5。

  7. 单击完成,返回任务列表,单击该任务的查看,然后单击作业概览页签,查看任务状态。

    如下图所示,任务已完成初始化,开始调度。任务详情

运行自定义任务

示例代码使用的开发环境如下:

示例代码支持的命令参见下表。

重要

命令、字段和字段后的参数值之间,必须使用单个空格分隔,但参数值中不能包含空格。

命令

支持字段

使用说明

get

-h

get -h:获取get命令的帮助信息。

-t

get -t taskId:获取任务详情。

taskId有三种取值方式:

  • 任务下作业的ID:获取作业ID对应任务的详细信息。

  • $next:获取一个可执行任务的信息。

  • $list:获取可执行的任务列表,默认最多返回10个。

update

  • -t

  • -s

  • -p

  • -d

update -t taskId -s status -p progress -d detail:更新任务下作业的状态。

  • taskId:任务下作业的ID。

  • status:任务下作业的状态。

    可取值如下:

    • SUCCEEDED:成功

    • FAILED:失败

    • IN_PROGRESS:执行中

    • REJECTED:已拒绝

  • progress:任务下作业执行进度的百分数。

  • detail:设备上报的详细信息。内容为JSON格式,且不能包含空格。

说明

-d表示自定义任务的执行详情,为可选字段。您可在物联网平台控制台的设备管理 > 任务 > 任务详情页面查看。

-h

update -h:获取update命令的帮助信息。

有关自定义任务执行流程及其Topic说明,请参见设备任务概述

本文使用3个设备,分别模拟设备任务中可能出现的最终状态:已超时失败成功

  1. 访问并下载alibabacloud-iot-java-demo,解压文件。然后打开IntelliJ IDEA,导入Demo包中的示例工程lp

  2. src/main/java/com.aliyun.iotx.lp.demo/job目录下的CustomJobSample.java文件中,参照下表,设置设备信息。

    设备信息

    参数

    示例

    说明

    productKey

    a1f3***

    您添加设备后,保存的设备证书信息。本示例添加设备Device1的信息。

    您也可在控制台中设备Device1设备详情页面查看。

    deviceName

    Device1

    deviceSecret

    b5c96d***

    region

    cn-shanghai

    您的服务所在地域对应的Region ID。请在物联网平台控制台左上角,查看您服务所在的地域。Region ID的取值,请参见地域和可用区

    config.channelHost

    iot-******.mqtt.iothub.aliyuncs.com

    MQTT接入地址。具体说明,请参见查看实例终端节点

  3. 运行CustomJobSample程序文件。

    设备接入物联网平台,并订阅设备任务相关Topic。设备在线

  4. 输入以下命令,获取设备的任务列表信息。

    get -t $list

    获取消息
  5. 输入以下命令,获取指定的任务详情。

    get -t 1a9300c10d7b41248cb657ca7191048d任务详情

  6. 开始执行任务并上报进度。输入以下命令,设置进度为26%。

    update -t 1a9300c10d7b41248cb657ca7191048d -s IN_PROGRESS -p 26任务进度

    您可返回物联网平台控制台的任务详情 > 作业概览页签,查看任务状态和进度。状态更新

    说明

    如果更新任务状态时,status取值不合法,任务状态将更新失败。

    不再继续上报进度,超出任务设置的超时时间后,任务最终状态更新为已超时

    超时
  7. 参考步骤2,修改设备信息为设备Devie2的信息,然后按照步骤3~步骤5获取设备任务,最后输入以下命令,将任务状态更新为失败,并携带失败的提示信息。

    update -t d3858707af6548cabe4ec2d6878e8639 -s FAILED -p 10 -d {"errorCode":"500","message":"SystemException"}最终态失败

    返回物联网平台控制台的任务详情 > 作业概览页签,可查看到任务状态为失败失败

    单击执行详情,可查看具体的错误提示信息。

    执行详情
  8. 参考步骤2,修改设备信息为设备Devie3的信息,然后按照步骤3~步骤6获取并执行任务,最后输入以下命令,更新任务状态为成功

    update -t 3b888b9f892b4d3ead6e2e34f0ccd3c2 -s SUCCEEDED -p 100成功

    返回物联网平台控制台的任务详情 > 作业概览页签,可查看到任务状态为成功任务成功