Feladatok ütemezése több eszközön

Azure IoT Hub számos építőelemet engedélyez, például az ikereszköz tulajdonságait, a címkéket és a közvetlen metódusokat. A háttéralkalmazások általában lehetővé teszik az eszközgazdák és az operátorok számára az IoT-eszközök tömeges és ütemezett frissítését és használatát. A feladatok ütemezett időpontban hajtanak végre ikereszköz-frissítéseket és közvetlen metódusokat egy eszközkészleten. Egy operátor például egy háttéralkalmazást használna, amely elindít és nyomon követ egy feladatot a 43- és a 3. épület egy olyan eszközkészletének újraindításához, amely nem zavarná az épület működését.

Megjegyzés

A cikkben ismertetett funkciók csak a IoT Hub standard szintjén érhetők el. Az alapszintű és standard/ingyenes IoT Hub szintekkel kapcsolatos további információkért lásd: A megoldáshoz megfelelő IoT Hub szint kiválasztása.

Fontolja meg a feladatok használatát, ha az alábbi tevékenységek bármelyikét ütemeznie és nyomon kell követnie egy eszközkészleten:

  • Eszköz kívánt tulajdonságainak frissítése
  • Címkék frissítése
  • Közvetlen metódusok meghívása

Feladat életciklusa

A feladatokat a megoldás háttérrendszere kezdeményezi, és IoT Hub tartja karban. A feladatokat egy szolgáltatásoldali URI-n (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) keresztül indíthatja el, és lekérdezheti a végrehajtási feladat előrehaladását egy szolgáltatáshoz kapcsolódó URI-n keresztül (GET https://<iot hub>/jobs/v2/<jobID?api-version=2021-04-12). Ha egy feladat elindítása után frissíteni szeretné a futtatott feladatok állapotát, futtasson egy feladat-lekérdezést. A feladatelőzmények nincsenek explicit módon törölve, de 30 napos TTL-juk van. 

Megjegyzés

Feladat indításakor a tulajdonságnevek és -értékek csak az US-ASCII nyomtatható alfanumerikus elemeket tartalmazhatják, kivéve az alábbi készlet bármelyikét: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

Megjegyzés

A jobId mezőnek legfeljebb 64 karakterből állhat, és csak US-ASCII betűket, számokat és kötőjelet (-) tartalmazhat.

Közvetlen metódusok végrehajtására használható feladatok

Az alábbi kódrészlet a HTTPS 1.1 kérelem részleteit mutatja be a közvetlen metódusok feladatokat használó eszközkészleten való végrehajtásához:

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

A lekérdezési feltétel lehet egyetlen eszközazonosító vagy az eszközazonosítók listája is, ahogy az alábbi példákban látható:

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

IoT Hub lekérdezési nyelv további részletekben ismerteti IoT Hub lekérdezési nyelvet.

Az alábbi kódrészlet egy testMethod nevű közvetlen metódus meghívására ütemezett feladat kérését és válaszát mutatja be a contoso-hub-1 összes eszközén:

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

Az ikereszköz tulajdonságainak frissítésére használt feladatok

Az alábbi kódrészlet a HTTPS 1.1 kérelem részleteit mutatja be az ikereszköz tulajdonságainak feladattal történő frissítéséhez:

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

Megjegyzés

Az updateTwin tulajdonsághoz érvényes etag-egyezés szükséges; például: etag="*".

Az alábbi kódrészlet a contoso-hub-1 teszteszköz ikereszköz-tulajdonságainak frissítésére ütemezett feladat kérését és válaszát mutatja be:

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

Feladatok előrehaladásának lekérdezése

Az alábbi kódrészlet a feladatok lekérdezésének HTTPS 1.1-beli kérésadatait mutatja be:

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

A folytatásToken a válaszból származik.

A feladat-végrehajtási állapotot minden eszközön lekérdezheti az ikereszközök, feladatok és üzenetek útválasztásának IoT Hub lekérdezési nyelvével.

Feladatok tulajdonságai

Az alábbi listában láthatók a tulajdonságok és a megfelelő leírások, amelyek a feladatok vagy a feladatok eredményeinek lekérdezéséhez használhatók.

Tulajdonság Leírás
jobId Az alkalmazás megadta a feladat azonosítóját.
startTime Az alkalmazás megadta a feladat kezdési időpontját (ISO-8601).
endTime IoT Hub a feladat befejezésének dátumát (ISO-8601) adta meg. Csak akkor érvényes, ha a feladat elérte a "befejezett" állapotot.
típus Feladatok típusai:
scheduleUpdateTwin: A kívánt tulajdonságok vagy címkék készletének frissítésére használt feladat.
scheduleDeviceMethod: Eszközmetódus meghívására használt feladat ikereszköz-halmazon.
Állapot A feladat aktuális állapota. Az állapot lehetséges értékei:
függőben: Ütemezett és várakozás arra, hogy a feladatszolgáltatás átvehesse.
ütemezett: A jövőbeli időpontra van ütemezve.
futtatás: Jelenleg aktív feladat.
megszakítva: A feladat megszakadt.
sikertelen: A feladat nem sikerült.
befejeződött: A feladat befejeződött.
deviceJobStatistics A feladat végrehajtásának statisztikái.
deviceJobStatistics tulajdonságai:
deviceJobStatistics.deviceCount: A feladatban lévő eszközök száma.
deviceJobStatistics.failedCount: Azon eszközök száma, ahol a feladat meghiúsult.
deviceJobStatistics.succeededCount: Azon eszközök száma, ahol a feladat sikeres volt.
deviceJobStatistics.runningCount: A feladatot jelenleg futtató eszközök száma.
deviceJobStatistics.pendingCount: A feladat futtatásához függőben lévő eszközök száma.

További referenciaanyag

A IoT Hub fejlesztői útmutató további referenciatémakörök a következők:

Következő lépések

A cikkben ismertetett fogalmak kipróbálásához tekintse meg az alábbi IoT Hub oktatóanyagot: