Menanggapi kejadian IoT Hub menggunakan Event Grid untuk memicu tindakan

Azure IoT Hub terintegrasi dengan Azure Event Grid, sehingga pengguna dapat mengirim notifikasi kejadian ke layanan lain dan memicu proses hilir. Konfigurasikan aplikasi bisnis Anda untuk mendengarkan kejadian IoT Hub sehingga Anda dapat menanggapi kejadian penting dengan cara yang andal, dapat diskalakan, dan aman. Misalnya, bangun aplikasi yang memperbarui database, membuat tiket kerja, dan mengirimkan pemberitahuan email setiap kali perangkat IoT baru didaftarkan ke hub IoT Anda.

Azure Event Grid adalah layanan perutean kejadian yang dikelola penuh yang menggunakan model publikasi-berlangganan. Event Grid memiliki dukungan bawaan untuk layanan Azure seperti Azure Functions dan Azure Logic Apps, dan dapat memberikan pemberitahuan kejadian ke layanan non-Azure menggunakan webhook. Untuk daftar lengkap handler peristiwa yang didukung Event Grid, lihat Pengenalan Azure Event Grid.

Untuk menonton video yang mengulas integrasi ini, lihat integrasi Azure IoT Hub dengan Azure Event Grid.

Diagram that shows Azure Event Grid architecture.

Ketersediaan regional

Integrasi Event Grid tersedia untuk hub IoT yang terletak di wilayah tempat Event Grid didukung. Untuk melihat daftar wilayah terbaru, baca Produk yang tersedia menurut wilayah.

Tipe peristiwa

Azure IoT Hub menerbitkan jenis kejadian berikut:

Jenis peristiwa Deskripsi
Microsoft.Devices.DeviceCreated Diterbitkan saat perangkat didaftarkan ke hub IoT.
Microsoft.Devices.DeviceDeleted Diterbitkan saat perangkat dihapus dari hub IoT.
Microsoft.Devices.DeviceConnected Diterbitkan saat perangkat disambungkan ke hub IoT.
Microsoft.Devices.DeviceDisconnected Diterbitkan saat perangkat terputus sambungannya dari hub IoT.
Microsoft.Devices.DeviceTelemetry Diterbitkan saat pesan telemetri dikirim ke hub IoT

Gunakan portal Microsoft Azure atau Azure CLI untuk mengonfigurasi kejadian mana yang akan diterbitkan dari setiap hub IoT. Misalnya, coba tutorial Mengirim pemberitahuan email tentang kejadian Azure IoT Hub menggunakan Azure Logic Apps.

Skema peristiwa

Kejadian Azure IoT Hub berisi semua informasi yang Anda perlukan untuk merespons perubahan dalam siklus hidup perangkat Anda. Anda dapat mengidentifikasi kejadian IoT Hub dengan memeriksa apakah properti eventType dimulai dengan Microsoft.Devices. Untuk informasi selanjutnya tentang cara menggunakan properti kejadian Event Grid, lihat skema kejadian Event Grid.

Skema yang tersambung dengan perangkat

Contoh berikut menunjukkan skema kejadian yang tersambung perangkat:

[{  
  "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"
}]

Skema telemetri perangkat

Pesan telemetri perangkat harus disajikan dalam format JSON yang valid dengan contentType diatur ke application/json dan contentEncoding diatur ke UTF-8 di properti sistem pesan. Kedua properti ini tidak peka huruf besar/kecil. Jika pengodean konten tidak diatur, maka IoT Hub menulis pesan dalam format berkode base 64.

Anda dapat memperkaya peristiwa telemetri perangkat sebelum dipublikasikan ke Event Grid dengan memilih titik akhir sebagai Event Grid. Untuk mengetahui informasi selengkapnya, baca pengayaan pesan.

Contoh berikut menunjukkan skema kejadian telemetri perangkat:

[{  
  "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"
}]

Skema yang dibuat perangkat

Contoh berikut menunjukkan skema kejadian yang dibuat perangkat:

