IoT hub'ından buluttan cihaza iletiler gönderme

Çözüm arka ucunuzdan bir cihaz uygulamasına tek yönlü bildirimler göndermek için IoT hub'ınızdan cihazınıza buluttan cihaza iletiler gönderin. Azure IoT Hub tarafından desteklenen diğer buluttan cihaza seçeneklerinin tartışması için bkz. Buluttan cihaza iletişim kılavuzu.

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ı seçme.

Hizmete yönelik bir uç nokta ( /messages/devicebound) aracılığıyla buluttan cihaza iletiler gönderirsiniz. Daha sonra bir cihaz, cihaza özgü uç nokta üzerinden iletileri alır: /devices/{deviceId}/messages/devicebound.

Buluttan cihaza her iletiyi tek bir cihazda hedeflemek için IoT hub'ınız özelliğini/devices/{deviceId}/messages/devicebound olarak ayarlar.

Her cihaz kuyruğu en fazla 50 buluttan cihaza ileti tutar. Aynı cihaza daha fazla ileti göndermeye çalıştığınızda bir hata oluşur.

Buluttan cihaza ileti yaşam döngüsü

En az bir kez ileti teslimini garanti etmek için IoT hub'ınız cihaz başına kuyruklarda buluttan cihaza iletileri kalıcı hale getirir. IoT hub'ı iletiyi kuyruktan kaldırmadan önce cihazların bir iletinin tamamlanmasını açıkça kabul etmesi gerekir. Bu yaklaşım, bağlantı ve cihaz hatalarına karşı dayanıklılığı garanti eder.

Yaşam döngüsü durum grafiği aşağıdaki diyagramda görüntülenir:

Buluttan cihaza iletilerin yaşam döngüsü durum grafiğini gösteren diyagram.

IoT hub hizmeti bir cihaza ileti gönderdiğinde, hizmet ileti durumunu Enqueued olarak ayarlar. Bir cihaz ileti almak istediğinde IoT hub'ı durumu Görünmez olarak ayarlayarak iletiyi kilitler. Bu durum, cihazdaki diğer iş parçacıklarının diğer iletileri almaya başlamasını sağlar. Bir cihaz iş parçacığı iletinin işlenmesini tamamladığında, iletiyi tamamlayarak IoT hub'ına bildirimde bulunur. Ardından IoT hub'ı durumu Tamamlandı olarak ayarlar.

Bir cihaz şunları da yapabilir:

  • IoT hub'ını Teslim edilemeyen harf durumuna ayarlamasına neden olan iletiyi reddedin. Message Queuing Telemetri Aktarımı (MQTT) protokolü üzerinden bağlanan cihazlar buluttan cihaza iletileri reddedemez.

  • IoT hub'ında durumu Enqueued olarak ayarlanmış iletiyi yeniden kuyruğa yerleştirmesine neden olan iletiden vazgeçin. MQTT protokolü üzerinden bağlanan cihazlar buluttan cihaza iletileri bırakamaz.

Bir iş parçacığı, IoT hub'ına bildirmeden bir iletiyi işleyemedi. Bu durumda, iletiler görünürlük zaman aşımından (veya kilit zaman aşımından) sonra otomatik olarak Görünmez durumdan Sıralı durumuna geri döner. Bu zaman aşımının değeri bir dakikadır ve değiştirilemez.

IoT hub'ının maksimum teslim sayısı özelliği, bir iletinin Enqueued ve Invisible durumları arasında en fazla kaç kez geçiş yapabileceğinizi belirler. Bu sayıda geçiş sonrasında IoT hub'ı iletinin durumunu Teslim edilemeyen olarak ayarlar. Benzer şekilde, IoT hub'ı bir iletinin durumunu sona erme tarihinden sonra Teslim edilemeyen olarak ayarlar. Daha fazla bilgi için bkz. İleti süre sonu (yaşam süresi).

IoT Hub ile buluttan cihaza ileti gönderme makalesi, buluttan cihaza iletileri göndermeyi ve bir cihazda almayı gösterir.

