Gunakan jembatan perangkat IoT Central untuk menyambungkan cloud IoT lainnya ke IoT Central

Jembatan perangkat IoT Central adalah solusi sumber terbuka yang menghubungkan cloud IoT lainnya seperti Sigfox, Particle Device Cloud, dan The Things Network ke aplikasi IoT Central Anda. Jembatan perangkat bekerja dengan meneruskan data dari perangkat yang tersambung ke cloud IoT lain ke aplikasi IoT Central Anda. Jembatan perangkat hanya meneruskan data ke IoT Central, tidak mengirim perintah atau pembaruan properti dari IoT Central kembali ke perangkat.

Jembatan perangkat memungkinkan Anda menggabungkan kekuatan IoT Central dengan perangkat seperti:

  • Perangkat pelacakan aset yang terhubung ke jaringan area luas berdaya rendah Sigfox.
  • Perangkat pemantauan kualitas udara di Particle Device Cloud.
  • Perangkat pemantauan kelembaban tanah di The Things Network.

Anda dapat menggunakan fitur aplikasi IoT Central seperti aturan dan analitik pada data, membuat alur kerja di Power Automate dan aplikasi Logika Azure, atau mengekspor data.

Solusi jembatan perangkat menyediakan beberapa sumber daya Azure ke dalam langganan Azure yang bekerja sama untuk mengubah dan meneruskan pesan perangkat ke IoT Central.

Prasyarat

Untuk menyelesaikan langkah-langkah di panduan penggunaan ini, Anda memerlukan:

Gambaran Umum

Jembatan perangkat IoT Central adalah solusi sumber terbuka di GitHub. Jembatan perangkat ini menggunakan templat Azure Resource Manager kustom untuk menyebarkan beberapa sumber daya ke langganan Azure Anda, termasuk aplikasi fungsi di Azure Functions.

Aplikasi fungsi adalah bagian inti dari jembatan perangkat. Aplikasi ini menerima permintaan POST HTTP dari platform IoT lainnya melalui webhook sederhana. Repositori Perangkat Jembatan Azure IoT Central menyertakan contoh yang menunjukkan cara menyambungkan cloud Sigfox, Particle, dan The Things Network. Anda dapat memperluas solusi ini agar tersambung ke cloud IoT kustom jika platform Anda dapat mengirim permintaan HTTP POST ke aplikasi fungsi Anda.

Aplikasi fungsi mengubah data menjadi format yang diterima oleh IoT Central dan meneruskannya menggunakan layanan provisi perangkat dan API klien perangkat:

Screenshot of an Azure Functions definition showing the code.

Jika aplikasi IoT Central Anda mengenali ID perangkat dalam pesan yang diteruskan, telemetri dari perangkat akan muncul di IoT Central. Jika aplikasi IoT Central Anda tidak mengenali ID perangkat, aplikasi fungsi mencoba mendaftarkan perangkat baru dengan ID perangkat. Perangkat baru muncul sebagai perangkat Yang Tidak Ditetapkan di halaman Perangkat di aplikasi IoT Central Anda. Dari halaman Perangkat , Anda dapat menetapkan perangkat baru ke templat perangkat lalu melihat telemetri.

Menyebarkan jembatan perangkat

Untuk menyebarkan jembatan perangkat ke langganan Anda:

  1. Di aplikasi IoT Central Anda, navigasikan ke halaman Grup koneksi Perangkat Izin>.

    1. Catat nilai Cakupan ID. Anda menggunakan nilai ini saat menyebarkan jembatan perangkat.

    2. Di halaman yang sama, buka grup pendaftaran SAS-IoT-Devices. Pada halaman grup SAS-IoT-Devices, salin Kunci primer. Anda menggunakan nilai ini saat menyebarkan jembatan perangkat.

  2. Gunakan tombol Sebarkan ke Azure berikut untuk membuka templat Resource Manager kustom yang menyebarkan aplikasi fungsi ke langganan Anda. Gunakan Cakupan ID dan Kunci primer dari langkah sebelumnya:

    Deploy to Azure Button

Setelah penyebaran selesai, Anda perlu menginstal paket npm yang diperlukan fungsi:

  1. Di portal Azure, buka aplikasi fungsi yang disebarkan ke langganan Anda. Kemudian, buka Alat Pengembangan>Konsol. Di konsol, jalankan perintah berikut untuk memasang paket:

    cd IoTCIntegration
    npm install
    

    Perintah ini mungkin perlu waktu beberapa menit untuk dijalankan. Anda dapat mengabaikan pesan peringatan apa pun dengan aman.

  2. Setelah penginstalan paket selesai, Pilih Mulai Ulang pada halaman Gambaran Umum aplikasi fungsi:

    Screenshot that shows the restart option in Azure Functions.

  3. Fungsi ini sekarang siap digunakan. Sistem eksternal dapat menggunakan permintaan POST HTTP untuk mengirim data perangkat melalui jembatan perangkat ke aplikasi IoT Central Anda. Untuk mendapatkan URL fungsi, navigasi ke Functions > IoTCIntegration > Code + Test > Get function URL:

    Screenshot that shows the get function URL in Azure Functions.

Isi pesan yang dikirim ke jembatan perangkat harus memiliki format berikut:

"device": {
  "deviceId": "my-cloud-device"
},
"measurements": {
  "temp": 20.31,
  "pressure": 50,
  "humidity": 8.5,
  "ledColor": "blue"
}

Setiap kunci dalam objek measurements harus cocok dengan nama jenis telemetri dalam templat perangkat di aplikasi IoT Central. Solusi ini tidak mendukung menentukan ID antarmuka dalam isi pesan. Jadi, jika dua antarmuka yang berbeda memiliki jenis telemetri dengan nama yang sama, pengukuran muncul di kedua aliran telemetri di aplikasi IoT Central Anda.

Anda dapat menyertakan bidang timestamp dalam isi untuk menentukan tanggal dan waktu UTC pesan. Bidang ini harus dalam format ISO 8601. Contohnya, 2020-06-08T20:16:54.602Z. Jika Anda tidak menyertakan tanda waktu, tanggal dan waktu saat ini akan digunakan.

Anda dapat menyertakan bidang modelId dalam isi. Gunakan bidang ini untuk menetapkan perangkat ke templat perangkat selama provisi.

deviceId harus alfanumerik, huruf kecil, dan dapat mengandung tanda hubung.

Jika Anda tidak menyertakan modelId bidang , atau jika IoT Central tidak mengenali ID model, maka pesan dengan yang tidak dikenali deviceId membuat perangkat baru yang tidak ditetapkan di IoT Central. Operator dapat memigrasikan perangkat secara manual ke templat perangkat yang benar. Untuk mempelajari selengkapnya, lihat Mengelola perangkat di aplikasi > Azure IoT Central Anda Memigrasikan perangkat ke templat.

Catatan

Hingga perangkat ditetapkan ke templat, semua panggilan HTTP ke fungsi mengembalikan status kesalahan 403.

Untuk mengaktifkan pengelogan untuk aplikasi fungsi dengan Application Insights, navigasikan ke Log Pemantauan > di aplikasi fungsi Anda di portal Azure. Pilih Aktifkan Application Insights.

Sumber daya yang diprovisikan

Templat Resource Manager memprovisikan sumber daya berikut ini di langganan Azure Anda:

  • Aplikasi Fungsi
  • Paket App Service
  • Akun Penyimpanan
  • Brankas kunci

Brankas kunci menyimpan kunci grup SAS untuk aplikasi IoT Central Anda.

Aplikasi fungsi berjalan pada paket konsumsi. Meskipun opsi ini tidak menawarkan sumber daya komputasi khusus, opsi ini memungkinkan jembatan perangkat untuk menangani ratusan pesan perangkat per menit, cocok untuk armada perangkat yang lebih kecil atau perangkat yang lebih jarang mengirim pesan. Jika aplikasi Anda bergantung pada streaming sejumlah besar pesan perangkat, ganti paket konsumsi dengan paket layanan Aplikasi khusus. Paket ini menawarkan sumber daya komputasi khusus, yang memberikan waktu respons server yang lebih cepat. Dengan Paket App Service standar, performa maksimum fungsi yang diamati dari Azure di repositori ini adalah sekitar 1.500 pesan perangkat per menit. Untuk mempelajari selengkapnya, lihat Opsi hosting Azure Functions.

