Sdílet prostřednictvím


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

Azure IoT Hub umožňuje řadu stavebních bloků, jako jsou vlastnosti dvojčete zařízení a značky a přímé metody. Back-endové aplikace obvykle umožňují správcům a operátorům zařízení hromadně a v naplánovaném čase aktualizovat a interagovat se zařízeními IoT. Úlohy spouštějí aktualizace dvojčat zařízení a přímé metody pro sadu 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 3. patra v době, která by nenarušovala provoz budovy.

Poznámka:

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Basic a Standard/Free IoT Hub najdete v tématu Volba správné úrovně a velikosti služby IoT Hub pro vaše řešení.

Zvažte použití úloh, 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 spravovány službou IoT Hub. Úlohu můžete zahájit prostřednictvím identifikátoru URI (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) a dotazovat se na průběh provádění úlohy prostřednictvím identifikátoru URI (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. Neexistuje zřejmé odstranění historie úloh, ale mají nastavení životnosti (TTL) 30 dnů. 

Poznámka:

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

Poznámka:

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

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

Následující fragment kódu ukazuje podrobnosti 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ínkou dotazu může být také jedno ID zařízení nebo seznam 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']"

Dotazovací jazyk IoT Hubu se podrobněji zabývá dotazovacím jazykem ioT Hubu.

Následující fragment kódu ukazuje požadavek a odpověď pro úlohu naplánovanou tak, aby volala přímou metodu s názvem testMethod na všech zařízeních na 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 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 updateTwin vyžaduje platnou shodu etag; například etag="*".

Následující úryvek ukazuje požadavek a odpověď pro úlohu naplánovanou k aktualizaci vlastností zařízení twin pro testovací zařízení na 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 úkolů

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

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

Token pokračování je poskytnut z odpovědi.

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

Vlastnosti úloh

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

Vlastnictví Popis
jobId Aplikace poskytla ID pro úlohu.
časZačátku Aplikace poskytla čas zahájení (ISO-8601) pro úlohu.
endTime Datum (ISO-8601) poskytnutý IoT Hubem pro dokončení úlohy. Platné pouze poté, co úloha dosáhne stavu 'dokončeno'.
maxExecutionTimeInSeconds Aplikace poskytla maximální povolenou celkovou dobu od okamžiku, kdy se úloha spustí, dokud se neskončí.
typ Typy úloh:
scheduleUpdateTwin: Úloha použitá k aktualizaci sady požadovaných vlastností nebo značek.
scheduleDeviceMethod: Úloha používaná k vyvolání metody zařízení v sadě dvojčat zařízení.
stav Aktuální stav úlohy Možné hodnoty pro stav:
čekající: Čekající a naplánované na vyzvednutí úlohovou službou.
naplánované: Naplánováno na dobu v budoucnosti.
běžící: Aktuálně aktivní úloha.
zrušena: Úloha byla zrušena.
se nezdařila: Úloha se nezdařila.
dokončeno: Úloha byla dokončena.
deviceJobStatistics Statistiky o provádění úlohy
deviceJobStatistics – vlastnosti:
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í, u kterých byla úloha úspěšná.
deviceJobStatistics.runningCount: Počet zařízení, na kterých se úloha právě spouští.
deviceJobStatistics.pendingCount: Počet zařízení, která čekají na spuštění úlohy.

Další referenční materiál

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

Další kroky

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