İletinin kaybolması uygulama mantığını etkilemediğinde cihaz normalde buluttan cihaza iletisini tamamlar. Bu tamamlama işlemine örnek olarak, cihaz ileti içeriğini yerel olarak kalıcı hale geldiğinde veya bir işlemi başarıyla yürütürken olabilir. İleti, kaybı uygulamanın işlevselliğini etkilemeyen geçici bilgiler de taşıyabilir. Bazen, uzun süre çalışan görevler için şunları yapabilirsiniz:

  • Cihaz görev açıklamasını yerel depolama alanında kalıcı hale geldikten sonra buluttan cihaza iletisini tamamlayın.

  • Görevin ilerlemesinin çeşitli aşamalarında bir veya daha fazla cihazdan buluta iletiyle çözüm arka ucunu bilgilendirin.

İleti süre sonu (yaşam süresi)

Her buluttan cihaza iletinin son kullanma süresi vardır. Bu süre aşağıdaki seçeneklerden biri tarafından ayarlanır:

  • Hizmetteki ExpiryTimeUtc özelliği
  • IoT hub özelliği olarak belirtilen varsayılan yaşam süresini kullanarak IoT hub'ı

İleti süre sonu hakkında daha fazla bilgi için bkz. Buluttan cihaza yapılandırma seçenekleri.

İleti süre sonu avantajından yararlanmanın ve bağlantısız cihazlara ileti gönderilmesini önlemenin yaygın yollarından biri , canlı değerlere kısa süre ayarlamaktır. Bu yaklaşım, cihaz bağlantı durumunu korumakla aynı sonucu elde eder, ancak daha verimlidir. İleti bildirimleri istediğinizde IoT hub'ı size hangi cihazların olduğunu bildirir:

  • İletiler alınabiliyor.
  • Çevrimiçi değil veya başarısız.

İleti geri bildirimi

Buluttan cihaza bir ileti gönderdiğinizde, hizmet bu iletinin son durumuyla ilgili ileti başına geri bildirimin teslimini isteyebilir. Aşağıdaki dört değerden birine gönderilen buluttan cihaza iletide iothub-ack uygulama özelliğini ayarlayarak ileti geri bildirimini yapılandırabilirsiniz:

Ack özellik değeri Davranış
yok Varsayılan. IoT hub'ı geri bildirim iletisi oluşturmaz.
pozitif Buluttan cihaza ileti Tamamlandı durumuna ulaşırsa IoT hub'ı bir geri bildirim iletisi oluşturur.
negatif Buluttan cihaza ileti , Teslim edilemeyen harf durumuna ulaşırsa IoT hub'ı bir geri bildirim iletisi oluşturur.
Tam IoT hub'ı her iki durumda da bir geri bildirim iletisi oluşturur.

Ack özellik değeri dolu olarak ayarlanırsa ve geri bildirim iletisi almazsanız, geri bildirim iletisinin süresi dolmuş demektir. Hizmet, özgün iletiye ne olduğunu bilmiyor. Uygulamada bir hizmet, süresi dolmadan önce geri bildirimi işleyebilmesini sağlamalıdır. En uzun süre sonu iki gündür ve bu da bir hata oluştuğunda hizmetin yeniden çalıştırılması için zaman bırakır.

Uç Noktalar'da açıklandığı gibi IoT hub'ı hizmete yönelik bir uç nokta (/messages/servicebound/feedback) aracılığıyla ileti olarak geri bildirim sağlar. Geri bildirim alma semantiği, buluttan cihaza iletilerle aynıdır. Mümkün olduğunda, ileti geri bildirimi aşağıdaki biçimde tek bir iletide toplu olarak oluşturulur:

Özellik Açıklama
EnqueuedTime Geri bildirim iletisinin hub tarafından ne zaman alındığını gösteren zaman damgası.
UserId {iot hub name}
Contenttype application/vnd.microsoft.iothub.feedback.json

Sistem, toplu iş 64 iletiye ulaştığında veya en son gönderilen iletiden 15 saniye içinde (hangisi önce olursa) geri bildirim gönderir.

Gövde, her biri aşağıdaki özelliklere sahip JSON serileştirilmiş bir kayıt dizisidir:

