Planowanie zadań na wielu urządzeniach

Azure IoT Hub umożliwia szereg bloków konstrukcyjnych, takich jak właściwości bliźniaczej reprezentacji urządzenia i tagi imetody bezpośrednie. Zazwyczaj aplikacje zaplecza umożliwiają administratorom i operatorom urządzeń zbiorcze aktualizowanie i interakcję z urządzeniami IoT oraz w zaplanowanym czasie. Zadania wykonują aktualizacje bliźniaczej reprezentacji urządzenia i metody bezpośrednie względem zestawu urządzeń w zaplanowanym czasie. Na przykład operator będzie używać aplikacji zaplecza, która inicjuje i śledzi zadanie ponownego uruchamiania zestawu urządzeń w budynku 43 i 3 w czasie, które nie byłoby zakłócające działania budynku.

Uwaga

Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub. Aby uzyskać więcej informacji na temat warstw podstawowych i standardowych/bezpłatnych IoT Hub, zobacz Wybieranie odpowiedniej warstwy IoT Hub dla rozwiązania.

Rozważ użycie zadań, jeśli musisz zaplanować i śledzić postęp dowolnego z następujących działań na zestawie urządzeń:

  • Aktualizowanie żądanych właściwości
  • Aktualizowanie tagów
  • Wywoływanie metod bezpośrednich

Cykl życia zadania

Zadania są inicjowane przez zaplecze rozwiązania i obsługiwane przez IoT Hub. Zadanie można zainicjować za pomocą identyfikatora URI usługi (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) i wykonać zapytanie o postęp wykonywania zadania za pośrednictwem identyfikatora URI usługi (GET https://<iot hub>/jobs/v2/<jobID?api-version=2021-04-12). Aby odświeżyć stan uruchomionych zadań po zainicjowaniu zadania, uruchom zapytanie o zadanie. Nie ma jawnego przeczyszczenia historii zadań, ale mają czas wygaśnięcia 30 dni. 

Uwaga

Po zainicjowaniu zadania nazwy właściwości i wartości mogą zawierać tylko kod alfanumeryczny US-ASCII, z wyjątkiem dowolnego z następujących zestawów: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

Uwaga

Pole jobId musi zawierać maksymalnie 64 znaki i może zawierać tylko litery US-ASCII, cyfry i znak kreski (-).

Zadania do wykonywania metod bezpośrednich

Poniższy fragment kodu przedstawia szczegóły żądania HTTPS 1.1 dotyczące wykonywania metody bezpośredniej na zestawie urządzeń przy użyciu zadania:

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

Warunek zapytania może również znajdować się na jednym identyfikatorze urządzenia lub na liście identyfikatorów urządzeń, jak pokazano w poniższych przykładach:

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

IoT Hub Query Language obejmuje język zapytań IoT Hub szczegółowo.

Poniższy fragment kodu przedstawia żądanie i odpowiedź dla zadania zaplanowanego do wywołania metody bezpośredniej o nazwie testMethod na wszystkich urządzeniach 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"}

Zadania aktualizacji właściwości bliźniaczej reprezentacji urządzenia

Poniższy fragment kodu przedstawia szczegóły żądania HTTPS 1.1 dotyczące aktualizowania właściwości bliźniaczej reprezentacji urządzenia przy użyciu zadania:

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

Uwaga

Właściwość updateTwin wymaga prawidłowego dopasowania elementu etag; na przykład etag="*".

Poniższy fragment kodu przedstawia żądanie i odpowiedź dla zadania zaplanowanego do zaktualizowania właściwości bliźniaczej reprezentacji urządzenia dla urządzenia test-device w usłudze 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"}

Wykonywanie zapytań o postęp zadań

Poniższy fragment kodu przedstawia szczegóły żądania HTTPS 1.1 dotyczące wykonywania zapytań dotyczących zadań:

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

Element continuationToken jest dostarczany z odpowiedzi.

Możesz wykonywać zapytania dotyczące stanu wykonywania zadania na każdym urządzeniu przy użyciu języka zapytań IoT Hub dla bliźniaczych reprezentacji urządzeń, zadań i routingu komunikatów.

Właściwości zadań

Na poniższej liście przedstawiono właściwości i odpowiednie opisy, których można użyć podczas wykonywania zapytań dotyczących zadań lub wyników zadań.

Właściwość Opis
Jobid Identyfikator podanej aplikacji dla zadania.
Starttime Aplikacja dostarczyła czas rozpoczęcia (ISO-8601) dla zadania.
Endtime IoT Hub podaną datę (ISO-8601) dla momentu zakończenia zadania. Prawidłowa tylko po osiągnięciu stanu "ukończono" zadania.
Typu Typy zadań:
scheduleUpdateTwin: zadanie używane do aktualizowania zestawu żądanych właściwości lub tagów.
scheduleDeviceMethod: zadanie używane do wywoływania metody urządzenia w zestawie bliźniaczych reprezentacji urządzenia.
Stan Bieżący stan zadania. Możliwe wartości stanu:
oczekujące: Zaplanowane i oczekujące na odebranie przez usługę zadań.
zaplanowane: Zaplanowano czas w przyszłości.
uruchomione: Aktualnie aktywne zadanie.
anulowano: zadanie zostało anulowane.
niepowodzenie: zadanie nie powiodło się.
ukończono: zadanie zostało ukończone.
deviceJobStatistics Statystyki dotyczące wykonywania zadania.
właściwości deviceJobStatistics :
deviceJobStatistics.deviceCount: liczba urządzeń w zadaniu.
deviceJobStatistics.failedCount: liczba urządzeń, na których zadanie nie powiodło się.
deviceJobStatistics.succeededCount: liczba urządzeń, na których zadanie zakończyło się pomyślnie.
deviceJobStatistics.runningCount: liczba urządzeń, na których aktualnie uruchomiono zadanie.
deviceJobStatistics.pendingCount: liczba urządzeń oczekujących na uruchomienie zadania.

Dodatkowy materiał referencyjny

Inne tematy referencyjne w przewodniku dla deweloperów IoT Hub obejmują:

Następne kroki

Aby wypróbować niektóre pojęcia opisane w tym artykule, zobacz następujący samouczek IoT Hub: