MQTT: odprti omrežni protokol in njegov pomen v IoT

MQTT protokol omrežje IoT

Zapomni si ime MQTT, saj gre za omrežni komunikacijski protokol tipa M2M (Machine to Machine), ki bo zvenel precej. Po zaslugi nove dobe interneta stvari ali interneta stvari (Internet of Things) zaradi svoje kratice v angleščini postaja precej priljubljena. Poleg tega gre za odprt protokol, ki daje številne prednosti.

Pravzaprav je postal eden osrednjih stebrov interneta stvari, saj je kar dober pri napravah z nekaterimi omejitvami prenosa, kot so te. Kratica MQTT prihaja iz Telemetrični transport v čakalni vrsti, odprti standard OASIS in ISO (ISO / IEC 20922) za omrežne komunikacije in na splošno deluje na znamenitem TCP / IP.

Omrežni protokoli

Model OSI in njegove plasti

P komunikacijskih protokolov so pravila, ki omogočajo medsebojno komunikacijo dveh ali več naprav ali sistemov. To pomeni, da gre za protokol za prenos informacij na različne načine in v določeni obliki, ne glede na to, ali jih izvaja programska in strojna oprema (ali oboje).

El Estandar protokola opredeljuje množico komunikacijskih značilnosti. Lahko gre od pravil sinhronizacije, semantike, sintakse, oblike paketa itd. In resnica je, da niso nekaj zanemarljivega, saj lahko danes po teh protokolih uporabljamo internet in druga komunikacijska omrežja ...

In seveda ni samo en protokol, ampak več. Na primer slavni DNS, FTP, MQTT, HTTP in HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP itd., Za aplikacijski sloj. Medtem ko v transportnem sloju najdete nekaj tako znanih, kot so TCP, UDP itd., Pa tudi tiste iz internetnega sloja, kot je IPv4 ali IPv6 (tisti, ki je omogočil največje število razpoložljivih IP-jev in prihod IoT), IPSec itd. in drugi iz povezovalne plasti, kot so DSL, Ethernet, WiFi, ARP itd.

O protokolih IoT

Protokol MQTT

Seveda obstajajo posebni komunikacijski protokoli ali pa jih je mogoče uporabiti za Internet stvari. Se pravi, glede na prejšnji odsek bi bili vrsta opredeljenih standardov, tako da lahko dve ali več naprav interneta stvari komunicirata in se razumeta, običajno pa so to M2M, to je komunikacija med stroji. veliko naprav IoT je povezanih in delijo informacije s senzorjev ali drugih virov.

Zaradi velikega števila naprav IoT morajo ti protokoli izpolnjevati zahteve, ki presegajo omejitve pasovne širine, hitrosti itd. (upoštevajte, da je veliko naprav vgrajenih in poceni), kar je običajno v nekaterih napravah. In mislim na dejstvo, da mora biti prilagodljiv, da lahko po potrebi dodate več povezanih naprav in ne da bi to vplivalo na globalni sistem.

Prav tako morajo imeti nizka odvisnost povezovanje med napravami, tako da težave ne nastanejo, če napravo odstranite. In seveda se hkrati išče visoka interoperabilnost, tako da deluje z velikim številom naprav in zelo raznolikimi sistemi, saj je svet interneta stvari precej heterogen.

Druge uporabne funkcije bi bile enostavnost njihove izvedbe, varnostitd. Upoštevajte, da IoT ustvarja velike varnostne izzive. Še bolj, ko so številne povezane naprave v določenih primerih običajno kritične ... na primer igrače za mladoletnike.

Pomembni koncepti

Kljub temu je treba povedati, da rešitve za IoT uporabljajo centraliziran strežnik za sprejemanje sporočil vseh povezanih naprav, ki jih oddajajo, in jih distribuirajo med vsemi povezanimi napravami IoT, ki poslušajo. Ta strežnik je tisto, kar je znano kot usmerjevalnik ali posrednik. Nekaj, kar je na nek način daleč od običajnih odnosov odjemalec-strežnik.

