Aracılığıyla paylaş


Azure IoT Hub işlerini birden çok cihazda zamanlama

Azure IoT Hub , cihaz ikizi özellikleri, etiketleri vedoğrudan yöntemler gibi birçok yapı taşları sağlar. Genellikle arka uç uygulamaları, cihaz yöneticilerinin ve operatörlerin IoT cihazlarını toplu ve zamanlanmış bir zamanda güncelleştirmesine ve bunlarla etkileşim kurmasına olanak tanır. İşler, cihaz ikizi güncellemelerini ve doğrudan komutları zamanlı bir şekilde bir dizi cihazda uygular. Örneğin, bir operatör, bina 43 ve kat 3'teki bir dizi cihazı, bina işlemlerini kesintiye uğratmayacak bir zamanda yeniden başlatmak için işi başlatan ve izleyen bir arka uç uygulaması kullanır.

Uyarı

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

Cihaz kümesinde aşağıdaki etkinliklerden herhangi birini zamanlamak ve ilerlemesini izlemek gerektiğinde işlevleri kullanmayı düşünebilirsiniz.

  • İ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 (PUT https://<iot hub>/jobs/v2/<jobID>?api-version=2021-04-12) aracılığıyla bir iş başlatabilir ve hizmete yönelik bir URI (GET 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 yapın. İş geçmişi açıkça temizlenmez, ancak 30 günlük bir TTL'leri vardır. 

Uyarı

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 karakterler içerebilir: $ ( ) < > @ , ; : \ " / [ ] ? = { } SP HT

Uyarı

Alan jobId 64 karakter veya daha az olmalıdır ve yalnızca US-ASCII harf, sayı ve tire (-) karakteri içerebilir.

Doğrudan yöntemleri yürütmek için görevler

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

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 hakkında daha fazla bilgi için bkz. Cihaz ve modül ikizleri, işler ve ileti yönlendirme için IoT Hub sorgu dili.

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ştirmeye 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": "scheduleUpdateTwin",
    "updateTwin": <patch>                 // Valid JSON object
    "queryCondition": "<queryOrDevices>", // query condition
    "startTime": <jobStartTime>,          // as an ISO-8601 date string
    "maxExecutionTimeInSeconds": <maxExecutionTimeInSeconds>
}

Uyarı

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ının cihaz ikizi özelliklerini güncellemek için planlanmış bir görevin talebini 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"}

İşlerin ilerleme durumunu sorgulama

Aşağıdaki kod parçacığında işler için sorgulamaya yönelik HTTPS 1.1 istek ayrıntıları gösterilmektedir:

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 alınır.

Cihaz ve modül 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 listede, işler veya iş sonuçları sorgulandığında kullanılabilecek özellikler ve ilgili açıklamalar gösterilir.

Mülkiyet Açıklama
jobId Uygulamanın iş için sağladığı kimlik.
başlangıçZamanı Uygulama iş için başlangıç saati (ISO-8601) sağladı.
endTime IoT Hub'un işin tamamlandığı tarihe (ISO-8601) sağladığı bilgi. Yalnızca iş 'tamamlandı' durumuna ulaştıktan sonra geçerlidir.
maxExecutionTimeInSeconds Uygulama, işin başlamasından tamamlanana kadar izin verilen toplam süre üst sınırını sağladı.
türü İş türleri:
scheduleUpdateTwin: İstenen özellikler veya etiketler kümesini güncelleştirmek için kullanılan bir iş.
scheduleDeviceMethod: Bir cihaz ikizleri setinde cihaz yöntemini çağırmak için kullanılan bir görev.
durum Geçerli iş durumu. Durum için olası değerler:
beklemede: Zamanlanmış ve bir iş hizmeti tarafından alınmayı bekliyor.
zamanlanmış: Gelecekte bir zaman için planlanmıştır.
çalışmakta olan: Ş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: Görevin 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ı.

Diğer başvuru malzemeleri

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

Sonraki adımlar

Bu makalede açıklanan kavramlardan bazılarını keşfetmek için aşağıdaki IoT Hub makalesine bakın: