Plánování úloh na několika zařízeních

Azure IoT Hub umožňuje řadu stavebních bloků, jako jsou vlastnosti a značky dvojčat zařízení a přímé metody. Back-endové aplikace obvykle umožňují správcům a operátorům zařízení aktualizovat zařízení IoT a pracovat s nimi hromadně a v naplánovaném čase. Úlohy provádějí aktualizace dvojčete zařízení a přímé metody vůči sadě zařízení v naplánovaném čase. Operátor by například použil back-endovou aplikaci, která inicializuje a sleduje úlohu k restartování sady zařízení v budově 43 a patře 3 najednou, což by nenarušovalo provoz budovy.

Poznámka

Funkce popsané v tomto článku jsou dostupné jenom na standardní úrovni IoT Hub. Další informace o IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné IoT Hub úrovně pro vaše řešení.

Použití úloh zvažte, pokud potřebujete naplánovat a sledovat průběh některé z následujících aktivit na sadě zařízení:

  • Aktualizace požadovaných vlastností
  • Aktualizace značek
  • Vyvolání přímých metod

Životní cyklus úlohy

Úlohy jsou inicializovány back-endem řešení a udržovány IoT Hub. Úlohu můžete zahájit prostřednictvím identifikátoru URI pro službu (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) a dotazovat se na průběh spouštěné úlohy prostřednictvím identifikátoru URI určeného ke službě (GET https://<iot hub>/jobs/v2/<jobID?api-version=2021-04-12). Pokud chcete aktualizovat stav spuštěných úloh po zahájení úlohy, spusťte dotaz úlohy. Historie úloh se explicitně nevyprázdní, ale hodnota TTL je 30 dnů. 

Poznámka

Při zahájení úlohy můžou názvy vlastností a hodnoty obsahovat pouze tisknutelné alfanumerické znaky US-ASCII, s výjimkou libovolných v následující sadě: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

Poznámka

Pole jobId musí mít maximálně 64 znaků a může obsahovat pouze písmena US-ASCII, číslice a pomlčku (-).

Úlohy pro spouštění přímých metod

Následující fragment kódu ukazuje podrobnosti o požadavku HTTPS 1.1 pro spuštění přímé metody na sadě zařízení pomocí úlohy:

PUT /jobs/v2/<jobId>?api-version=2021-04-12

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>
}

Podmínka dotazu může být také na jednom ID zařízení nebo v seznamu ID zařízení, jak je znázorněno v následujících příkladech:

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

IoT Hub dotazovací jazyk se podrobněji věnuje IoT Hub dotazovacímu jazyku.

Následující fragment kódu ukazuje požadavek a odpověď na úlohu naplánovanou na volání přímé metody s názvem testMethod na všech zařízeních v contoso-hub-1:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job01?api-version=2021-04-12 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"}

Úlohy pro aktualizaci vlastností dvojčete zařízení

Následující fragment kódu ukazuje podrobnosti o požadavku HTTPS 1.1 pro aktualizaci vlastností dvojčete zařízení pomocí úlohy:

PUT /jobs/v2/<jobId>?api-version=2021-04-12

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

{
    "jobId": "<jobId>",
    "type": "scheduleUpdateTwin",
    "updateTwin": <patch>                 // Valid JSON object
    "queryCondition": "<queryOrDevices>", // query condition
    "startTime": <jobStartTime>,          // as an ISO-8601 date string
    "maxExecutionTimeInSeconds": <maxExecutionTimeInSeconds>
}

Poznámka

Vlastnost vyžaduje platnou shodu etag; například etag="*".

Následující fragment kódu ukazuje požadavek a odpověď na úlohu naplánovanou na aktualizaci vlastností dvojčete zařízení pro test-device v contoso-hub-1:

PUT https://contoso-hub-1.azure-devices.net/jobs/v2/job02?api-version=2021-04-12 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"}

Dotazování na průběh úloh

Následující fragment kódu ukazuje podrobnosti požadavku HTTPS 1.1 pro dotazování úloh:

GET /jobs/v2/query?api-version=2021-04-12[&jobType=<jobType>][&jobStatus=<jobStatus>][&pageSize=<pageSize>][&continuationToken=<continuationToken>]

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

Z odpovědi je poskytnutý token continuationToken.

Pomocí IoT Hub dotazovacího jazyka pro dvojčata zařízení, úlohy a směrování zpráv můžete zadat dotaz na stav spuštění úlohy na každém zařízení.

Vlastnosti úloh

Následující seznam obsahuje vlastnosti a odpovídající popisy, které se dají použít při dotazování na úlohy nebo výsledky úlohy.

Vlastnost Popis
ID úlohy Aplikace poskytla ID pro úlohu.
Starttime Aplikace poskytla čas spuštění (ISO-8601) pro úlohu.
Endtime IoT Hub zadané datum (ISO-8601) pro dokončení úlohy. Platnost je platná až po dokončení úlohy.
Typ Typy úloh:
scheduleUpdateTwin: Úloha sloužící k aktualizaci sady požadovaných vlastností nebo značek.
scheduleDeviceMethod: Úloha použitá k vyvolání metody zařízení v sadě dvojčat zařízení.
Stav Aktuální stav úlohy. Možné hodnoty stavu:
pending: Naplánováno a čeká na vyzvednutí službou úloh.
scheduled: Naplánováno na čas v budoucnu.
spuštěno: Aktuálně aktivní úloha.
zrušeno: Úloha byla zrušena.
selhalo: Úloha se nezdařila.
completed(dokončeno): Úloha byla dokončena.
deviceJobStatistics Statistika provádění úlohy
vlastnosti deviceJobStatistics :
deviceJobStatistics.deviceCount: Počet zařízení v úloze.
deviceJobStatistics.failedCount: Počet zařízení, u kterých úloha selhala.
deviceJobStatistics.succeededCount: Počet zařízení, ve kterých byla úloha úspěšná.
deviceJobStatistics.runningCount: Počet zařízení, na kterých je úloha aktuálně spuštěná.
deviceJobStatistics.pendingCount: Počet zařízení čekajících na spuštění úlohy.

Další referenční materiály

Mezi další referenční témata v příručce pro vývojáře IoT Hub patří:

Další kroky

Pokud si chcete vyzkoušet některé koncepty popsané v tomto článku, projděte si následující IoT Hub kurzu: