Aracılığıyla paylaş


Eylemleri tetikleme amacıyla Event Grid kullanarak IoT Hub olaylarına tepki verme

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 kapsamında olmayan hizmetlere olay uyarıları gönderebilir. Event Grid'in desteklediği olay işleyicilerinin tam listesi için bkz . Azure Event Grid'e giriş.

Bu tümleştirmeyi tartışan bir video izlemek için bkz . Azure Event Grid ile Azure IoT Hub tümleştirmesi.

Diagram that shows Azure Event Grid architecture.

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ölgeye göre kullanılabilir ürünler.

Olay tipleri

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 IoT Hub’ından bir cihaz 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’ından 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ını veya Azure CLI'yi 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şlayıp başlamadığını denetleyerek ioT Hub olayını tanımlayabilirsiniz. Event Grid olay özelliklerini kullanma hakkında daha fazla bilgi için bkz . Event Grid olay şeması.

Cihaza bağlı şema

Aşağıdaki örnekte, cihaza bağlı bir olayın şeması gösterilmektedir:

[{  
  "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, contentEncoding ise ileti sistemi özelliklerinde UTF-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 tabanlı 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 örnekte, cihaz tarafından oluşturulan olayın şeması gösterilmektedir:

[{
  "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. authenticationType Yeni 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 olaylarının konusu cihaz adıdır. Konu biçimindedir devices/{deviceId}. Konuları Başlangıç (ön ek) ve Bitiş Tarihi (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 ileti 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.

Cihaz telemetri olayları için IoT Hub, aboneliği temel alarak RouteToEventGrid adlı varsayılan ileti yolunu oluşturur. Telemetri verileri gönderilmeden önce iletileri filtrelemek için yönlendirme sorgusunu güncelleştirin.

Cihaz bağlantı durumu olayları için sınırlamalar

MQTT veya AMQP protokolü veya WebSockets üzerinden bu protokollerden birini kullanarak bağlanan cihazlar için cihaz bağlı ve cihaz bağlantısı kesilmiş olaylar kullanılabilir. Yalnızca HTTPS ile yapılan istekler cihaz bağlantı durumu bildirimlerini tetiklemez.

Event Grid ile cihaz durumunu izleme hakkında bilgi için bkz . Cihaz bağlantı durumunu izleme.

Cihaz bağlantı durumu aralığı

IoT Hub her cihaz bağlantı durumu değişiklik olayını bildirmeye çalışır, ancak bazıları kaçırılabilir. IoT Hub en azından birbirinden 60 saniye uzakta gerçekleşen bağlantı durumu değişiklik olaylarını raporlar. Bu davranış, aralarında hiçbir cihaz bağlantısı olayı olmadan bildirilen birden çok cihaz bağlantısı olayı gibi sonuçlara yol açabilir.

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’ı kontrol edin.
  • İ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