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

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

准备工作

您需先完成以下操作:

  1. 创建产品名称任务管理演示产品所属品类自定义品类的产品。配置参数时,其他参数使用默认设置。具体操作,请参见创建产品
  2. 为产品添加3个设备,分别命名为Device1Device2Device3。具体操作,请参见批量创建设备
    设备添加成功后,分别获取3个设备的设备证书信息(ProductKey、DeviceName和DeviceSecret)。
  3. 自定义JSON格式的任务规则文件。本文规则文件命名为任务执行规则.json,内容如下。
    {
        "fileName":"jobTest",
        "fileVersion":"1",
        "fileDescription":"任务管理演示使用"
    }

创建自定义任务

  1. 登录物联网平台控制台
  2. 实例概览页面,单击公共实例
  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的取值,请参见地域和可用区
  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成功
    返回物联网平台控制台的任务详情 > 作业概览页签,可查看到任务状态为成功任务成功