Poleg tega metodologij ki jih lahko najdete v teh komunikacijskih protokolih za IoT, so:

  • PubSub: Objavi / Prekliči je vzorec sporočanja, pri katerem naprava (Sub) posrednika obvesti, da želi prejeti sporočilo, druga naprava (Pub) pa objavi sporočila, ki jih posrednik posreduje drugim napravam, ki jih čakajo.
  • rRPC: Poklic postopka preoblikovalnika usmerjevalnika je še en vzorec oddaljenega izvajanja procesa. V njem naprava (Callee) posrednika obvesti, da bo izvedel določen postopek, posrednik pa ga razdeli drugi napravi (klicatelju), na kateri se omenjeni postopek izvede.

Zdaj, da bi izvedli te metodologije ali vzorce, a infrastruktura za sporočanje. In v tem smislu lahko ločimo dva:

  • Čakalna vrsta sporočil: storitev sporočanja, pri kateri se ustvari ena vrsta sporočil za vse odjemalce, ki začnejo naročnino na posrednika. Slednja bodo shranila sporočila, dokler ne bodo dostavljena odjemalcu. Če odjemalec ali prejemnik nista povezana, se ohrani, dokler ni povezan. Te vrste storitev so podobne tistim, ki se uporabljajo v aplikacijah za takojšnje sporočanje, kot so Telegra, WhatsApp, Messenger itd.
  • Sporočila: gre za drugo storitev, pri kateri posrednik pošlje sporočila priključenemu prejemnikovemu odjemalcu in filtrira po vrsti sporočila. Če sta odjemalca ali sprejemna naprava prekinjena, se sporočila izgubijo (čeprav ima morda kakšen dnevniški sistem).

IoT protokoli

Ko smo videli zgoraj, si poglejmo podrobneje IoT protokoli ki so bolj znane. Med najpomembnejšimi M2M so:

  • AMQP (protokol za napredno čakanje na sporočila): je protokol vrste PubSub v čakalni vrsti za sporočila. Zasnovan za dobro interoperabilnost in zagotavlja zanesljivost. Posebej za poslovne aplikacije, visoko zmogljive mreže, omrežja z veliko zakasnitvijo, kritične itd.
  • WAMP (protokol za sporočanje spletnih aplikacij): je še en odprt protokol tipa PubSub, kot je rRPC, in deluje na WebSockets.
  • CoAP (Omejeni aplikacijski protokol): je protokol, posebej zasnovan za aplikacije z majhno zmogljivostjo.
  • TOMP (protokol za pretakanje besedilnih sporočil): zelo preprost protokol in doseganje največje interoperabilnosti. HTTP se uporablja za prenos besedilnih sporočil.
  • XMPP (razširljiv protokol za sporočanje in prisotnost): še en protokol, ki se v IoT uporablja za aplikacije za takojšnje sporočanje in temelji na XML. Jan je tudi ta primer odprt.
  • WMQ (čakalna vrsta sporočil WebSphere): protokol, ki ga je razvil IBM. Kot že ime pove, je vrste Čakalna vrsta sporočil in je usmerjena v sporočila.
  • MQTT: (glej naslednji razdelek)

Vse o MQTT

Paket MQTT

El Protokol MQTT Gre za komunikacijski protokol Message Queue, ki sledi vzorcu PubSub in je tipa M2M, kot sem že omenil. Veliko se uporablja v IoT in temelji na svežnju TCP / IP, ki se uporablja v internetu.

V primeru MQTT vsaka povezava ostane odprta in se ponovno uporabi v vsaki potrebni komunikaciji. Nekaj ​​drugačnega od tega, kar se dogaja v drugih znanih protokolih, je, da vsaka komunikacija zahteva novo povezavo.

Prednost

Prednosti protokola MQTT so očitne v smislu komunikacije M2M za IoT. Poleg vsega zgoraj navedenega gre za protokol, ki zagotavlja:

  • Razširljivost za povezovanje vedno več kupcev.
  • Ločevanje med strankami, za manjšo odvisnost.
  • Asinhronost.
  • Preprostost.
  • Lahkotnost, da ne porabite preveč virov (čeprav z varnostjo TLS / SSL narašča).
  • Energijsko učinkovit za naprave, ki so odvisne od baterije ali delujejo 24 ur na dan, 7 dni v tednu, ne potrebuje velike pasovne širine (idealno za počasne povezave, kot so nekatere brezžične).
  • Varnost in kakovost za večjo zanesljivost in robustnost komunikacij.

zgodovina

MQTT je bil ustvarjen v devetdesetih letih prejšnje različice protokola leta 1999. Ustvarila sta ga dr. Andy Stanford-Clark iz IBM-a in Arlen Nipper iz podjetja Cirrus Link (prej Eurotech).

La začetna ideja je bil ustvariti protokol za spremljanje cevovoda, ki je potoval skozi puščavo, z učinkovitim komunikacijskim protokolom (nizka poraba pasovne širine), svetlobo in nizko porabo energije. Takrat je bil zelo drag, zdaj pa je postal poceni in odprt protokol.

Začetni protokol je bil izboljšan z videzom nove različice, na primer MQTT v3.1 (2013) po specifikaciji OASIS (Organizacija za napredek strukturiranih informacijskih standardov) itd. Vedeti morate, da je bil na začetku lastniški protokol IBM, vendar bo izdan leta 2010, na koncu pa je postal standard v OASIS ...

Kako deluje povezava MQTT

Protokol MQTT uporablja filter, za sporočila, ki se pošljejo vsakemu odjemalcu na podlagi tem ali tem, ki so organizirane hierarhično. Na ta način lahko kupec objavi sporočilo na določeno temo. Na ta način bodo vsi odjemalci ali povezane naprave, ki so naročene na temo, prejemale sporočila prek posrednika.

Tako kot MQ, sporočila bodo ostala v čakalni vrsti in se ne izgubijo, dokler stranka ne prejme tega sporočila.

Povezave, kot sem tudi omenil, so vzpostavljene prek TCP / IP, strežnik ali posrednik pa bo vodil evidenco povezanih odjemalcev. Naprave bodo privzeto uporabljale komunikacijska vrata številka 1883, čeprav lahko naletite tudi na vrata 8883, če za dodatno varnost uporabljate SSL / TLS.

Da bi bila povezava mogoča, niso potrebni le odjemalci, strežniki in vrata. Tudi drugi paketov ali sporočil za komunikacijo:

  • Vzpostavite povezavo: CONNECT sporočilo / paket, ki ga pošlje odjemalec z vsemi potrebnimi informacijami. Ti podatki vključujejo ID stranke, uporabniško ime, geslo itd. Posrednik ali strežnik odgovori s paketom CONNACK, ki bo odjemalca obvestil, da je bila povezava sprejeta, zavrnjena itd.
  • Pošiljanje in prejemanje sporočil: ko je povezava vzpostavljena, se PUBLISH paketi ali sporočila uporabijo s temo in koristnim tovorom sporočila, poslanega posredniku. Po drugi strani pa se zainteresirana stranka ali stranke za naročanje ali preklic naročnine s paketoma SUBSCRIBE in UNSUSCRIBE. Posrednik se bo odzval tudi s paketoma SUBACK in UNSUBACK, da bo poročal o uspehu operacije, ki jo zahteva stranka.
  • Vzdrževanje povezave: za zagotovitev, da povezava ostane odprta, lahko stranke s strežnika občasno pošljejo paket PINGREQ, ki se bo ujemal s paketom PINGRESP.
  • Končna povezava: ko odjemalec prekine povezavo, pošlje paket DISCONNECT, da poroča o tem dogodku.

Tisti sporočil ali paketov Tisti, o katerih sem že govoril, imajo enako strukturo kot drugi paketi drugih omrežnih protokolov:

  • Glava ali fiksna glava: je fiksni del, ki zavzame med 2-5 bajti. Vsebuje nadzorno kodo, ID vrste poslanega sporočila in njegovo dolžino. Za kodiranje dolžine se uporablja med 1 in 4 bajti, pri čemer se prvih 7 bitov vsakega okteta uporabijo kot podatki za dolžino in dodaten bit neprekinjenosti, da se ugotovi, da dolžino sporočila sestavlja več kot en bajt.
  • Spremenljiva glava: ni vedno obvezen, ampak neobvezen. Vsebuje ga le nekaj paketov v določenih situacijah ali določenih sporočilih.
  • Vsebina ali podatki: paketni podatki so tisto, kar dejansko vsebuje sporočilo, ki ga je treba poslati. Lahko je od nekaj kB do 256 MB.

Če vas zanima ustrezna koda v šestnajstiški za vrste poslanih sporočil so:

sporočilo Koda
CONNECT 0x10
POVEŽI 0x20
OBJAVITE 0x30
PAKIRANJE 0x40
pubrec 0x50
PUBREL 0x60
pubcomp 0x70
NAROČITE SE 0x80
PODZAD 0x90
NEPRESKRIVNO 0xA0
ODSTRANITE SE 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
PREKINITE 0xE0

Kakovost in varnost komunikacij

Druga pomembna podrobnost sporočil MQTT je kakovost storitve ali QoSin varnost. Od tega bo odvisna robustnost komunikacijskega sistema v primeru okvar in njegova varnost.

Glede kakovosti je mogoče določiti 3 različnih stopenj:

  • QoS 0 (nepriznan): sporočilo je poslano samo enkrat in v primeru okvare ne bo dostavljeno. Uporablja se, kadar ni kritično.
  • QoS 1 (potrdi): sporočilo bo poslano tolikokrat, kolikor je potrebno za zagotovitev dostave kupcu. Slaba stran je, da bi lahko stranka večkrat prejela isto sporočilo.
  • QoS 2 (zagotovljeno)- Podobno kot zgoraj, vendar zagotovljeno, da bo dostavljeno le enkrat. Pogosto se uporablja za bolj kritične sisteme, kjer je potrebna večja zanesljivost.

Po drugi strani pa za Varnost MQTT, se lahko v zvezi s tem zagotovijo različni ukrepi. Kot sem že omenil, lahko avtorizacijo uporabniškega imena in gesla, tako kot mnoge druge protokole, zagotovimo s pomočjo SSL / TLS. Čeprav bi lahko številne naprave IoT z majhno zmogljivostjo ali viri imele težave s preobremenjenostjo dela pri uporabi te vrste varne komunikacije ...

Zato številne naprave IoT, ki uporabljajo MQTT, uporabljajo gesla in uporabnike v besedilo ravnine, zaradi česar bi lahko nekdo povohal omrežni promet, da bi ga zelo enostavno dobil. Če to ni dovolj, je posrednik lahko nastavljen tudi za sprejemanje anonimnih povezav, kar bi vsakemu uporabniku omogočilo vzpostavitev komunikacije, ki vključuje večje tveganje.

Uporaba MQTT z Arduinom

Arduino UNO z MQTT

Seveda lahko uporabite protokol MQTT z Arduino in druge razvojne plošče, pa tudi Rapsberry Pi itd. Če želite to narediti, morate svoji plošči Arduino zagotoviti povezljivost, če je nima. Tudi knjižnica Naročnik Arduino za MQTT vam bo pomagal pri teh nalogah. Ta knjižnica je združljiva z:

Že veste, da lahko knjižnico prenesete in namestite v svoj Arduino IDE z ukazom: klon git https://github.com/knolleary/pubsubclient.git

Takoj, ko kodi za uporabo MQTT v nekaterih aplikacijah je resnica preprosta. Na sliki Fritzing lahko vidite ploščo Arduino UNO na katerega je povezljivost dodal Arduino Ethernet in je bil tudi povezan senzor vlažnosti in temperature DHT22, čeprav bi lahko bilo karkoli drugega ...

Ok, s tem rečeno, za kodo, ki jo morate ustvariti Arduino IDE Če želite delati s protokolom MQTT na Arduinu, je tako preprosto:

  • za pošiljanje sporočil 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);
}

  • za prejemanje sporočil z MQTT potrebujete samo ploščo Arduino UNO in povezava z Arduino Ethernetom ali katerim koli drugim elementom. Kar zadeva kodo, bi bil primer:
#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();
}

Ne pozabite, da morate IP spremeniti v ustreznega za strežnik, spremeniti pa morate tudi naslov MAC omrežnega vmesnika Ethernet ali tistega, ki ga uporabljate, pa tudi ostalo kodo, če jo nameravate prilagoditi drugačen projekt. To je samo primer!

Za več informacij lahko prenesi brezplačno naše PDF priročnik s tečajem Arduino IDE za začetek programiranja.


Bodite prvi komentar

Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.