Untuk menggunakan paket App Service khusus alih-alih paket konsumsi, edit templat kustom sebelum menyebarkan. Pilih Edit templat.

Screenshot that shows the edit template option for an Azure Resource Manager template.

Ganti segmen berikut:

{
  "type": "Microsoft.Web/serverfarms",
  "apiVersion": "2015-04-01",
  "name": "[variables('planName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "name": "[variables('planName')]",
    "computeMode": "Dynamic",
    "sku": "Dynamic"
  }
},

dengan

{
  "type": "Microsoft.Web/serverfarms",
  "sku": {
      "name": "S1",
      "tier": "Standard",
      "size": "S1",
      "family": "S",
      "capacity": 1
  },
  "kind": "app",
  "name": "[variables('planName')]",
  "apiVersion": "2016-09-01",
  "location": "[resourceGroup().location]",
  "tags": {
      "iotCentral": "device-bridge",
      "iotCentralDeviceBridge": "app-service-plan"
  },
  "properties": {
      "name": "[variables('planName')]"
  }
},

Selanjutnya, edit templat untuk menyertakan "alwaysOn": true dalam konfigurasi untuk sumber daya functionapp pada "properties": {"SiteConfig": {...}}Konfigurasi alwaysOn memastikan aplikasi fungsi selalu berjalan.

Contoh

Contoh berikut menguraikan cara mengonfigurasi jembatan perangkat untuk berbagai cloud IoT:

Contoh 1: Menyambungkan Particle device melalui jembatan perangkat

Untuk menyambungkan Particle device melalui jembatan perangkat ke IoT Central, buka konsol Particle dan buat integrasi webhook baru. Atur Format Permintaan ke JSON. Di bawah Pengaturan Tingkat Lanjut, gunakan format isi kustom berikut ini:

{
  "device": {
    "deviceId": "{{{PARTICLE_DEVICE_ID}}}"
  },
  "measurements": {
    "{{{PARTICLE_EVENT_NAME}}}": "{{{PARTICLE_EVENT_VALUE}}}"
  }
}

Tempelkan URL fungsi dari aplikasi fungsi Anda, dan Anda melihat Perangkat partikel muncul sebagai perangkat yang tidak ditetapkan di IoT Central. Untuk mempelajari lebih lanjut, lihat posting blog Berikut cara mengintegrasikan proyek yang didukung Particle dengan Azure IoT Central.

Contoh 2: Menyambungkan perangkat Sigfox melalui jembatan perangkat

Beberapa platform mungkin tidak memungkinkan Anda menentukan format pesan perangkat yang dikirim melalui webhook. Untuk sistem semacam itu, Anda harus mengonversi payload pesan ke format isi yang diharapkan sebelum jembatan perangkat memprosesnya. Anda dapat melakukan konversi dalam fungsi yang sama yang menjalankan jembatan perangkat.

Bagian ini menunjukkan cara mengonversi payload integrasi webhook Sigfox ke format isi yang diharapkan oleh jembatan perangkat. Cloud Sigfox mengirimkan data perangkat dalam format string heksadesimal. Untuk kemudahan, jembatan perangkat menyertakan fungsi konversi untuk format ini, yang menerima subset dari jenis bidang yang mungkin dalam payload perangkat Sigfox: int dan uint 8, 16, 32, atau 64 bit; float 32 bit atau 64 bit; little-endian dan big-endian. Untuk memproses pesan dari integrasi webhook Sigfox, lakukan perubahan berikut pada file IoTCIntegration/index.js di aplikasi fungsi.

