Eylemleri tetikleme amacıyla Event Grid kullanarak olayları IoT Hub React

Azure IoT Hub, Azure Event Grid ile tümleştirilerek diğer hizmetlere olay bildirimleri göndermenizi ve aşağı akış işlemleri tetiklemenizi sağlar. Kritik olaylara güvenilir, ölçeklenebilir ve güvenli bir şekilde yanıt vermek için, iş uygulamalarınızı IoT Hub olaylarını dinleyecek şekilde yapılandırın. Örneğin, bir veritabanını güncelleştiren, bir iş bileti oluşturan ve IoT Hub’ınıza yeni bir IoT cihazı her kaydedildiğinde bir e-posta bildirimi gönderen bir uygulama oluşturun.

Azure Event Grid, yayımlama-abone olma modeli kullanan tam olarak yönetilen bir olay yönlendirme hizmetidir. Event Grid, Azure İşlevleri ve Azure Logic Apps gibi Azure hizmetleri için yerleşik desteğe sahiptir ve web kancalarını kullanarak Azure dışı hizmetlere olay uyarıları sunabilir. Event Grid'in desteklediği olay işleyicilerinin tam listesi için bkz. Azure Event Grid giriş.

Bu tümleştirmeyi ele alan bir video izlemek için bkz. Azure Event Grid ile Azure IoT Hub tümleştirme.

Azure Event Grid mimarisi

Bölgesel kullanılabilirlik

Event Grid tümleştirmesi, Event Grid'in desteklendiği bölgelerde bulunan IoT hub'larında kullanılabilir. Bölgelerin en son listesi için bkz. Bölgelere göre kullanılabilir ürünler.

Olay türleri

IoT Hub aşağıdaki olay türlerini yayımlar:

Olay türü Açıklama
Microsoft.Devices.DeviceCreated Bir cihaz IoT hub'ına kaydedildiğinde yayımlanır.
Microsoft.Devices.DeviceDeleted Bir cihaz IoT hub'ından silindiğinde yayımlanır.
Microsoft.Devices.DeviceConnected Bir cihaz IoT hub'ına bağlandığında yayımlanır.
Microsoft.Devices.DeviceDisconnected Bir cihazın IoT hub bağlantısı kesildiğinde yayımlanır.
Microsoft.Devices.DeviceTelemetry Bir IoT Hub’ına cihaz telemetri iletisi gönderildiğinde yayımlanır

Her IoT hub'ından yayımlayacak olayları yapılandırmak için Azure portal veya Azure CLI kullanın. Örneğin Logic Apps kullanarak Azure IoT Hub olayları hakkında e-posta bildirimleri gönderme öğreticisini deneyin.

Olay şeması

IoT Hub olaylar, cihaz yaşam döngünüzdeki değişikliklere yanıt vermek için ihtiyacınız olan tüm bilgileri içerir. eventType özelliğinin Microsoft.Devices ile başladığını denetleyerek IoT Hub olayını belirleyebilirsiniz. Event Grid olay özelliklerini kullanma hakkında daha fazla bilgi için bkz. Event Grid olay şeması.

Cihaza bağlı şema

Aşağıdaki örnek, cihaz bağlı olayının şemasını gösterir:

[{  
  "id": "f6bbf8f4-d365-520d-a878-17bf7238abd8",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceConnected",
  "eventTime": "2018-06-02T19:17:44.4383997Z",
  "data": {
      "deviceConnectionStateEventInfo": {
        "sequenceNumber":
          "000000000000000001D4132452F67CE200000002000000000000000000000001"
      },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice",
    "moduleId" : "DeviceModuleID",
  }, 
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Cihaz telemetri şeması

Cihaz telemetri iletileri, contentType değeri application/json ve contentEncoding değeri ileti sistemi özelliklerindeUTF-8 olarak ayarlanmış geçerli bir JSON biçiminde olmalıdır. Bu özelliklerin her ikisi de büyük/küçük harfe duyarlı değildir. İçerik kodlaması ayarlanmadıysa, IoT Hub iletileri 64 tabanında kodlanmış biçimde yazar.

Uç noktayı Event Grid olarak seçerek cihaz telemetri olaylarını Event Grid'de yayımlanmadan önce zenginleştirebilirsiniz. Daha fazla bilgi için bkz. İleti zenginleştirmeleri.

Aşağıdaki örnekte bir cihaz telemetri olayının şeması gösterilmektedir:

[{  
  "id": "9af86784-8d40-fe2g-8b2a-bab65e106785",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceTelemetry",
  "eventTime": "2019-01-07T20:58:30.48Z",
  "data": {
      "body": {
          "Weather": {
              "Temperature": 900
            },
            "Location": "USA"
        },
        "properties": {
            "Status": "Active"
        },
        "systemProperties": {
          "iothub-content-type": "application/json",
          "iothub-content-encoding": "utf-8",
          "iothub-connection-device-id": "d1",
          "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
          "iothub-connection-auth-generation-id": "123455432199234570",
          "iothub-enqueuedtime": "2019-01-07T20:58:30.48Z",
          "iothub-message-source": "Telemetry"
        }
  },
  "dataVersion": "",
  "metadataVersion": "1"
}]

Cihaz tarafından oluşturulan şema

Aşağıdaki örnek, cihaz tarafından oluşturulan olayın şemasını gösterir:

[{
  "id": "56afc886-767b-d359-d59e-0da7877166b2",
  "topic": "/SUBSCRIPTIONS/<subscription ID>/RESOURCEGROUPS/<resource group name>/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/<hub name>",
  "subject": "devices/LogicAppTestDevice",
  "eventType": "Microsoft.Devices.DeviceCreated",
  "eventTime": "2018-01-02T19:17:44.4383997Z",
  "data": {
    "twin": {
      "deviceId": "LogicAppTestDevice",
      "etag": "AAAAAAAAAAE=",
      "deviceEtag":"null",
      "status": "enabled",
      "statusUpdateTime": "0001-01-01T00:00:00",
      "connectionState": "Disconnected",
      "lastActivityTime": "0001-01-01T00:00:00",
      "cloudToDeviceMessageCount": 0,
      "authenticationType": "sas",
      "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
      },
      "version": 2,
      "properties": {
        "desired": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        },
        "reported": {
          "$metadata": {
            "$lastUpdated": "2018-01-02T19:17:44.4383997Z"
          },
          "$version": 1
        }
      }
    },
    "hubName": "egtesthub1",
    "deviceId": "LogicAppTestDevice"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

Uyarı

Cihaz oluşturma olayıyla ilişkili ikiz verileri varsayılan bir yapılandırmadır ve yeni oluşturulan bir cihazdaki gerçek authenticationType ve diğer cihaz özelliklerine bağlı olmamalıdır. Yeni authenticationType oluşturulan bir cihazdaki ve diğer cihaz özellikleri için Azure IoT SDK'larında sağlanan yazmaç yöneticisi API'sini kullanın.

Her özelliğin ayrıntılı açıklaması için bkz. IoT Hub için Azure Event Grid olay şeması.

Olayları filtreleme

Event Grid olay türleri, konular ve veri içeriği üzerinde filtrelemeyi etkinleştirir. Event Grid aboneliğini oluştururken seçili IoT olaylarına abone olmayı seçebilirsiniz.

  • Olay türü: IoT Hub olay türlerinin listesi için bkz. olay türleri.
  • Konu: IoT Hub olaylarda konu cihaz adıdır. Konu biçimindedir devices/{deviceId}. Konuları Şununla Başlar (ön ek) ve Şununla Biter (sonek) eşleşmelerine göre filtreleyebilirsiniz. Filtre bir AND işleç kullandığından, hem ön ek hem de sonekle eşleşen bir konuya sahip olaylar aboneye teslim edilir.
  • Veri içeriği: Veri içeriği, ileti biçimi kullanılarak IoT Hub tarafından doldurulur. Telemetri iletisinin içeriğine göre hangi olayların teslimileceğini seçebilirsiniz. Örnekler için bkz. gelişmiş filtreleme. Telemetri iletisi gövdesinde filtreleme yapmak için, ileti sistemi özelliklerinde contentType değerini application/json ve contentEncoding değerini UTF-8 olarak ayarlamanız gerekir. Bu özelliklerin her ikisi de büyük/küçük harfe duyarlı değildir.

Cihazla bağlandı ve cihaz bağlantısı kesildi olaylarına ilişkin sınırlamalar

Cihaz durumu olayları

Cihaz bağlantı durumu olayları, MQTT veya AMQP protokolü kullanılarak ya da WebSockets üzerinden bu protokollerden birini kullanarak bağlanan cihazlar için kullanılabilir. Yalnızca HTTPS ile yapılan istekler cihaz bağlantı durumu bildirimlerini tetiklemez.

  • MQTT protokolüyle Java, Node veya Python Azure IoT SDK'larını kullanarak bağlanan cihazlarda bağlantı durumları otomatik olarak gönderilir.
  • AMQP protokolüyle Java, Node veya Python Azure IoT SDK'larını kullanarak bağlanan cihazlarda, doğru bağlantı durumlarındaki gecikmeleri azaltmak için buluttan cihaza bağlantı oluşturulmalıdır.
  • .NET Azure IoT SDK'sını kullanarak MQTT veya AMQP protokolüyle bağlanan cihazlar, ilk cihazdan buluta veya buluttan cihaza ileti gönderilene/alınana kadar cihaza bağlı olay göndermez.
  • Azure IoT SDK'ları dışında, MQTT'de bu işlemler uygun mesajlaşma konularındaki ABONE Olma veya YAYıMLAMA işlemlerine eşit olur. AMQP üzerinden bunlar , uygun bağlantı yollarına ileti eklemeye veya aktarmaya yeterlidir.

Cihaz durumu aralığı

IoT Hub her bir cihaz bağlanma ve bağlantıyı kesme eylemini raporlamaz, bunun yerine düzenli olarak 60 saniyelik anlık görüntüde alınan geçerli bağlantı durumunu yayımlar. Farklı sıra numaraları veya farklı bağlantı durumu olaylarıyla aynı bağlantı durumu olayının alınması, 60 saniyelik pencere sırasında cihaz bağlantı durumunda bir değişiklik olduğu anlamına gelir. image

Olayları kullanma ipuçları

IoT Hub olaylarını işleyen uygulamalar aşağıdaki önerilen yöntemleri izlemelidir:

  • Birden çok abonelik, olayları aynı olay işleyicisine yönlendirmek üzere yapılandırılabilir, bu nedenle olayların belirli bir kaynaktan olduğunu varsaymayın. Beklediğiniz IoT Hub’ından geldiğinden emin olmak için ileti konusunu her zaman denetleyin.
  • Aldığınız tüm olayların beklediğiniz türler olduğunu varsaymayın. İletiyi işlemeden önce her zaman eventType'ını denetleyin.
  • İletiler karışık sırayla veya bir gecikmeden sonra gelebilir. Nesneler hakkındaki bilgilerinizin cihaz tarafından oluşturulan veya cihaz tarafından silinen olaylar için güncel olup olmadığını anlamak için etag alanını kullanın.

Sonraki adımlar