eylemleri tetiklemek için 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-abonelik modeli kullanan tam olarak yönetilen bir olay yönlendirme hizmetidir. Event Grid azure işlevleri ve Azure Logic Appsgibi azure hizmetleri için yerleşik desteğe sahiptir ve web kancalarını kullanarak azure olmayan hizmetlere olay uyarıları sunabilir. Event Grid desteklediği olay işleyicilerinin tüm listesi için bkz. Azure Event Grid giriş.

Azure Event Grid mimarisi

Bölgesel kullanılabilirlik

Event Grid tümleştirme, Event Grid desteklendiği bölgelerde bulunan IoT Hub 'lar için kullanılabilir. Bölgelerin en son listesi için bkz. Azure Event Grid bir giriş.

Olay türleri

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

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

Her bir IoT Hub 'ından yayımlanacak olayları yapılandırmak için Azure portal ya da Azure CLı kullanın. Bir örnek için, Logic Apps kullanarak öğreticiyi Azure IoT Hub olayları hakkında e-posta bildirimleri göndermeöğreticisini deneyin.

Olay şeması

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

Cihaza bağlı şema

Aşağıdaki örnekte, bir cihaz bağlantılı olayını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 iletisi, kod sistemi özelliklerinde UTF-8 olarak ayarlanan ContentType ve Application/JSON olarak ayarlanmış geçerli bir JSON biçiminde olmalıdır. Bu özelliklerin her ikisi de büyük/küçük harfe duyarlıdır. İçerik kodlaması ayarlanmamışsa, IoT Hub iletileri temel 64 kodlu biçimde yazar.

Event Grid, uç noktayı Event Grid olarak seçerek cihaz telemetri olaylarını zenginleştirebilirsiniz. Daha fazla bilgi için bkz. Ileti zenginleştirme genel bakış.

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, bir cihaz oluşturulan olayını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ı

Bir cihaz oluşturma olayından ilişkili ikizi verileri , varsayılan bir yapılandırmadır ve yeni oluşturulan bir cihazdaki gerçek ve diğer cihaz özelliklerine güvenmemelidir authenticationType . authenticationTypeYeni oluşturulan bir cihazdaki ve diğer cihaz özellikleri için, Azure IoT SDK 'lerinde sunulan Register Manager API 'sini kullanın.

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

Olayları filtreleme

IoT Hub olay abonelikleri olayları, cihaz adı olan olay türüne, veri içeriğine ve konuya göre filtreleyebilir.

Event Grid olay türlerinde, konularla ve veri içeriklerinde filtrelemeye izin vermez. Event Grid aboneliğini oluştururken, seçili IoT olaylarına abone olmayı seçebilirsiniz. Event Grid iş (ön ek) Ile başlayan ve (son ek) ile biten konu filtreleri. Filtre bir işleç kullanır AND , bu nedenle hem önek hem de sonek ile eşleşen bir konuya sahip olaylar aboneye teslim edilir.

IoT olaylarının konusu şu biçimi kullanır:

devices/{deviceId}

Event Grid Ayrıca, veri içeriği de dahil olmak üzere her bir olayın özniteliklerine filtrelemeye izin verir. Bu, telemetri iletisinin temel içeriğini hangi olayların dağıttığı seçmenizi sağlar. Örnekleri görüntülemek için lütfen Gelişmiş filtreleme bölümüne bakın. Telemetri ileti gövdesinde filtreleme için, kod sistemi özelliklerindeContentType öğesini Application/JSON ve Contentenkodlamaya göre UTF-8 olarak ayarlamanız gerekir. Bu özelliklerin her ikisi de büyük/küçük harfe duyarlıdır.

DeviceConnected, DeviceConnected, DeviceCreated ve DeviceDeleted gibi telemetri olmayan olaylar için, abonelik oluşturulurken Event Grid filtrelemesi kullanılabilir. Telemetri olayları için, Event Grid ' deki filtrelemeye ek olarak, kullanıcılar da ileti yönlendirme sorgusu üzerinden cihaz iksi, ileti özellikleri ve gövdesinde filtre uygulayabilir.

Telemetri olaylarına Event Grid aracılığıyla abone olduğunuzda IoT Hub, veri kaynağı türü cihaz iletilerini Event Grid göndermek için varsayılan bir ileti yolu oluşturur. İleti yönlendirme hakkında daha fazla bilgi için bkz. IoT Hub Message Routing. Bu yol, portalda IoT Hub > Ileti yönlendirme altında görünür. Telemetri olayları için oluşturulan örnek aboneliklerin sayısından bağımsız olarak Event Grid yalnızca bir yol oluşturulur. Bu nedenle, farklı filtrelerle birkaç aboneliğe ihtiyacınız varsa, bu sorgularda veya işlecini aynı rotada kullanabilirsiniz. Yolun oluşturulması ve silinmesi, Event Grid aracılığıyla telemetri olaylarının abonelikle denetlenir. IoT Hub Ileti yönlendirmeyi kullanarak Event Grid için bir yol oluşturamaz veya silemezsiniz.

Telemetri verileri gönderilmeden önce iletileri filtrelemek için yönlendirme sorgunuzugüncelleştirebilirsiniz. Yönlendirme sorgusunun ileti gövdesine yalnızca gövde JSON olduğunda uygulanabileceğini unutmayın. İleti sistemi özelliklerindeContentType öğesini Application/JSON ve Contentenkodlamaya de UTF-8 olarak ayarlamanız gerekir.

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

Cihaz bağlantısı durum olaylarını almak için bir cihazın cihazdan buluta gönderme telemetrisi veya IoT Hub ile buluttan cihaza alma iletisi işlemi çağırması gerekir. Ancak, bir cihaz IoT Hub ile bağlantı kurmak için AMQP protokolünü kullanıyorsa, cihazın buluttan cihaza alma iletisi işlemi çağırmasını öneririz, aksi takdirde bağlantı durumu bildirimleri birkaç dakika geciktirilebilir. Cihazınız MQTT protokolüyle bağlanıyorsa IoT Hub, buluttan cihaza bağlantıyı açık tutar. AMQP için buluttan cihaza bağlantıyı açmak için, zaman uyumsuz API al' ı çağırın.

Cihaz telemetri gönderdiği sürece cihazdan buluta bağlantısı açık kalır.

Bir cihaz sıklıkla bağlanıp bağlantıyı keserse, IoT Hub her bir bağlantı durumunu göndermez, ancak geçerli bağlantı durumunu 60sec 'in düzenli bir anlık görüntüsüne yayınlar. Aynı bağlantı durumu olayını farklı sıra numaralarıyla veya farklı bağlantı durumu olaylarıyla alma, cihaz bağlantı durumunda bir değişiklik olduğu anlamına gelir.

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 ' i kontrol edin.

  • İletiler karışık sırayla veya bir gecikmeden sonra gelebilir. Nesneler hakkındaki bilgilerinizin, cihaz oluşturma veya cihaz silinen olayları için güncel olup olmadığını anlamak için ETag alanını kullanın.

Sonraki adımlar