MQTT: protokol jaringan terbuka dan kepentingannya dalam IoT

IoT jaringan protokol MQTT

Ingat namanya MQTT, karena ini adalah jenis protokol komunikasi jaringan M2M (Machine to Machine) yang akan terdengar cukup banyak. Ini menjadi sangat populer berkat era baru Internet of Things atau IoT (Internet of Things) untuk akronimnya dalam bahasa Inggris. Selain itu, ini adalah protokol terbuka, yang memberikan banyak keuntungan.

Faktanya, ini telah menjadi salah satu pilar utama IoT, karena cukup bagus pada perangkat dengan beberapa keterbatasan transmisi seperti ini. Singkatan dari MQTT berasal Pengiriman Telemetri Antrian Pesan, standar terbuka dari OASIS dan ISO (ISO / IEC 20922) untuk komunikasi jaringan dan umumnya berjalan pada TCP / IP yang terkenal.

Protokol jaringan

Model OSI dan lapisannya

Los protokol komunikasi Mereka adalah aturan yang memungkinkan dua atau lebih perangkat atau sistem untuk berkomunikasi satu sama lain. Artinya, ini adalah protokol untuk mengirimkan informasi melalui berbagai cara dan dengan format yang ditentukan, baik diimplementasikan oleh perangkat lunak dan perangkat keras (atau keduanya).

El standar dari protokol tersebut mendefinisikan banyak karakteristik komunikasi. Itu bisa pergi dari aturan sinkronisasi, semantik, sintaksis, format paket, dll. Dan kenyataannya adalah bahwa mereka bukanlah sesuatu yang dapat diabaikan, karena berkat protokol ini hari ini kita dapat menggunakan Internet dan jaringan komunikasi lainnya ...

Dan tentu saja, tidak hanya ada satu protokol, tetapi banyak. Sebagai contoh, Yang terkenal DNS, FTP, MQTT, HTTP dan HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP, dll., Untuk lapisan aplikasi. Sementara di lapisan transport Anda dapat menemukan beberapa yang terkenal seperti TCP, UDP, dll., Serta lapisan Internet seperti IPv4, atau IPv6 (salah satu yang memungkinkan jumlah terbesar dari IP yang tersedia dan kedatangan IoT), IPSec, dll., dan lainnya dari lapisan tautan seperti DSL, Ethernet, WiFi, ARP, dll.

Tentang protokol IoT

Protokol MQTT

Tentu saja, ada protokol komunikasi khusus atau yang dapat diterapkan ke file IOT. Artinya, mempertimbangkan bagian sebelumnya, mereka akan menjadi serangkaian standar yang ditentukan sehingga dua atau lebih perangkat IoT dapat berkomunikasi dan memahami satu sama lain, dan umumnya M2M, yaitu komunikasi mesin-ke-mesin. banyak perangkat IoT terhubung dan berbagi informasi dari sensor atau sumber lain.

Karena banyaknya perangkat IoT, protokol ini harus memenuhi persyaratan di luar batasan bandwidth, kecepatan, dll. (perhatikan bahwa banyak perangkat yang tertanam dan murah), yang biasanya ada di beberapa perangkat. Dan maksud saya fakta itu harus dapat diskalakan, agar dapat menambahkan lebih banyak perangkat yang terhubung jika perlu dan tanpa mempengaruhi sistem global.

Juga, mereka harus memiliki file ketergantungan rendah menghubungkan antar perangkat, sehingga masalah tidak muncul jika perangkat dilepas. Dan tentunya di saat yang sama juga diupayakan interoperabilitas yang tinggi agar bisa berfungsi dengan banyak perangkat dan sistem yang sangat variatif, karena dunia IoT cukup heterogen.

Fitur berguna lainnya adalah kemudahan penerapannya, keamanan, dll. Perlu diingat bahwa IoT menciptakan tantangan besar dalam aspek keamanan. Terlebih lagi ketika banyak perangkat yang terhubung biasanya kritis dalam kasus tertentu ... misalnya, mainan untuk anak di bawah umur.

Konsep penting

Meskipun demikian, harus dikatakan bahwa solusi untuk IoT menggunakan server terpusat untuk menerima pesan dari semua perangkat yang terhubung yang memancarkan dan mendistribusikannya ke semua perangkat IoT yang terhubung dan mendengarkan. Server itulah yang dikenal sebagai router atau broker. Sesuatu yang jauh dari hubungan klien-server konvensional dalam beberapa hal.

Selain itu, metodologi yang dapat Anda temukan dalam protokol komunikasi untuk IoT ini adalah:

  • PubSub: Publish / Susbcribe adalah pola pesan di mana perangkat (Sub) menginformasikan broker bahwa ia ingin menerima pesan, sementara perangkat lain (Pub) menerbitkan pesan untuk didistribusikan oleh broker ke perangkat lain yang menunggu mereka.
  • rRPC: Panggilan Prosedur Router Remoder adalah pola lain dari eksekusi proses jarak jauh. Di dalamnya, perangkat (Callee) memberi tahu broker bahwa ia akan menjalankan prosedur tertentu dan broker mendistribusikannya ke perangkat lain (Penelepon) tempat proses tersebut dijalankan.

Nah, untuk melaksanakan metodologi atau pola tersebut, a infrastruktur perpesanan. Dan dalam pengertian ini dua dapat dibedakan:

  • Antrian Pesan: layanan pesan di mana satu antrian pesan dibuat untuk semua klien yang memulai langganan ke broker. Yang terakhir ini akan menyimpan pesan hingga dikirim ke klien. Jika klien atau penerima tidak terhubung, itu dipertahankan sampai terhubung. Jenis layanan ini seperti yang digunakan dalam aplikasi perpesanan instan seperti Telegra, WhatsApp, Messenger, dll.
  • Layanan Pesan: ini adalah layanan lain di mana pialang mengirimkan pesan ke klien penerima yang terhubung, memfilter menurut jenis pesan. Jika klien atau perangkat penerima terputus, maka pesan akan hilang (meskipun mungkin memiliki beberapa sistem logging).

Protokol IoT

Setelah melihat hal-hal di atas, sekarang mari kita lihat lebih dekat Protokol IoT yang lebih dikenal. Di antara yang paling menonjol dari M2M adalah:

  • AMQP (Protokol Antrian Pesan Tingkat Lanjut): adalah jenis protokol Antrian Pesan PubSub. Didesain untuk memiliki interoperabilitas yang baik dan memastikan keandalan. Khusus untuk aplikasi perusahaan, kinerja tinggi, jaringan latensi tinggi, kritis, dll.
  • WAMP (Protokol Pesan Aplikasi Web): ini adalah protokol terbuka lain dari jenis PubSub seperti rRPC, dan berjalan di WebSockets.
  • CoAP (Protokol Aplikasi Terbatas): adalah protokol yang dirancang khusus untuk aplikasi berkapasitas rendah.
  • TOMP (Protokol Pesan Berorientasi Teks Streaming): protokol yang sangat sederhana dan untuk mencapai interoperabilitas maksimum. HTTP digunakan untuk mengirimkan pesan teks.
  • XMPP (Pesan eXtensible dan Protokol Kehadiran): protokol lain yang digunakan di IoT untuk aplikasi perpesanan instan dan berdasarkan XML. Jan kasus ini juga terbuka.
  • WMQ (Antrian Pesan WebSphere): protokol yang dikembangkan oleh IBM. Ini adalah jenis Antrian Pesan, seperti namanya, dan berorientasi pada pesan.
  • MQTT: (lihat bagian selanjutnya)

Semua tentang MQTT

Paket MQTT

El Protokol MQTT Ini adalah protokol komunikasi Antrian Pesan, yang mengikuti pola PubSub, dan tipe M2M, seperti yang telah saya sebutkan. Ini banyak digunakan di IoT, dan didasarkan pada tumpukan TCP / IP yang digunakan di Internet.

Dalam kasus MQTT, setiap koneksi tetap terbuka dan digunakan kembali dalam setiap komunikasi yang diperlukan. Sesuatu yang berbeda dari apa yang terjadi di protokol lain yang dikenal, bahwa setiap komunikasi berlangsung membutuhkan koneksi baru.

keuntungan

Keunggulan protokol MQTT cukup terbukti dalam hal komunikasi M2M untuk IoT. Selain semua yang dikatakan di atas, ini adalah protokol yang menyediakan:

  • Skalabilitas, untuk menghubungkan lebih banyak pelanggan.
  • Pemisahan antar klien, untuk mengurangi ketergantungan.
  • Asinkronisme.
  • Kesederhanaan.
  • Ringan agar tidak menghabiskan terlalu banyak sumber daya (meskipun dengan keamanan TLS / SSL itu naik).
  • Hemat energi untuk perangkat yang bergantung pada baterai atau bekerja 24/7, tidak memerlukan bandwidth besar (ideal untuk koneksi lambat, seperti beberapa nirkabel).
  • Keamanan dan kualitas, untuk keandalan dan ketangguhan yang lebih baik dalam komunikasi.

sejarah

MQTT dibuat pada tahun 90-an, dengan versi awal protokol pada tahun 1999. Ini dibuat oleh Dr. Andy Stanford-Clark dari IBM dan Arlen Nipper dari Cirrus Link (sebelumnya Eurotech).

La ide awal adalah membuat protokol untuk memantau jalur pipa yang melintasi gurun, dengan protokol komunikasi yang efisien (konsumsi bandwidth rendah), ringan, dan konsumsi energi yang rendah. Pada saat itu sangat mahal, tetapi sekarang telah menjadi protokol yang murah dan terbuka.

Protokol awal ditingkatkan dengan munculnya versi baru, seperti MQTT v3.1 (2013) berdasarkan spesifikasi OASIS (Organisasi untuk Kemajuan Standar Informasi Terstruktur), dll. Anda harus tahu bahwa pada awalnya itu adalah protokol berpemilik dari IBM, tetapi akan dirilis pada tahun 2010, dan akhirnya menjadi standar di OASIS ...

Bagaimana koneksi MQTT bekerja

Protokol MQTT menggunakan sebuah filter, untuk pesan yang dikirim ke setiap klien, berdasarkan topik atau topik yang diatur secara hierarki. Dengan cara ini, pelanggan dapat memposting pesan tentang topik tertentu. Dengan cara ini, semua klien atau perangkat terhubung yang berlangganan topik tersebut akan menerima pesan melalui broker.

Seperti MQ, pesan akan tetap berada dalam antrian dan mereka tidak akan hilang sampai klien menerima pesan itu.

Koneksi, seperti yang saya juga tunjukkan, dibuat melalui TCP / IP, dan server atau broker akan menyimpan catatan klien yang terhubung. Secara default, perangkat akan menggunakan nomor port komunikasi 1883, meskipun Anda juga dapat menemukan port 8883 jika Anda menggunakan SSL / TLS untuk keamanan tambahan.

Agar koneksi menjadi mungkin, tidak hanya klien, server, dan port yang diperlukan. Juga yang lainnya paket atau pesan terkirim agar komunikasi berlangsung:

  • Buat koneksi: HUBUNGKAN pesan / paket yang dikirim oleh klien dengan semua informasi yang diperlukan. Informasi itu termasuk ID pelanggan, nama pengguna, kata sandi, dll. Pialang atau server merespons dengan paket CONNACK yang akan memberi tahu klien bahwa koneksi diterima, ditolak, dll.
  • Mengirim dan menerima pesan: setelah koneksi dibuat, PUBLIKASIKAN paket atau pesan digunakan dengan topik dan muatan pesan yang dikirim ke broker. Di sisi lain, klien atau klien yang tertarik menggunakan paket BERLANGGANAN dan TIDAK BERLANGGANAN untuk berlangganan atau menarik langganan mereka masing-masing. Pialang juga akan menanggapi dengan paket SUBACK dan UNSUBACK untuk melaporkan keberhasilan operasi yang diminta oleh klien.
  • Menjaga koneksi: untuk menjamin bahwa koneksi tetap terbuka, klien dapat secara berkala mengirim paket PINGREQ yang akan dicocokkan dengan paket PINGRESP dari server.
  • Akhiri koneksi: ketika klien memutuskan hubungan itu mengirimkan paket PUTUSKAN untuk melaporkan peristiwa itu.

Itu pesan atau paket Yang telah saya bicarakan memiliki struktur yang sama dengan paket lain dari protokol jaringan lain:

  • Header atau header tetap: adalah bagian tetap yang menempati antara 2-5 byte. Ini berisi kode kontrol, ID dari jenis pesan yang dikirim, dan panjangnya. Antara 1-4 byte digunakan untuk menyandikan panjang, menggunakan 7 bit pertama dari setiap oktet sebagai data untuk panjang dan bit tambahan kontinuitas untuk menentukan bahwa ada lebih dari satu byte yang membentuk panjang pesan.
  • Header variabel: tidak selalu wajib, tetapi opsional. Itu hanya terdapat dalam beberapa paket dalam situasi tertentu atau pesan tertentu.
  • Konten atau data: paket data inilah yang sebenarnya berisi pesan yang akan dikirim. Itu bisa dari beberapa kB hingga batas 256 MB.

Jika Anda tertarik untuk mengetahuinya kode yang sesuai dalam heksadesimal untuk jenis pesan yang dikirim adalah:

pesan Kode
MENGHUBUNG 0x10
MENGHUBUNGKAN 0x20
MENERBITKAN 0x30
PUTAR 0x40
pubrec 0x50
PUBREL 0x60
pubcomp 0x70
BERLANGGANAN 0x80
SUBURAN 0x90
BERHENTI BERHENTI 0xA0
BATALKAN KEMBALI 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
MEMUTUSKAN 0xE0

Kualitas dan keamanan komunikasi

Detail penting lainnya dari pesan MQTT adalah kualitas layanan atau QoS, dan keamanan. Ketangguhan sistem komunikasi jika terjadi kegagalan dan keamanannya akan bergantung pada hal ini.

Soal kualitasnya bisa ditentukan 3 level yang berbeda:

  • QoS 0 (tidak diketahui)- Pesan hanya dikirim satu kali, dan jika terjadi kegagalan, pesan tidak akan terkirim. Ini digunakan saat tidak kritis.
  • QoS 1 (mengakui): pesan akan dikirim sebanyak yang diperlukan untuk menjamin pengiriman ke pelanggan. Sisi negatifnya adalah klien dapat menerima pesan yang sama beberapa kali.
  • QoS 2 (terjamin)- Mirip dengan di atas, tetapi dijamin hanya akan dikirim satu kali. Ini sering digunakan untuk sistem yang lebih kritis di mana keandalan yang lebih besar dibutuhkan.

Di sisi lain, adapun Keamanan MQTT, berbagai tindakan dapat digunakan untuk memastikan kekuatannya dalam hal ini. Seperti yang telah saya sebutkan sebelumnya, otentikasi nama pengguna dan kata sandi, seperti banyak protokol lainnya, dapat dipastikan menggunakan SSL / TLS. Meskipun banyak perangkat IoT dengan kapasitas atau sumber daya rendah, dapat mengalami masalah dengan kelebihan beban kerja saat menggunakan jenis komunikasi aman ini ...

Untuk alasan ini, banyak perangkat IoT yang menggunakan MQTT menggunakan kata sandi dan pengguna dalam teks pesawat, yang dapat membuat seseorang mengendus lalu lintas jaringan untuk mendapatkannya dengan sangat mudah. Dan jika itu tidak cukup, pialang juga dapat dikonfigurasi untuk menerima koneksi anonim, yang akan memungkinkan setiap pengguna untuk menjalin komunikasi, yang melibatkan risiko yang lebih besar.

Menggunakan MQTT dengan Arduino

Arduino UNO dengan MQTT

Tentu saja Anda bisa menggunakan protokol MQTT dengan Arduino dan papan pengembangan lainnya, serta Rapsberry Pi, dll. Untuk melakukan ini, Anda harus menyediakan papan Arduino Anda dengan konektivitas, jika tidak memilikinya. Juga perpustakaan Klien Arduino untuk MQTT itu akan membantu Anda dalam tugas-tugas ini. Pustaka ini kompatibel dengan:

Anda sudah tahu bahwa Anda dapat mengunduh dan menginstal perpustakaan di Arduino IDE Anda menggunakan perintah: git klon https://github.com/knolleary/pubsubclient.git

Sesegera ke kode untuk menggunakan MQTT dalam beberapa penerapan, sebenarnya itu sederhana. Pada gambar Fritzing Anda bisa melihat sebuah plakat Arduino UNO yang konektivitas dengan Arduino Ethernet telah ditambahkan dan juga telah terhubung sensor kelembaban dan suhu DHT22, meski bisa jadi apa saja ...

Ok, dengan begitu, untuk kode yang harus Anda buat IDE Arduino Untuk bekerja dengan protokol MQTT di Arduino, sesederhana itu:

  • untuk kirim pesan MQTT
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHTPIN 2
#define DHTTYPE DHT22

// Direccion MAC del adaptador Ethernet
byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 };

// IP del servidor (broker)
IPAddress mqtt_server(192, 168, 1, 4);

// Topic o tema con el que se trabaja
const char* topicName = "test";

DHT dht(DHTPIN, DHTTYPE);
EthernetClient ethClient;
PubSubClient client(ethClient);

void setup()
{
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Fallo en Ethernet usando DHCP");
  }
// Puerto 1883 de comunicación
  client.setServer(mqtt_server, 1883);
  dht.begin();
}

void loop()
{
  if (!client.connected()) {
    Serial.print("Conectando ...\n");
    client.connect("Cliente Arduino");
  }
  else {
    // Envío de informacion del sensor de temperatura y humedad
    float temp = dht.readTemperature();
    char buffer[10];
    dtostrf(temp,0, 0, buffer);
    client.publish(topicName, buffer);
  }
  // Tiempo entre envíos en ms (cada 10 segundos)
  delay(10000);
}

  • untuk menerima pesan dengan MQTT Anda hanya membutuhkan piring Arduino UNO dan koneksi, dengan Arduino Ethernet atau elemen lainnya. Adapun kodenya, contohnya adalah:
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

// Direccion MAC del adaptador Ethernet
byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 };

// IP del servidor (broker)
IPAddress mqtt_server(192, 168, 1, 4);

// Topic o tema con el que trabajr
const char* topicName = "test";

EthernetClient ethClient;
PubSubClient client(ethClient);

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("El mensaje ha llegado [");
  Serial.print(topic);
  Serial.print("] ");
  int i=0;
  for (i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void setup()
{
  Serial.begin(9600);
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Fallo en Ethernet al usar configuración DHCP");
  }
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback)
}

void loop()
{
  if (!client.connected()) {
      Serial.print("Conectando ...");
      if (client.connect("rece_arduino")) {
        Serial.println("conectado");
        client.subscribe(topicName);
      } else {
        delay(10000);
      }
  }
  // Cliente a la escucha
  client.loop();
}

Ingatlah bahwa Anda harus mengubah IP ke yang sesuai untuk server, dan Anda juga harus mengubah alamat MAC adaptor jaringan Ethernet Anda atau yang Anda gunakan, serta kode lainnya jika Anda bermaksud untuk menyesuaikannya. proyek yang berbeda. Ini hanya sebuah contoh!

Untuk informasi lebih lanjut, Anda bisa unduh secara gratis kami Manual PDF dengan kursus Arduino IDE untuk memulai pemrograman.


Jadilah yang pertama mengomentari

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.