Bagaimana cara Azure IoT Hub berinteraksi dengan perangkat Tertanam / IoT?

13

Saya bekerja pada platform Azure IoT, dan saya mengerti bagaimana perangkat mengirim data ke hub IoT (jika saya tidak salah, itu hanya panggilan layanan web atau yang serupa dengan itu).

Tapi saya bertanya-tanya bagaimana hub IoT mengirim Data / Command / Input ke perangkat, karena kami tidak bekerja pada hub IoT untuk komunikasi Perangkat (kami tidak memiliki persyaratan untuk mendorong data ke perangkat). Bisakah hub IoT berinteraksi secara langsung dengan perangkat? (Menggunakan ID unik perangkat atau menggunakan identitas unik seperti IP, alamat Mac, dll).

Di suatu tempat saya pernah membaca bahwa perangkat terus meminta ke hub IoT jika hub IoT memiliki input untuk mereka, dan hub IoT kemudian mengirimkan Data / Perintah / Input ke perangkat sebagai tanggapan. Benarkah itu? Jika tidak, mohon dijelaskan.

Shri
sumber

Jawaban:

14

Model yang digunakan IoT Hub menggunakan perangkat adalah bahwa mereka tidak akan pernah menerima koneksi masuk. Perangkat IoT Hub tidak pernah bertindak sebagai 'server', dan ini merupakan bagian penting dari model keamanan di Azure IoT. Model definitif tentang hal ini diringkas dalam Clemens Vaster ' ' Layanan Komunikasi Bantuan ' .

Oleh karena itu perangkat selalu 'polling' layanan eksternal untuk mengirim data atau menerima perintah. API membuatnya tampak seperti data sedang dikirim ke perangkat, tetapi selalu perangkat yang membuat koneksi keluar.

IoT hub melakukan ini dengan dua cara:

  1. Dengan mengirim data ke titik akhir perangkat /devices/{deviceId}/messages/devicebound . Ini adalah titik akhir perpesanan AMQP, mirip dengan antrian atau langganan topik. Perangkat, ketika membaca perintah, perlu menerima tanda terima jika diperlukan, yang merupakan bagian dari protokol AMQP yang mendasarinya. Ini berfungsi sama dengan MQTT, dan https adalah fallback yang valid. API merangkum semua ini untuk Anda. Ada konsep tambahan, seperti 'metode langsung' yang merupakan pembungkus API di sekitar protokol pesan mendasar yang sama
  2. Dengan menggunakan kembaran perangkat sisi server, yang merupakan cara untuk secara logis menjaga properti tetap sinkron antara perangkat dan server. Anda menetapkan properti pada kembaran perangkat, dan ketika perangkat menyinkronkan properti itu akan disinkronkan ke perangkat. Ini lebih sedikit berbasis pesan dan dibangun di atas protokol manajemen perangkat LWM2M.

Banyak dari 'polling', menghubungkan, berbagi koneksi, tanda terima, dll harus diurus sebagai bagian dari protokol AMQP (atau MQTT), yang pada gilirannya terbungkus dalam IoT Hub SDK. Jadi hal di atas sangat disederhanakan, tetapi untuk mengulangi, IoT Hub tidak dapat, dan tidak akan pernah mencoba dan mengirim data ke alamat / port ip pada perangkat Anda.

Simon Munro
sumber
Terima kasih @Simon, Sekarang saya jelas tentang itu, perangkat hanya bertanggung jawab untuk memanggil hub IoT untuk mengirim atau menerima data. Anda menyebut "Azure IoT" dalam jawaban Anda, jadi hanya ingin mengonfirmasi itu, aplikasi jawaban Anda di semua platform IoT? atau hanya untuk Azure IoT.
Shri
@ShrikantBhusalwad Jawabannya tidak berlaku untuk semua platform, karena banyak yang belum dikembangkan. Ini adalah model umum , bagus untuk keamanan, tetapi model lain mungkin dibenarkan - khususnya di lingkungan baru.
Sean Houlihane
2
Saya tidak terbiasa dengan semua platform, tetapi sebagian besar platform cloud akan serupa. AWS menggunakan MQTT, yang sebagian besar sama. Seperti yang diamati oleh @sean, ini tidak dapat diterapkan pada semua platform, tetapi sangat sedikit platform cloud yang memanggang praktik keamanan berisiko di muka. Metode yang menggunakan model perangkat-sebagai-server akan menjadi warisan atau memiliki kekakuan keamanan yang jauh lebih banyak (seperti pola edge atau mesh berkembang). Azure IoT secara arsitektur mendukung gateway bidang dan cloud untuk menyelesaikan masalah dengan perangkat berbasiskan warisan atau tepi
Simon Munro
Azure IoT Hub Aturan MQTT dijabarkan di docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support
Dukungan Gambit