Bagikan melalui


Bereaksi terhadap peristiwa IoT Hub dengan 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 peristiwa yang dikelola sepenuhnya 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 penanganan aktivitas yang didukung Event Grid, lihat Apa itu Azure Event Grid?.

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

Diagram yang memperlihatkan arsitektur Azure Event Grid.

Ketersediaan regional

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

Jenis peristiwa

Azure IoT Hub menerbitkan jenis kejadian berikut:

Jenis peristiwa Deskripsi
Microsoft.Devices.DeviceCreated Diterbitkan saat perangkat didaftarkan ke hub IoT.
Microsoft.Devices.PerangkatDihapus 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 perangkat 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 Kirim pemberitahuan email tentang peristiwa Azure IoT Hub menggunakan Event Grid dan Logic Apps.

Skema peristiwa

Peristiwa IoT Hub mencakup semua informasi yang Anda butuhkan untuk merespons perubahan dalam siklus hidup perangkat Anda. Anda dapat mengidentifikasi peristiwa IoT Hub dengan memeriksa apakah properti eventType dimulai dengan Microsoft.Devices. Untuk informasi selengkapnya tentang cara menggunakan properti peristiwa Event Grid, lihat Skema peristiwa Azure Event Grid.

Skema perangkat terhubung

Contoh berikut menunjukkan skema peristiwa perangkat yang terhubung:

[{  
  "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 dalam format JSON yang valid dengan contentType dan contentEncoding masing-masing diatur ke application/json dan 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 informasi selengkapnya, lihat Pengayaan pesan untuk pesan perangkat ke cloud IoT Hub.

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 oleh 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 API manajer register yang disediakan di Azure IoT SDK.

Untuk detail deskripsi setiap properti, lihat Azure IoT Hub sebagai sumber Event Grid.

Filter peristiwa

Event Grid memungkinkan pemfilteran pada jenis peristiwa, subjek, dan konten data. Saat membuat langganan Event Grid, Anda dapat memilih untuk berlangganan kejadian IoT yang dipilih.

  • Jenis peristiwa: Untuk daftar jenis peristiwa IoT Hub, lihat Jenis peristiwa.
  • Subjek: Untuk peristiwa IoT Hub, subjeknya adalah nama perangkat. Subjek mengikuti format devices/{deviceId}. Anda dapat memfilter subjek berdasarkan kecocokan Begins With (prefiks) dan Ends With (akhiran). Filter menggunakan operator AND, sehingga peristiwa yang memiliki subjek yang sesuai dengan awalan dan akhiran dikirimkan kepada subscriber.
  • Konten data: IoT Hub mengisi konten data menggunakan format pesan. Anda dapat memilih peristiwa apa yang dikirimkan berdasarkan konten pesan telemetri. Misalnya, lihat Pemfilteran tingkat lanjut. Untuk pemfilteran pada isi pesan telemetri, Anda harus mengatur contentType ke application/json dan contentEncoding ke UTF-8 di properti sistem pesan. Kedua properti ini tidak peka terhadap perbedaan huruf besar/kecil.

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

Batasan untuk peristiwa status koneksi perangkat

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

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

Interval status konektivitas 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 peristiwa pemutusan sambungan perangkat di antara mereka.

Tips untuk menghadiri acara

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 peristiwa yang melibatkan pembuatan perangkat atau penghapusan perangkat.

Langkah berikutnya