[{
  "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"
}]

Peringatan

Data kembar yang terkait dengan peristiwa pembuatan perangkat adalah konfigurasi default dan tidak boleh diandalkan untuk properti perangkat aktual authenticationType dan lainnya di perangkat yang baru dibuat. Untuk authenticationType dan properti perangkat lainnya di perangkat yang baru dibuat, gunakan daftarkan pengelola API yang tersedia di SDK Azure IoT.

Untuk deskripsi terperinci dari setiap properti, lihat Skema kejadian Azure Event Grid untuk IoT Hub.

Memfilter kejadian

Event Grid dapat digunakan untuk memfilter jenis kejadian, subjek, dan konten data. Saat membuat langganan Event Grid, Anda dapat memilih untuk berlangganan kejadian IoT yang dipilih.

  • Jenis kejadian: Untuk melihat jenis kejadian IoT Hub, baca jenis kejadian.
  • Subjek: Untuk kejadian IoT Hub, subjeknya adalah nama perangkat. Subjek mengambil format devices/{deviceId}. Anda dapat memfilter subjek berdasarkan kecocokan Diawali dengan (awalan) dan Diakhiri dengan (akhiran). Filter menggunakan operator AND, sehingga kejadian dengan subjek yang cocok dengan awalan dan akhiran dikirimkan kepada pelanggan.
  • Konten data: Konten data diisi oleh IoT Hub menggunakan format pesan tersebut. Anda dapat memilih jenis kejadian yang dikirimkan berdasarkan konten pesan telemetri. Sebagai contoh, baca pemfilteran tingkat lanjut. Untuk memfilter pada isi pesan telemetri, Anda harus mengatur contentType menjadi application/json dan contentEncoding menjadi UTF-8 di properti sistem pesan. Kedua properti ini tidak peka huruf besar/kecil.

Untuk peristiwa telemetri perangkat, IoT Hub akan membuat rute pesan default yang disebut RouteToEventGrid berdasarkan langganan. Untuk memfilter pesan sebelum data telemetri dikirim, perbarui kueri perutean.

Batasan untuk peristiwa status sambungan perangkat

Peristiwa perangkat yang terhubung dan perangkat terputus tersedia untuk perangkat yang terhubung menggunakan protokol MQTT atau AMQP, atau menggunakan salah satu protokol ini melalui WebSocket. Permintaan yang dibuat hanya dengan HTTPS tidak akan memicu pemberitahuan status koneksi perangkat.

Untuk informasi tentang memantau status perangkat dengan Event Grid, lihat Memantau status koneksi perangkat.

Interval status koneksi perangkat

IoT Hub mencoba melaporkan setiap peristiwa perubahan status koneksi perangkat, tetapi beberapa mungkin terlewatkan. Minimal, IoT Hub melaporkan peristiwa perubahan status koneksi yang terjadi 60 detik terpisah satu sama lain. Perilaku ini dapat menyebabkan hasil seperti beberapa peristiwa koneksi perangkat yang dilaporkan tanpa perangkat memutuskan peristiwa di antara mereka.

Tips untuk menggunakan kejadian

Aplikasi yang menangani kejadian IoT Hub harus mengikuti praktik yang disarankan ini:

  • Beberapa langganan dapat dikonfigurasi untuk merutekan kejadian ke penanganan aktivitas yang sama, sehingga jangan anggap kejadian berasal dari sumber tertentu. Selalu periksa topik pesan untuk memastikan bahwa itu berasal dari hub IoT yang Anda harapkan.
  • Jangan berasumsi bahwa semua kejadian yang Anda terima adalah jenis yang Anda harapkan. Selalu periksa eventType sebelum memproses pesan.
  • Pesan dapat diterima tidak sesuai urutan atau setelah penundaan. Gunakan bidang etag untuk memahami apakah informasi Anda tentang objek sudah diperbarui untuk kejadian yang dibuat perangkat atau yang dihapus perangkat.

Langkah berikutnya