Özellik Açıklama
enqueuedTimeUtc İletinin sonucunun ne zaman gerçekleştiğini gösteren zaman damgası. Örneğin, hub'ın geri bildirim iletisini ne zaman aldığını veya özgün iletinin süresinin dolduğunu gösteren bir zaman damgası.
originalMessageId Bu geri bildirim bilgilerinin ilişkilendirildiği buluttan cihaza iletisinin MessageId değeri.
statusCode IoT hub'ı tarafından oluşturulan geri bildirim iletilerinde kullanılan gerekli dize:
Başarılı
Süresi Doldu
DeliveryCountExceeded
Reddedildi
Tasfiye
açıklama StatusCode için dize değerleri.
deviceId Bu geri bildirim parçasının ilişkili olduğu buluttan cihaza iletisinin hedef cihazının DeviceId değeri.
deviceGenerationId Bu geri bildirim parçasının ilişkili olduğu buluttan cihaza iletisinin hedef cihazının DeviceGenerationId değeri.

Buluttan cihaza iletisinin geri bildirimini özgün iletiyle ilişkilendirebilmesi için hizmetin bir MessageId belirtmesi gerekir.

Geri bildirim iletisinin gövdesi aşağıdaki kod örneğinde gösterilmiştir:

[
  {
    "originalMessageId": "0987654321",
    "enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
    "statusCode": "Success",
    "description": "Success",
    "deviceId": "123",
    "deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
  },
  {
    ...
  },
  ...
]

Silinen cihazlar için bekleyen geri bildirim

Bir cihaz silindiğinde bekleyen geri bildirimler de silinir. Cihaz geri bildirimi toplu olarak gönderilir. Genellikle bir saniyeden kısa olan dar bir pencere, bir cihazın iletinin alınmasını onaylaması ile bir sonraki geri bildirim toplu işleminin hazırlanması arasında gerçekleşebilir. Bir cihaz bu dar pencerede silinirse geri bildirim gerçekleşmez.

Cihazınızı silmeden önce bekleyen geri bildirimlerin gelmesi için bir süre bekleyerek bu davranışı giderebilirsiniz. Cihaz silindikten sonra ilgili ileti geri bildiriminin kaybolduğu varsayılmalıdır.

Buluttan cihaza yapılandırma seçenekleri

Her IoT hub'ı, buluttan cihaza mesajlaşma için aşağıdaki yapılandırma seçeneklerini kullanıma sunar:

Özellik Açıklama Aralık ve varsayılan
defaultTtlAsIso8601 Buluttan cihaza iletiler için varsayılan TTL İki güne kadar ISO_8601 aralık (en az bir dakika); varsayılan: bir saat
maxDeliveryCount Cihaz başına buluttan cihaza kuyruklar için maksimum teslim sayısı 1 ile 100; varsayılan: 10
feedback.ttlAsIso8601 Hizmete bağlı geri bildirim iletileri için bekletme İki güne kadar ISO_8601 aralık (en az bir dakika); varsayılan: bir saat
feedback.maxDeliveryCount Geri bildirim kuyruğu için maksimum teslim sayısı 1 ile 100; varsayılan: 10
feedback.lockDurationAsIso8601 Geri bildirim kuyruğu için kilit süresi 5 ile 300 saniye (en az beş saniye) arasında ISO_8601 aralık; varsayılan: 60 saniye.

Yapılandırma seçeneklerini aşağıdaki yollardan biriyle ayarlayabilirsiniz:

  • Azure portal: IoT hub'ınızdaki Hub ayarları'nınaltında Yerleşik uç noktalar'ı seçin ve Buluttan cihaza mesajlaşma'ya gidin. (feedback.maxDeliveryCount ve feedback.lockDurationAsIso8601 özelliklerinin ayarlanması şu anda Azure portal'de desteklenmemektedir.)

Portalda buluttan cihaza mesajlaşma için yapılandırma seçeneklerini ayarlama

  • Azure CLI: az iot hub update komutunu kullanın:

    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
    

Sonraki adımlar

Buluttan cihaza iletileri almak için kullanabileceğiniz SDK'lar hakkında bilgi için bkz. SDK'ları Azure IoT Hub.

Buluttan cihaza iletileri almayı denemek için Buluttan cihaza gönderme öğreticisine bakın.