Birden fazla cihazda işleri zamanlama

Azure IoT Hub, cihaz ikizi özellikleri, etiketleri vedoğrudan yöntemler gibi bir dizi yapı taşları sağlar. Genellikle arka uç uygulamaları, cihaz yöneticilerinin ve operatörlerinin IoT cihazlarını toplu olarak ve zamanlanmış bir zamanda güncelleştirmesine ve bunlarla etkileşim kurmasına olanak tanır. İşler, cihaz ikizi güncelleştirmelerini ve doğrudan yöntemleri zamanlanmış bir zamanda bir cihaz kümesine karşı yürütür. Örneğin, bir operatör bir işi başlatan ve izleyen bir arka uç uygulaması kullanarak 43 ve kat 3'teki bir dizi cihazı binanın işlemlerini kesintiye uğratmayacak bir zamanda yeniden başlatabilir.

Not

Bu makalede açıklanan özellikler yalnızca standart IoT Hub katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. Çözümünüz için doğru IoT Hub katmanını seçme.

Bir cihaz kümesinde aşağıdaki etkinliklerden herhangi birini zamanlamanız ve ilerleme durumunu izlemeniz gerektiğinde işleri kullanmayı göz önünde bulundurun:

  • İstenen özellikleri güncelleştirme
  • Etiketleri güncelleştirme
  • Doğrudan yöntemleri çağırma

İş yaşam döngüsü

İşler çözüm arka ucu tarafından başlatılır ve IoT Hub tarafından korunur. Hizmete yönelik bir URI () aracılığıyla bir iş başlatabilir ve hizmete yönelik URI (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12GET https://<iot hub>/jobs/v2/<jobID?api-version=2021-04-12) aracılığıyla yürütülen bir işte ilerleme durumunu sorgulayabilirsiniz. Bir iş başlatıldıktan sonra çalışan işlerin durumunu yenilemek için bir iş sorgusu çalıştırın. İş geçmişinin açık temizlemesi yoktur, ancak 30 günlük TTL'leri vardır. 

Not

Bir işi başlattığınızda, özellik adları ve değerleri aşağıdaki kümedekiler dışında yalnızca US-ASCII yazdırılabilir alfasayısal içerebilir: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

Not

Alan jobId 64 karakter veya daha kısa olmalıdır ve yalnızca US-ASCII harfleri, sayıları ve tire (-) karakterini içerebilir.

Doğrudan yöntemleri yürütecek işler

Aşağıdaki kod parçacığı, bir iş kullanarak bir dizi cihazda doğrudan yöntem yürütmeye yönelik HTTPS 1.1 istek ayrıntılarını gösterir:

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

Sorgu koşulu, aşağıdaki örneklerde gösterildiği gibi tek bir cihaz kimliğinde veya cihaz kimlikleri listesinde de olabilir:

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

IoT Hub Sorgu Dili, IoT Hub sorgu dilini daha ayrıntılı olarak kapsar.

Aşağıdaki kod parçacığı, contoso-hub-1 üzerindeki tüm cihazlarda testMethod adlı doğrudan bir yöntemi çağırmak üzere zamanlanmış bir işin isteğini ve yanıtını gösterir:

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

Cihaz ikizi özelliklerini güncelleştirme işleri

Aşağıdaki kod parçacığı, bir iş kullanarak cihaz ikizi özelliklerini güncelleştirmek için HTTPS 1.1 istek ayrıntılarını gösterir:

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

Not

updateTwin özelliği geçerli bir etag eşleşmesi gerektirir; örneğin, etag="*".

Aşağıdaki kod parçacığı, contoso-hub-1'de test cihazı için cihaz ikizi özelliklerini güncelleştirmek üzere zamanlanmış bir işin isteğini ve yanıtını gösterir:

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

İşlerde ilerleme durumunu sorgulama

Aşağıdaki kod parçacığı, işleri sorgulamaya yönelik HTTPS 1.1 istek ayrıntılarını gösterir:

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

continuationToken yanıttan sağlanır.

Cihaz ikizleri, işler ve ileti yönlendirme için IoT Hub sorgu dilini kullanarak her cihazda iş yürütme durumunu sorgulayabilirsiniz.

İş Özellikleri

Aşağıdaki liste, işleri veya iş sonuçlarını sorgularken kullanılabilecek özellikleri ve ilgili açıklamaları gösterir.

Özellik Açıklama
Jobıd İş için uygulama tarafından sağlanan kimlik.
Starttime Uygulama iş için başlangıç saati (ISO-8601) sağladı.
Endtime IoT Hub işin ne zaman tamamlandığı için sağlanan tarih (ISO-8601). Yalnızca iş 'tamamlandı' durumuna ulaştıktan sonra geçerlidir.
Türü İş türleri:
scheduleUpdateTwin: İstenen özellikler veya etiketler kümesini güncelleştirmek için kullanılan bir iş.
scheduleDeviceMethod: Bir cihaz ikizleri kümesinde cihaz yöntemini çağırmak için kullanılan bir iş.
Durum İşin geçerli durumu. Durum için olası değerler:
beklemede: zamanlanmış ve iş hizmeti tarafından alınmak için bekleniyor.
zamanlandı: Gelecekte bir süre için zamanlandı.
çalışıyor: Şu anda etkin olan iş.
iptal edildi: İş iptal edildi.
başarısız: İş başarısız oldu.
tamamlandı: İş tamamlandı.
deviceJobStatistics İşin yürütülmesiyle ilgili istatistikler.
deviceJobStatistics özellikleri:
deviceJobStatistics.deviceCount: İşteki cihaz sayısı.
deviceJobStatistics.failedCount: İşin başarısız olduğu cihaz sayısı.
deviceJobStatistics.succeededCount: İşin başarılı olduğu cihaz sayısı.
deviceJobStatistics.runningCount: şu anda işi çalıştıran cihaz sayısı.
deviceJobStatistics.pendingCount: İşi çalıştırmayı bekleyen cihaz sayısı.

Ek başvuru malzemesi

IoT Hub geliştirici kılavuzundaki diğer başvuru konuları şunlardır:

Sonraki adımlar

Bu makalede açıklanan kavramlardan bazılarını denemek için aşağıdaki IoT Hub öğreticisine bakın: