MQTT: otvoreni mrežni protokol i njegova važnost u IoT-u

MQTT protokol mreža IoT

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

Zapravo je postao jedan od središnjih stupova IoT-a, jer je prilično dobar na uređajima s određenim ograničenjima prijenosa poput ovih. Kratica MQTT dolazi od 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

The komunikacijski protokoli To su pravila koja omogućuju međusobnu komunikaciju dvaju ili više uređaja ili sustava. Odnosno, radi se o protokolu za prijenos informacija na različite načine i u definiranom formatu, bilo da ih implementira softver i hardver (ili oboje).

El estándar protokola definira mnoštvo komunikacijskih karakteristika. To može ići od pravila sinkronizacije, semantike, sintakse, formata paketa itd. I istina je da oni nisu nešto zanemarivo, 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 (onaj koji je omogućio najveći broj dostupnih IP-ova i dolazak IoT), 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 se dva ili više IoT uređaja mogu međusobno komunicirati i razumjeti, a oni su obično M2M, odnosno komunikacija stroj-stroj. 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 sustav.

Također, moraju imati niska ovisnost spajanje između uređaja, tako da se problemi ne generiraju ako se uređaj ukloni. I naravno, istodobno se traži visoka interoperabilnost tako da radi s velikim brojem uređaja i vrlo raznolikim sustavima, budući da je svijet IoT-a prilično heterogen.

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

Važni pojmovi

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

Nadalje, 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 remodera usmjerivača još je jedan obrazac daljinskog izvršavanja procesa. U njemu uređaj (Callee) obavještava posrednika da će izvršiti određeni postupak, a posrednik 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 mogu se razlikovati dvije:

  • Red čekanja za poruke: usluga razmjene poruka gdje se generira jedan red poruka za sve klijente koji započnu pretplatu na posrednika. Potonji će čuvati poruke pohranjene sve dok ih ne dostave klijentu. Ako klijent ili primatelj nisu povezani, održavaju se dok se ne povežu. Te su vrste usluga poput onih koje se koriste u aplikacijama za razmjenu trenutnih poruka poput Telegra, WhatsApp, Messenger itd.
  • Usluga poruka: to je još jedna usluga u kojoj posrednik šalje poruke povezanom klijentu primatelja, filtrirajući prema vrsti poruke. Ako je klijent ili uređaj koji prima uređaj prekinut vezu, tada se poruke gube (iako možda ima neki sustav evidentiranja).

IoT protokoli

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

  • AMQP (napredni protokol za čekanje poruka): je PubSub tip protokola Reda 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 prijave): 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 prisutnost): još jedan protokol koji se koristi u IoT-u za aplikacije trenutnih poruka i zasnovan na XML-u. Jan, ovaj slučaj je također otvoren.
  • WMQ (Red za poruke WebSphere): protokol koji je razvio IBM. Tip je reda čekanja poruka, kao što mu samo ime govori, i orijentiran je na poruke.
  • MQTT: (vidi sljedeći odjeljak)

Sve o MQTT-u

MQTT paket

El MQTT protokol Radi se o komunikacijskom protokolu Message Queue, koji slijedi PubSub obrazac, i tipa M2M kao što sam već ranije komentirao. Široko se koristi u IoT-u, a temelji se na TCP / IP stogu koji se koristi na Internetu.

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

Prednost

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.
  • Asinhronost.
  • 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 kvaliteta za veću pouzdanost i robusnost u komunikacijama.

Povijest

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

La početna ideja bio je stvoriti protokol za nadzor cjevovoda koji je putovao kroz pustinju, s učinkovitim komunikacijskim protokolom (mala potrošnja propusnosti), svjetlošću i niskom potrošnjom energije. U to je vrijeme bio vrlo skup, ali sada je postao jeftin i otvoren protokol.

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

Kako funkcionira MQTT veza

MQTT protokol koristi filtar, za poruke koje se šalju svakom klijentu na temelju 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 čekanja i ne gube se dok klijent ne primi tu poruku.

Veze su, kao što sam također naznačio, uspostavljene putem TCP / IP-a, a poslužitelj ili posrednik će voditi evidenciju povezanih klijenata. Uređaji će prema zadanim postavkama koristiti komunikacijske priključke broj 1883, iako ćete se možda susresti i s priključkom 8883 ako za dodatnu sigurnost koristite SSL / TLS.

Da bi veza bila moguća, nisu potrebni samo klijenti, poslužitelji i luke. Također i drugi paketi ili poruke poslane za komunikaciju:

  • Uspostavite vezu: CONNECT poruku / paket koji klijent šalje sa svim potrebnim informacijama. Ti podaci uključuju korisnički ID, korisničko ime, lozinku itd. Posrednik ili poslužitelj 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 i 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: kako bi jamčili da veza ostaje otvorena, klijenti mogu povremeno slati PINGREQ paket koji će se podudarati s PINGRESP paketom s poslužitelja.
  • 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 duljinu. Za kodiranje duljine koristi se između 1-4 bajta, koristeći prvih 7 bitova svakog okteta kao podatke o duljini i dodatni bit kontinuiteta kako bi se utvrdilo da postoji više od jednog bajta koji čini duljinu poruke.
  • Varijabilno zaglavlje: nije uvijek obvezno, već neobavezno. Sadrži se samo u nekim paketima u određenim situacijama ili 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 Šifra
SPOJITI 0x10
POVEŽI 0x20
OBJAVITI 0x30
PUBACK 0x40
pubrec 0x50
PUBREL 0x60
pubcomp 0x70
PRETPLATITE SE 0x80
PODNAZAD 0x90
NEOTREČIVO 0xA0
OTPOZNATI SE 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
PREKINUTI 0xE0

Kvaliteta i sigurnost komunikacija

Još jedan važan detalj poruka MQTT-a je kvaliteta 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, može se utvrditi 3 različitih razina:

  • 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 je strana što je klijent mogao primiti istu poruku nekoliko puta.
  • QoS 2 (osiguran)- Slično kao gore, ali zajamčeno se isporučuje samo jednom. Često se koristi za kritičnije sustave gdje je potrebna veća pouzdanost.

S druge strane, što se tiče MQTT sigurnost, mogu se upotrijebiti razne mjere kako bi se osigurala njegova snaga u tom pogledu. Kao što sam već spomenuo, autorizacija korisničkog imena i lozinke, kao i mnogi drugi protokoli, može se osigurati pomoću SSL / TLS-a. Iako bi mnogi IoT uređaji s malim mogućnostima ili resursima mogli imati problema s preopterećenjem rada kada koriste ovu vrstu sigurne komunikacije ...

Iz tog razloga mnogi IoT uređaji koji koriste MQTT koriste lozinke i korisnike u sustavu tekst ravnine, što bi moglo natjerati nekoga da njuši mrežni promet da 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 s MQTT-om

Naravno, možete koristite MQTT protokol s Arduinom i druge razvojne ploče, kao i Rapsberry Pi itd. Da biste to učinili, morate svojoj ploči Arduino omogućiti povezivanje, ako je nema. Također, knjižnica Klijent Arduino za MQTT pomoći će vam u ovim zadacima. Ova je knjižnica kompatibilna sa:

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

Što prije kodu za korištenje MQTT-a u nekoj je primjeni istina da je to jednostavno. Na Fritzingovoj slici možete vidjeti pločicu Arduino UNO kojoj je dodana povezanost putem Arduino Etherneta i koja je također povezana senzor vlažnosti i temperature DHT22, iako je to moglo biti bilo što drugo ...

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

  • u 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);
}

  • u primati poruke by MQTT vam je potreban samo tanjur Arduino UNO i veza s Arduino Ethernetom 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 poslužitelj, 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 projekt. Ovo je samo primjer!

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


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.