MQTT: protokol rangkaian terbuka dan kepentingannya dalam IoT

Rangkaian protokol MQTT IoT

Ingat nama tersebut MQTT, kerana ini adalah protokol komunikasi rangkaian jenis M2M (Mesin ke Mesin) yang akan kedengaran sedikit. Ia menjadi sangat popular berkat era baru Internet of Things atau IoT (Internet of Things) kerana akronimnya dalam bahasa Inggeris. Selain itu, ini adalah protokol terbuka, yang memberikan banyak kelebihan.

Sebenarnya, ia telah menjadi salah satu tonggak utama IoT, kerana ia cukup bagus pada peranti dengan beberapa had transmisi seperti ini. Akronim MQTT berasal dari Mesej Pengangkutan Telemetri Beratur, standard terbuka dari OASIS dan ISO (ISO / IEC 20922) untuk komunikasi rangkaian dan yang umumnya berjalan pada TCP / IP yang terkenal.

Protokol rangkaian

Model OSI dan lapisannya

The protokol komunikasi Ini adalah peraturan yang membolehkan dua atau lebih peranti atau sistem berkomunikasi antara satu sama lain. Artinya, ini adalah protokol untuk mengirimkan maklumat melalui berbagai cara dan dengan format yang ditentukan, sama ada dilaksanakan oleh perisian dan perkakasan (atau keduanya).

El standard protokol mentakrifkan banyak ciri komunikasi. Ia boleh keluar dari peraturan penyegerakan, semantik, sintaksis, format paket, dll. Dan yang sebenarnya adalah bahawa itu bukan sesuatu yang boleh diabaikan, kerana berkat protokol ini hari ini kita dapat menggunakan Internet dan rangkaian komunikasi lain ...

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. Semasa berada di lapisan pengangkutan, anda dapat menemukan beberapa yang terkenal seperti TCP, UDP, dan lain-lain, serta lapisan Internet seperti IPv4, atau IPv6 (yang telah memungkinkan sejumlah besar IP yang tersedia dan kedatangan IoT), IPSec, dll, dan lain-lain dari lapisan pautan seperti DSL, Ethernet, WiFi, ARP, dll.

Mengenai protokol IoT

Protokol MQTT

Sudah tentu, ada protokol komunikasi khusus atau yang dapat diterapkan pada IOT. Maksudnya, dengan mempertimbangkan bahagian sebelumnya, mereka akan menjadi rangkaian standard yang ditentukan sehingga dua atau lebih peranti IoT dapat berkomunikasi dan memahami satu sama lain, dan biasanya M2M, iaitu komunikasi mesin-ke-mesin. Ada banyak peranti IoT disambungkan dan berkongsi maklumat dari sensor atau sumber lain.

Oleh kerana sebilangan besar peranti IoT, protokol ini mesti memenuhi keperluan melebihi had lebar jalur, kelajuan, dll. (perhatikan bahawa banyak peranti tertanam dan murah), yang biasanya terdapat di beberapa peranti. Dan saya bermaksud hakikat bahawa mesti berskala, untuk dapat menambahkan lebih banyak peranti yang disambungkan jika perlu dan tanpa menjejaskan sistem global.

Juga, mereka mesti mempunyai kebergantungan rendah gandingan antara peranti, supaya masalah tidak dihasilkan jika peranti dikeluarkan. Dan tentu saja, pada masa yang sama, interoperabiliti yang tinggi dicari sehingga dapat berfungsi dengan sebilangan besar peranti dan sistem yang sangat bervariasi, kerana dunia IoT cukup heterogen.

Ciri-ciri berguna lain ialah kemudahan melaksanakannya, keselamatan, dan lain-lain. Perlu diingat bahawa IoT mencipta cabaran besar dalam aspek keselamatan. Lebih-lebih lagi apabila banyak peranti yang disambungkan cenderung menjadi kritikal dalam kes tertentu ... sebagai contoh, mainan untuk kanak-kanak di bawah umur.

Konsep penting

Walaupun begitu, harus dikatakan bahawa penyelesaian untuk IoT menggunakan pelayan terpusat untuk menerima mesej dari semua peranti yang disambungkan yang memancarkan dan menyebarkannya ke semua peranti IoT yang disambungkan. Pelayan itulah yang dikenali sebagai penghala atau broker. Sesuatu yang jauh dari hubungan pelanggan-pelayan konvensional dalam beberapa cara.

Tambahan pula, metodologi yang anda dapati dalam protokol komunikasi ini untuk IoT adalah:

  • PubSub: Publish / Susbcribe adalah corak pesanan di mana peranti (Sub) memberitahu broker bahawa dia ingin menerima mesej, sementara peranti lain (Pub) menerbitkan mesej untuk broker diedarkan ke peranti lain yang menunggu mereka.
  • rRPC: Router Remoder Prosedur Panggilan adalah satu lagi corak pelaksanaan proses jarak jauh. Di dalamnya, sebuah peranti (Callee) memberitahu broker bahawa ia akan menjalankan prosedur tertentu dan broker menyebarkannya ke peranti lain (Caller) di mana proses tersebut dijalankan.

Sekarang, untuk melaksanakan metodologi atau corak ini, a infrastruktur pesanan. Dalam pengertian ini dua dapat dibezakan:

  • Gilir Mesej: perkhidmatan pesanan di mana satu barisan pesanan dihasilkan untuk semua pelanggan yang memulakan langganan kepada broker. Yang terakhir akan menyimpan mesej yang disimpan sehingga dihantar ke pelanggan. Sekiranya pelanggan atau penerima tidak tersambung, ia dijaga sehingga dihubungkan. Jenis perkhidmatan ini seperti yang digunakan dalam aplikasi pesanan segera seperti Telegra, WhatsApp, Messenger, dll.
  • Perkhidmatan Mesej: ia adalah perkhidmatan lain di mana broker menghantar mesej kepada pelanggan penerima yang terhubung, menyaring mengikut jenis mesej. Sekiranya pelanggan atau peranti penerima terputus, maka mesej akan hilang (walaupun mungkin mempunyai beberapa sistem pembalakan).

Protokol IoT

Setelah melihat perkara di atas, sekarang mari kita lihat dengan lebih dekat Protokol IoT yang lebih dikenali. Antara M2M yang paling terkenal adalah:

  • AMQP (Protokol Antrian Mesej Lanjutan): adalah protokol jenis PubSub dari Queue Mesej. Direka untuk mempunyai operasi yang baik dan memastikan kebolehpercayaan. Terutama untuk aplikasi korporat, prestasi tinggi, rangkaian latensi tinggi, kritikal, dll.
  • WAMP (Protokol Pemesejan Aplikasi Web): ini adalah satu lagi protokol terbuka jenis PubSub seperti rRPC, dan ia berjalan di WebSockets.
  • CoAP (Protokol Aplikasi Terhad): adalah protokol yang direka khas untuk aplikasi berkapasiti rendah.
  • TOMP (Streaming Protokol Pemesejan Berorientasikan Teks): protokol yang sangat mudah dan untuk mencapai kebolehoperasian maksimum. HTTP digunakan untuk menghantar mesej teks.
  • XMPP (Pemesejan dan Kehadiran eXtensible Protocol): protokol lain yang digunakan dalam IoT untuk aplikasi pesanan segera dan berdasarkan XML. Jan kes ini juga dibuka.
  • WMQ (Antrian Mesej WebSphere): protokol yang dibangunkan oleh IBM. Jenis ini adalah jenis Antrian Mesej, seperti namanya, dan berorientasikan mesej.
  • MQTT: (lihat bahagian seterusnya)

Semua mengenai MQTT

Pakej MQTT

El Protokol MQTT Ini adalah protokol komunikasi Message Queue, yang mengikuti corak PubSub, dan jenis M2M seperti yang telah saya sebutkan. Ia digunakan secara meluas di IoT, dan berdasarkan pada TCP / IP stack yang digunakan di Internet.

Dalam kes MQTT, setiap sambungan terus dibuka dan digunakan semula dalam setiap komunikasi yang diperlukan. Sesuatu yang berbeza dari apa yang berlaku dalam protokol lain yang diketahui, bahawa setiap komunikasi berlaku memerlukan sambungan baru.

kelebihan

Kelebihan protokol MQTT cukup jelas dari segi komunikasi M2M untuk IoT. Sebagai tambahan kepada semua yang dinyatakan di atas, protokol ini menyediakan:

  • Skalabiliti, untuk menghubungkan lebih ramai pelanggan.
  • Memisahkan antara pelanggan, untuk kurang bergantung.
  • Asinkronisme.
  • Kesederhanaan.
  • Ringan agar tidak menghabiskan terlalu banyak sumber daya (walaupun dengan keselamatan TLS / SSL ia meningkat).
  • Hemat tenaga untuk peranti yang bergantung pada bateri atau berfungsi 24/7, ia tidak memerlukan lebar jalur yang besar (sesuai untuk sambungan perlahan, seperti beberapa wayarles).
  • Keselamatan dan kualiti, untuk kebolehpercayaan dan ketahanan yang lebih tinggi dalam komunikasi.

sejarah

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

La idea awal adalah untuk membuat protokol untuk memantau saluran pipa yang melalui padang pasir, dengan protokol komunikasi yang efisien (penggunaan jalur lebar rendah), cahaya, dan penggunaan tenaga yang rendah. Pada masa itu sangat mahal, tetapi sekarang telah menjadi protokol yang murah dan terbuka.

Protokol awal diperbaiki dengan penampilan versi baru, seperti MQTT v3.1 (2013) di bawah spesifikasi OASIS (Organisasi untuk Kemajuan Piawaian Maklumat Berstruktur), dll. Anda semestinya tahu bahawa pada mulanya itu adalah protokol IBM milik, tetapi ia akan dikeluarkan pada tahun 2010, dan akhirnya menjadi standard dalam OASIS ...

Bagaimana sambungan MQTT berfungsi

Protokol MQTT menggunakan penapis, untuk mesej yang dihantar kepada setiap pelanggan, berdasarkan topik atau topik yang disusun secara hierarki. Dengan cara ini, pelanggan dapat menghantar mesej pada topik tertentu. Dengan cara ini, semua pelanggan atau peranti bersambung yang melanggan topik tersebut akan menerima mesej melalui broker.

Seperti MQ, mesej akan kekal dalam barisan dan mereka tidak hilang sehingga pelanggan menerima mesej itu.

Sambungan, seperti yang saya nyatakan, dibuat melalui TCP / IP, dan pelayan atau broker akan menyimpan rekod pelanggan yang terhubung. Secara lalai, peranti akan menggunakan port komunikasi nombor 1883, walaupun anda mungkin juga menemui port 8883 jika anda menggunakan SSL / TLS untuk keamanan tambahan.

Agar sambungan dapat dilakukan, bukan hanya klien, pelayan dan port yang diperlukan. Juga yang lain pakej atau mesej yang dihantar untuk komunikasi berlaku:

  • Menjalin hubungan: HUBUNGKAN mesej / paket yang dihantar oleh pelanggan dengan semua maklumat yang diperlukan. Maklumat tersebut merangkumi ID pelanggan, nama pengguna, kata laluan, dll. Broker atau pelayan bertindak balas dengan paket CONNACK yang akan memberitahu pelanggan bahawa sambungan itu diterima, ditolak, dll.
  • Hantar dan terima mesej: setelah sambungan dibuat, PUBLISH paket atau mesej digunakan dengan topik dan muatan mesej yang dihantar ke broker. Sebaliknya, pelanggan atau pelanggan yang berminat menggunakan paket SUBSCRIBE dan UNSUSCRIBE untuk melanggan atau menarik balik langganan masing-masing. Broker juga akan bertindak balas dengan paket SUBACK dan UNSUBACK masing-masing untuk melaporkan kejayaan operasi yang diminta oleh pelanggan.
  • Mengekalkan hubungan: untuk menjamin bahawa sambungan tetap terbuka, klien dapat secara berkala menghantar paket PINGREQ yang akan dipadankan dengan paket PINGRESP dari pelayan.
  • Tamatkan sambungan: apabila pelanggan memutuskannya menghantar paket DISCONNECT untuk melaporkan peristiwa itu.

Mereka mesej atau pakej Yang saya bincangkan mempunyai struktur yang sama dengan paket protokol rangkaian lain:

  • Header atau header tetap: adalah bahagian tetap yang menempati antara 2-5 bait. Ini mengandungi kod kawalan, ID jenis mesej yang dihantar, dan panjangnya. Antara 1-4 bait digunakan untuk menyandikan panjang, menggunakan 7 bit pertama setiap oktet sebagai data untuk panjang dan sedikit kesinambungan tambahan untuk menentukan bahawa terdapat lebih dari satu bait yang membentuk panjang mesej.
  • Tajuk boleh ubah: tidak selalu wajib, tetapi pilihan. Itu hanya terkandung dalam beberapa paket dalam situasi tertentu atau pesan tertentu.
  • Kandungan atau data: data paket adalah apa yang sebenarnya mengandungi mesej yang akan dihantar. Ia boleh dari beberapa kB hingga had 256 MB.

Sekiranya anda berminat untuk mengetahui kod yang sepadan dalam perenambelasan untuk jenis mesej yang dihantar adalah:

mesej Kod
CONNECT 0x10
HUBUNGI 0x20
MENERBITKAN 0x30
PUBACK 0x40
akil baligh 0x50
PENERBIT 0x60
pubcom 0x70
SUBSCRBE 0x80
SUBACK 0x90
TIDAK BERLANGSUNG 0xA0
UNSUBACK 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
HILANGKAN 0xE0

Kualiti dan keselamatan komunikasi

Perincian penting lain dari mesej oleh MQTT adalah kualiti perkhidmatan atau QoS, dan keselamatan. Kekukuhan sistem komunikasi sekiranya berlaku kegagalan dan keselamatannya bergantung pada perkara ini.

Mengenai kualitinya, ia dapat ditentukan 3 tahap berbeza:

  • QoS 0 (tidak diketahui)- Mesej hanya dikirim sekali, dan jika gagal, pesan tidak akan dikirimkan. Ia digunakan apabila tidak kritikal.
  • QoS 1 (terima): mesej akan dihantar seberapa banyak yang diperlukan untuk menjamin penghantaran kepada pelanggan. Kelemahannya ialah pelanggan dapat menerima mesej yang sama beberapa kali.
  • QoS 2 (terjamin)- Sama seperti di atas, tetapi dijamin akan dihantar sekali sahaja. Ia sering digunakan untuk sistem yang lebih kritikal di mana kebolehpercayaan lebih besar diperlukan.

Sebaliknya, untuk Keselamatan MQTT, pelbagai langkah dapat digunakan untuk memastikan kekuatannya dalam hal ini. Seperti yang telah saya nyatakan sebelumnya, pengesahan nama pengguna dan kata laluan, seperti banyak protokol lain, dapat dipastikan oleh SSL / TLS. Walaupun banyak peranti IoT dengan kapasiti rendah, atau sumber daya, mungkin menghadapi masalah dengan beban kerja yang berlebihan ketika menggunakan jenis komunikasi yang selamat ini ...

Atas sebab ini, banyak peranti IoT yang menggunakan MQTT menggunakan kata laluan dan pengguna di teks satah, yang dapat membuat seseorang mengendus lalu lintas rangkaian untuk membuatnya sangat mudah. Dan jika itu tidak mencukupi, broker juga dapat dikonfigurasi untuk menerima sambungan tanpa nama, yang memungkinkan pengguna membuat komunikasi, yang berisiko lebih besar.

Menggunakan MQTT dengan Arduino

Arduino UNO dengan MQTT

Sudah tentu anda boleh gunakan protokol MQTT dengan Arduino dan papan pengembangan lain, serta Rapsberry Pi, dll. Untuk melakukan ini, anda mesti menyediakan sambungan papan Arduino anda, jika tidak memilikinya. Juga, perpustakaan Pelanggan Arduino untuk MQTT ia akan membantu anda dalam tugas-tugas ini. Perpustakaan ini serasi dengan:

Anda sudah tahu bahawa anda boleh memuat turun dan memasang perpustakaan di Arduino IDE anda menggunakan arahan: git klon https://github.com/knolleary/pubsubclient.git

Sebaik sahaja ke kod untuk menggunakan MQTT dalam beberapa aplikasi, kebenarannya adalah mudah. Dalam gambar Fritzing anda dapat melihat plak Arduino UNO yang mana sambungan oleh Arduino Ethernet telah ditambahkan dan juga telah disambungkan sensor kelembapan dan suhu DHT22, walaupun ia boleh menjadi perkara lain ...

Baiklah, dengan kata-kata itu, untuk kod yang mesti anda buat IDE Arduino Untuk bekerja dengan protokol MQTT di Arduino, semudah itu:

  • kepada hantar mesej 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);
}

  • kepada terima mesej oleh MQTT anda hanya memerlukan pinggan Arduino UNO dan sambungan, dengan Arduino Ethernet atau elemen lain. Bagi kodnya, 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();
}

Ingat bahawa anda mesti menukar IP ke yang sesuai untuk pelayan, dan anda juga mesti menukar alamat MAC penyesuai rangkaian Ethernet anda atau yang anda gunakan, serta kod yang lain jika anda ingin menyesuaikannya dengan projek yang berbeza. Ini hanyalah contoh!

Untuk maklumat lebih lanjut, anda boleh muat turun secara percuma kami Manual PDF dengan kursus Arduino IDE untuk memulakan pengaturcaraan.


Mulakan perbualan

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.