Skip to main content

Azure IoT Hub针对多个设备的计划任务

分类:  Azure物联网 标签:  #Azure #IoT Hub # 发布于: 2023-06-12 21:41:16

Azure IoT Hub通过计划任务让设备管理员可以针对大量的设备在计划的时间里管理设备或者和设备交互,或者进行孪生设备更新。当遇到如下的场景,适合使用计划任务(schedule job):

  • 大量设备上更新预期属性
  • 大量设备上更新tags
  • 大量设备上调用直接方法。

计划任务的生命周期

计划任务由后端应用初始化,但是生命周期是由IoT Hub来管理。通常情况通过PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2018-06-30来初始化一个任务,通过GET https://<iot hub>/jobs/v2/<jobID?api-version=2018-06-30查询计划任务。

运行直接方法的计划任务

下述的代码片段展示了如何通过Http 1.1 运行直接方法的详细情况:

PUT /jobs/v2/<jobId>?api-version=2018-06-30

Authorization: <config.sharedAccessSignature>
Content-Type: application/json; charset=utf-8

{
    "jobId": "<jobId>",
    "type": "scheduleDeviceMethod",
    "cloudToDeviceMethod": {
        "methodName": "<methodName>",
        "payload": <payload>,
        "responseTimeoutInSeconds": methodTimeoutInSeconds
    },
    "queryCondition": "<queryOrDevices>", // query condition
    "startTime": <jobStartTime>,          // as an ISO-8601 date string
    "maxExecutionTimeInSeconds": <maxExecutionTimeInSeconds>
}

QueryCondition 可以是单个的设备ID, 也可以是设备列表:

"queryCondition" = "deviceId = 'MyDevice1'"
"queryCondition" = "deviceId IN ['MyDevice1','MyDevice2']"
"queryCondition" = "deviceId IN ['MyDevice1']"

如下的请求过程展示了对hub contoso-hub-1上的所有设备进行了直接方法调用:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job01?api-version=2018-06-30 HTTP/1.1
Authorization: SharedAccessSignature sr=contoso-hub-1.azure-devices.net&sig=68iv------------------------------------v8Hxalg%3D&se=1556849884&skn=iothubowner
Content-Type: application/json; charset=utf-8
Host: contoso-hub-1.azure-devices.net
Content-Length: 317

{
    "jobId": "job01",
    "type": "scheduleDeviceMethod",
    "cloudToDeviceMethod": {
        "methodName": "testMethod",
        "payload": {},
        "responseTimeoutInSeconds": 30
    },
    "queryCondition": "*", 
    "startTime": "2019-05-04T15:53:00.077Z",
    "maxExecutionTimeInSeconds": 20
}

HTTP/1.1 200 OK
Content-Length: 65
Content-Type: application/json; charset=utf-8
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 03 May 2019 01:46:18 GMT

{"jobId":"job01","type":"scheduleDeviceMethod","status":"queued"}

更新孪生设备属性的计划任务

下述请求展示了使用计划任务更新孪生设备的属性:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job02?api-version=2018-06-30 HTTP/1.1
Authorization: SharedAccessSignature sr=contoso-hub-1.azure-devices.net&sig=BN0U-------------------------------------RuA%3D&se=1556925787&skn=iothubowner
Content-Type: application/json; charset=utf-8
Host: contoso-hub-1.azure-devices.net
Content-Length: 339

{
    "jobId": "job02",
    "type": "scheduleUpdateTwin",
    "updateTwin": {
      "properties": {
        "desired": {
          "test1": "value1"
        }
      },
     "etag": "*"
     },
    "queryCondition": "deviceId = 'test-device'",
    "startTime": "2019-05-08T12:19:56.868Z",
    "maxExecutionTimeInSeconds": 20
}

HTTP/1.1 200 OK
Content-Length: 63
Content-Type: application/json; charset=utf-8
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 03 May 2019 22:45:13 GMT

{"jobId":"job02","type":"scheduleUpdateTwin","status":"queued"}

查询计划任务的进度

查询计划任务的进度:

GET /jobs/v2/query?api-version=2018-06-30[&jobType=<jobType>][&jobStatus=<jobStatus>][&pageSize=<pageSize>][&continuationToken=<continuationToken>]

Authorization: <config.sharedAccessSignature>
Content-Type: application/json; charset=utf-8

关于Job的属性,您也可以参考文档:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-jobs,

这之后我们会以教程的形式来学习如何创建一个Schedule job。