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 nedir?.

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

Azure Event Grid mimarisini gösteren diyagram.

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 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 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.Cihazlar.CihazBağlantısıKesildi Bir cihazın IoT Hub’ından bağlantısı kesildiğinde yayımlanır.
Microsoft.Devices.DeviceTelemetry IoT hub'ına bir 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, Event Grid ve 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. Azure 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, ileti sistemi özelliklerinde contentType application/json ve contentEncoding 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 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. Cihazdan buluta IoT Hub iletileri için ileti 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. Yeni oluşturulan bir cihazdaki authenticationType 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 Event Grid kaynağı olarak Azure IoT Hub'a bakın.

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 şu formattadır devices/{deviceId}. Konuları Başlangıç ile (önek) ve Bitiş ile (son ek) eşleşmelerine göre filtreleyebilirsiniz. Filtre bir AND işleci kullandığından, konusu hem ön ek hem de sonekle eşleşen etkinlikler aboneye teslim edilir.
  • Veri içeriği: IoT Hub, ileti biçimini kullanarak veri içeriğini doldurur. 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ıyla ilgili 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 daha fazla 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ının kesilmesi olayı olmadan bildirilen birden çok cihaz bağlantısı olayı gibi sonuçlara yol açabilir.

Olayları takip etme 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 sırasız veya gecikmeli 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