MQTT: otvoreni mrežni protokol i njegov značaj u IoT-u

MQTT mreža protokola IoT

Zapamti ime MQTT, jer će to biti mrežni komunikacijski protokol tipa M2M (Machine to Machine) koji će zvučati prilično malo. Postaje prilično popularan zahvaljujući novoj eri Interneta stvari ili IoT (Internet of Things) zbog svoje kratice na engleskom jeziku. Pored toga, to je otvoreni protokol, koji daje brojne prednosti.

U stvari, postao je jedan od centralnih stubova IoT-a, jer je prilično dobar na uređajima s određenim ograničenjima prenosa poput ovih. Skraćenica MQTT dolazi iz Telemetrijski transport u redu čekanja poruka, otvoreni standard OASIS-a i ISO-a (ISO / IEC 20922) za mrežne komunikacije i koji se uglavnom koristi na poznatom TCP / IP-u.

Mrežni protokoli

OSI model i njegovi slojevi

u komunikacijski protokoli To su pravila koja omogućavaju da dva ili više uređaja ili sistema međusobno komuniciraju. Odnosno, riječ je o protokolu za prijenos informacija na različita sredstva i u definiranom formatu, bilo da ih implementira softver i hardver (ili oboje).

El standardni protokola definira mnoštvo komunikacijskih karakteristika. To može ići od pravila sinhronizacije, semantike, sintakse, paketa, itd. A istina je da nisu zanemarivi, jer zahvaljujući tim protokolima danas možemo koristiti Internet i druge komunikacijske mreže ...

I naravno, ne postoji samo jedan protokol, već i mnogi. Na primjer, poznati DNS, FTP, MQTT, HTTP i HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP, itd., Za sloj aplikacije. Dok u transportnom sloju možete pronaći neke poznate poput TCP-a, UDP-a itd., Kao i one s internetskog sloja kao što su IPv4 ili IPv6 (što je omogućilo najveći broj dostupnih IP-ova i dolazak IoT-a ), IPSec, itd. I drugi iz sloja veze kao što su DSL, Ethernet, WiFi, ARP itd.

O IoT protokolima

MQTT protokol

Naravno, postoje specifični komunikacijski protokoli ili se oni mogu primijeniti na IoT. To će reći, uzimajući u obzir prethodni odjeljak, oni bi bili niz definiranih standarda tako da dva ili više IoT uređaja mogu međusobno komunicirati i razumjeti se, a oni su općenito M2M, odnosno komunikacija između mašina. mnogi IoT uređaji su povezani i dijele informacije iz senzora ili drugih izvora.

Zbog velikog broja IoT uređaja, ovi protokoli moraju udovoljavati zahtjevima izvan ograničenja širine pojasa, brzine itd. (imajte na umu da su mnogi uređaji ugrađeni i jeftini), što je obično u nekim uređajima. I mislim na činjenicu da mora biti skalabilno, da biste mogli dodati više povezanih uređaja ako je potrebno i bez utjecaja na globalni sistem.

Takođe, oni moraju imati mala zavisnost spajanje između uređaja, tako da se problemi ne generiraju ako se uređaj ukloni. I naravno, istovremeno se traži visoka interoperabilnost tako da radi s velikim brojem uređaja i vrlo raznolikim sistemima, jer je svijet interneta stvari prilično heterogen.

Ostale korisne značajke bile bi jednostavnost njihove primjene, sigurnostitd. Imajte na umu da IoT stvara velike izazove u sigurnosnom aspektu. Čak i više kada su mnogi povezani uređaji u određenim slučajevima obično kritični ... na primjer, igračke za maloljetnike.

Važni koncepti

Treba reći da se mora reći da rješenja za IoT koriste centralizirani server za primanje poruka sa svih povezanih uređaja koji ih emitiraju i distribuiraju na sve povezane IoT uređaje koji slušaju. Taj server je ono što je poznato usmjerivač ili broker. Nešto što je na neki način daleko od uobičajenog odnosa klijent-server.

Sa druge strane, metodologije koje možete pronaći u ovim komunikacijskim protokolima za IoT su:

  • PubSub: Objavi / prepiši je obrazac za razmjenu poruka gdje uređaj (Sub) obavještava posrednika da želi primiti poruku, dok drugi uređaj (Pub) objavljuje poruke koje posrednik distribuira na druge uređaje koji ih čekaju.
  • rRPC: Pozivi postupka preusmjeravanja usmjerivača je još jedan obrazac udaljenog izvršavanja procesa. U njemu uređaj (Callee) obavještava brokera da će izvršiti određenu proceduru, a broker ga distribuira na drugi uređaj (pozivatelja) na kojem se navedeni postupak izvršava.

Da bismo izvršili ove metodologije ili obrasce, a infrastruktura za razmjenu poruka. I u tom smislu se mogu razlikovati dvije:

  • Red poruka: usluga razmjene poruka gdje se generira jedan red poruka za sve klijente koji pokreću pretplatu na posrednika. Potonji će čuvati poruke pohranjene sve dok ih ne dostave klijentu. Ako klijent ili primatelj nisu povezani, održava se dok se ne povežu. Ove vrste usluga su poput onih koje se koriste u aplikacijama za razmjenu trenutnih poruka kao što su Telegra, WhatsApp, Messenger itd.
  • Usluga poruka: to je još jedna usluga u kojoj posrednik šalje poruke povezanom klijentu primaocu, filtrirajući prema tipu poruke. Ako je klijent ili uređaj za prijem odspojen, poruke se gube (iako možda ima neki sistem za evidentiranje).

IoT protokoli

Nakon što smo vidjeli gore, sada ćemo pogledati izbliza IoT protokoli koji su poznatiji. Među najistaknutijim M2M su:

  • AMQP (Napredni protokol čekanja poruka): je PubSub protokol tipa Red čekanja poruka. Dizajniran da ima dobru interoperabilnost i osigurava pouzdanost. Posebno za korporativne aplikacije, visoke performanse, mreže s velikim kašnjenjem, kritične itd.
  • WAMP (protokol za razmjenu poruka putem web aplikacija): to je još jedan otvoreni protokol tipa PubSub poput rRPC i radi na WebSockets.
  • CoAP (protokol ograničene aplikacije): je protokol posebno dizajniran za aplikacije malog kapaciteta.
  • TOMP (protokol protoka tekstualno orijentiranih poruka): vrlo jednostavan protokol i za postizanje maksimalne interoperabilnosti. HTTP se koristi za prijenos tekstualnih poruka.
  • XMPP (proširivi protokol za razmjenu poruka i prisutnosti): još jedan protokol koji se koristi u IoT-u za aplikacije trenutnih poruka i zasnovan na XML-u. Jan, ovaj slučaj je takođe otvoren.
  • WMQ (WebSphere red poruka): protokol koji je razvio IBM. Tip je reda čekanja za poruke, kao što mu i samo ime govori, i orijentiran je na poruke.
  • MQTT: (vidi sljedeći odjeljak)

Sve o MQTT

MQTT paket

El MQTT protokol Riječ je o komunikacijskom protokolu reda poruka, koji slijedi PubSub obrazac i tipa M2M, kao što sam već spomenuo. Široko se koristi u IoT-u, a zasniva se na TCP / IP steku koji se koristi na Internetu.

U slučaju MQTT, svaka veza ostaje otvorena i ponovo se koristi u svakoj neophodnoj komunikaciji. Nešto različito od onoga što se događa u drugim poznatim protokolima, da se svaka komunikacija odvija zahtijeva novu vezu.

Ventajas

Prednosti MQTT protokola sasvim su očite u pogledu M2M komunikacije za IoT. Uz sve gore rečeno, to je protokol koji pruža:

  • Skalabilnost za povezivanje sve više i više kupaca.
  • Nevezanje klijenata radi manje ovisnosti.
  • Asinhronizam.
  • Jednostavnost.
  • Lakoća kako ne biste potrošili previše resursa (iako s TLS / SSL sigurnošću raste).
  • Energetski učinkovit za uređaje koji ovise o bateriji ili rade 24/7, ne treba mu velika propusnost (idealno za spore veze, poput nekih bežičnih).
  • Sigurnost i kvalitet za veću pouzdanost i robusnost u komunikacijama.

historia

MQTT je stvoren 90-ih, s ranom verzijom protokola 1999. godine. Kreirali su ga dr. Andy Stanford-Clark iz IBM-a i Arlen Nipper iz kompanije Cirrus Link (ranije Eurotech).

La početna ideja bio je stvoriti protokol za nadgledanje cjevovoda koji je putovao kroz pustinju, s efikasnim komunikacijskim protokolom (mala potrošnja propusnog opsega), svjetlošću i malim ulaganjem energije. U to vrijeme bio je vrlo skup, ali sada je postao jeftin i otvoren protokol.

Početni protokol je poboljšan izgledom nove verzije, kao što je MQTT v3.1 (2013) prema specifikaciji OASIS (Organizacija za unapređenje strukturiranih informacionih standarda) itd. Trebali biste znati da je na početku to bio vlasnički protokol od IBM-a, ali da će biti objavljen 2010. godine, a na kraju je postao standard u OASIS-u ...

Kako funkcionira MQTT veza

MQTT protokol koristi filter, za poruke koje se šalju svakom klijentu na osnovu tema ili tema koje su hijerarhijski organizirane. Na taj način kupac može poslati poruku na određenu temu. Na taj će način svi oni klijenti ili povezani uređaji koji su pretplaćeni na temu primati poruke putem brokera.

Kao i MQ, poruke će ostati u redu i oni se ne gube dok klijent ne primi tu poruku.

Veze su, kao što sam takođe naznačio, uspostavljene putem TCP / IP-a, a server ili posrednik će voditi evidenciju o povezanim klijentima. Uređaji će prema zadanim postavkama koristiti komunikacijske portove broj 1883, iako ćete možda pronaći i port 8883 ako za dodatnu sigurnost koristite SSL / TLS.

Da bi veza bila moguća, nisu potrebni samo klijenti, serveri i portovi. Takođe i drugi paketi ili poruke poslane za komunikaciju:

  • Uspostavite vezu: CONNECT poruku / paket koji klijent šalje sa svim potrebnim informacijama. Te informacije uključuju korisnički ID, korisničko ime, lozinku itd. Posrednik ili server odgovara paketom CONNACK koji će obavijestiti klijenta da je veza prihvaćena, odbijena itd.
  • Slanje i primanje poruka: nakon uspostavljanja veze, PUBLISH paketi ili poruke koriste se s temom i korisnim opterećenjem poruke poslane posredniku. S druge strane, zainteresirani klijent ili klijenti koriste pretplatu ili UNSUSCRIBE pakete za pretplatu ili povlačenje pretplate. Posrednik će također odgovoriti paketom SUBACK i UNSUBACK kako bi izvijestio o uspjehu operacije koju je zatražio klijent.
  • Održavanje veze: da bi se osiguralo da veza ostaje otvorena, klijenti mogu povremeno slati PINGREQ paket koji će se podudarati s PINGRESP paketom sa servera.
  • Kraj veze: kada se klijent prekine, šalje DISCONNECT paket da prijavi taj događaj.

Oni poruke ili pakete Oni o kojima sam govorio imaju strukturu istu kao i drugi paketi drugih mrežnih protokola:

  • Zaglavlje ili fiksno zaglavlje: je fiksni dio koji zauzima između 2-5 bajtova. Sadrži kontrolni kod, ID vrste poslane poruke i njezinu dužinu. Za kodiranje dužine koristi se između 1-4 bajta, koristeći prvih 7 bitova svakog okteta kao podatke o dužini i dodatni bit kontinuiteta kako bi se utvrdilo da postoji više od jednog bajta koji čini dužinu poruke.
  • Varijabilno zaglavlje: nije uvijek obavezno, već neobavezno. Sadrži se samo u nekim paketima u određenim situacijama ili u određenim porukama.
  • Sadržaj ili podaci: paketni podaci su ono što zapravo sadrži poruku koju treba poslati. Može biti od nekoliko kB do ograničenja od 256 MB.

Ako vas zanima odgovarajući kod u heksadecimalnom obliku za vrste poslanih poruka su:

poruka Kod
CONNECT 0x10
CONNACK 0x20
JAVNO 0x30
PUBACK 0x40
pubrec 0x50
PUBREL 0x60
pubcomp 0x70
PRETPLATITE SE 0x80
SUBACK 0x90
Otkaži pretplatu 0xA0
UNSUBACK 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
PREKINITE 0xE0

Kvalitet i sigurnost komunikacija

Još jedan važan detalj poruka MQTT-a je kvalitet usluge ili QoS, i sigurnost. O tome će ovisiti robusnost komunikacijskog sustava u slučaju kvara i njegova sigurnost.

Što se tiče njegove kvalitete, to se može utvrditi 3 različitih nivoa:

  • QoS 0 (nepriznavanje)- Poruka se šalje samo jednom, a u slučaju neuspjeha ne bi bila isporučena. Koristi se kada nije kritično.
  • QoS 1 (potvrda): poruka će se poslati onoliko puta koliko je potrebno kako bi se zajamčila isporuka kupcu. Loša strana je ta što je klijent mogao primiti istu poruku nekoliko puta.
  • QoS 2 (osiguran)- Slično kao gore, ali garantuje se isporuka samo jednom. Često se koristi za kritičnije sisteme gdje je potrebna veća pouzdanost.

S druge strane, što se tiče MQTT sigurnost, mogu se koristiti razne mjere kako bi se osigurala njegova snaga u tom pogledu. Kao što sam već spomenuo, provjeru autentičnosti korisničkog imena i lozinke, kao i mnogi drugi protokoli, može osigurati SSL / TLS. Iako bi mnogi IoT uređaji malih kapaciteta ili resursa mogli imati problema sa preopterećenjem posla kada koriste ovu vrstu sigurne komunikacije ...

Iz tog razloga mnogi IoT uređaji koji koriste MQTT koriste lozinke i korisnike u tekst ravnine, što bi moglo natjerati nekoga da njuši mrežni promet kako bi ga vrlo lako dobio. A ako to nije dovoljno, posrednik se također može konfigurirati da prihvaća anonimne veze, što bi svakom korisniku omogućilo uspostavljanje komunikacije, što uključuje veći rizik.

Korištenje MQTT-a s Arduinom

Arduino UNO sa MQTT

Naravno da možete koristite MQTT protokol sa Arduinom i druge razvojne ploče, kao i Rapsberry Pi itd. Da biste to učinili, morate svojoj Arduino ploči osigurati povezivost ako je nema. Takođe, biblioteka Arduino klijent za MQTT to će vam pomoći u ovim zadacima. Ova je biblioteka kompatibilna sa:

Već znate da možete preuzeti i instalirati biblioteku u svoj Arduino IDE pomoću naredbe: git klon https://github.com/knolleary/pubsubclient.git

Čim kodu za korištenje MQTT u nekim aplikacijama istina je da je to jednostavno. Na Fritzingovoj slici možete vidjeti plaketu Arduino UNO kojoj je dodana povezanost putem Arduino Etherneta i koja je također povezana senzor vlage i temperature DHT22, iako je moglo biti i bilo šta drugo ...

Ok, uz to, za kôd koji morate generirati Arduino IDE Da biste radili s MQTT protokolom na Arduinu, to je tako jednostavno:

  • para slati poruke 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);
}

  • para primanje poruka MQTT vam treba samo tanjur Arduino UNO i veza s Arduino Ethernet-om ili bilo kojim drugim elementom. Što se tiče koda, primjer bi bio:
#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();
}

Imajte na umu da morate promijeniti IP u odgovarajući za server, a također morate promijeniti MAC adresu mrežnog adaptera Ethernet ili onog koji koristite, kao i ostatak koda ako ga namjeravate prilagoditi drugačiji projekat. Ovo je samo primer!

Za više informacija možete preuzmite besplatno naš PDF priručnik s Arduino IDE tečajem za početak programiranja.


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.