Untuk mengonversi payload pesan, tambahkan kode berikut sebelum panggilan ke handleMessage di saluran 21, ganti dengan payloadDefinition definisi payload Sigfox Anda:

const payloadDefinition = 'gforce::uint:8 lat::uint:8 lon::uint:16'; // Replace this with your payload definition

req.body = {
    device: {
        deviceId: req.body.device
    },
    measurements: require('./converters/sigfox')(payloadDefinition, req.body.data)
};

Perangkat Sigfox mengharapkan kode respons 204. Tambahkan kode berikut setelah panggilan ke handleMessage di baris 21:

context.res = {
    status: 204
};

Contoh 3: Menyambungkan perangkat dari The Things Network melalui jembatan perangkat

Untuk menyambungkan perangkat The Things Network ke IoT Central:

  • Tambahkan integrasi HTTP baru ke aplikasi Anda di The Things Network: Integrasi > Aplikasi > menambahkan Integrasi HTTP integrasi>.
  • Pastikan aplikasi Anda menyertakan fungsi dekoder yang secara otomatis mengonversi payload pesan perangkat Anda ke JSON sebelum dikirim ke fungsi: Dekoder Fungsi Payload > Aplikasi>.

Contoh berikut menunjukkan fungsi dekoder JavaScript yang dapat Anda gunakan untuk mendekode jenis numerik umum dari data biner:

function Decoder(bytes, port) {
  function bytesToFloat(bytes, decimalPlaces) {
    var bits = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
    var sign = (bits >>> 31 === 0) ? 1.0 : -1.0;
    var e = bits >>> 23 & 0xff;
    var m = (e === 0) ? (bits & 0x7fffff) << 1 : (bits & 0x7fffff) | 0x800000;
    var f = Math.round((sign * m * Math.pow(2, e - 150)) * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
    return f;
  }

  function bytesToInt32(bytes, signed) {
    var bits = bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24);
    var sign = 1;

    if (signed && bits >>> 31 === 1) {
      sign = -1;
      bits = bits & 0x7FFFFFFF;
    }

    return bits * sign;
  }

  function bytesToShort(bytes, signed) {
    var bits = bytes[0] | (bytes[1] << 8);
    var sign = 1;

    if (signed && bits >>> 15 === 1) {
      sign = -1;
      bits = bits & 0x7FFF;
    }

    return bits * sign;
  }

  return {
    temperature: bytesToFloat(bytes.slice(0, 4), 2),
    presscounter: bytesToInt32(bytes.slice(4, 8), true),
    blueLux: bytesToShort(bytes.slice(8, 10), false)
  };
}

Setelah Anda menentukan integrasi, tambahkan kode berikut sebelum panggilan ke handleMessage di baris 21 dari file IoTCIntegration / index.js aplikasi fungsi Anda. Kode ini menerjemahkan isi integrasi HTTP Anda ke format yang diharapkan.

req.body = {
  device: {
    deviceId: req.body.end_device_ids.device_id.toLowerCase()
  },
  measurements: req.body.uplink_message.decoded_payload
};

Catatan

Cuplikan sebelumnya menggunakan ID perangkat yang ramah manusia. Pesan Things Network juga menyertakan ID teknis yang dapat Anda akses menggunakan req.body.dev_eui.toLowerCase(). Untuk mempelajari selengkapnya, lihat The Things Network - Format Data.

Batasan

Jembatan perangkat hanya meneruskan pesan ke IoT Central, dan tidak mengirim pesan kembali ke perangkat. Batasan inilah sebabnya mengapa properti dan perintah tidak berfungsi untuk perangkat yang terhubung ke IoT Central melalui jembatan perangkat ini. Karena operasi kembar perangkat tidak didukung, tidak dimungkinkan untuk memperbarui properti perangkat melalui jembatan perangkat. Untuk menggunakan fitur ini, perangkat harus tersambung langsung ke IoT Central menggunakan salah satu SDK perangkat Azure IoT.

Langkah berikutnya

Sekarang setelah Anda mempelajari cara menyebarkan jembatan perangkat IoT Central, berikut langkah berikutnya yang disarankan: