MQTT: otvorený sieťový protokol a jeho význam v IoT

Sieť protokolu MQTT IoT

Pamätajte si meno MQTT, pretože to bude pomerne dobre znieť sieťový komunikačný protokol typu M2M (Machine to Machine). Stáva sa pomerne populárnym vďaka novej ére internetu vecí alebo internetu vecí (IoT) pre svoju skratku v angličtine. Okrem toho je to otvorený protokol, ktorý poskytuje veľa výhod.

V skutočnosti sa stal jedným z centrálnych pilierov IoT, pretože je celkom dobrý na zariadeniach s niektorými obmedzeniami prenosu, ako sú tieto. Skratka MQTT pochádza z Transport telemetrie frontu správ, otvorený štandard od OASIS a ISO (ISO / IEC 20922) pre sieťovú komunikáciu, ktorý zvyčajne beží na slávnom protokole TCP / IP.

Sieťové protokoly

OSI model a jeho vrstvy

undefined komunikačné protokoly Sú to pravidlá, ktoré umožňujú vzájomnú komunikáciu dvoch alebo viacerých zariadení alebo systémov. To znamená, že ide o protokol na prenos informácií rôznymi prostriedkami a v definovanom formáte, či už implementovaný softvérom a hardvérom (alebo oboma).

El standard protokolu definuje množstvo komunikačných charakteristík. Môže ísť z pravidiel synchronizácie, sémantiky, syntaxe, formátu paketu atď. A pravdou je, že nie sú zanedbateľné, pretože vďaka týmto protokolom dnes môžeme využívať internet a ďalšie komunikačné siete ...

A samozrejme, nie je len jeden protokol, ale aj veľa. Napríklad, slávny DNS, FTP, MQTT, HTTP a HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP atď. Pre aplikačnú vrstvu. Zatiaľ čo v transportnej vrstve nájdete známe TCP, UDP atď., Ako aj vrstvu internetovej vrstvy ako IPv4 alebo IPv6 (tá, ktorá umožnila najväčší počet dostupných adries IP a príchod IoT), IPSec atď. a ďalšie z odkazovej vrstvy, napríklad DSL, Ethernet, WiFi, ARP atď.

O protokoloch IoT

Protokol MQTT

Samozrejmosťou sú špecifické komunikačné protokoly alebo protokoly, ktoré je možné aplikovať na server IoT. To znamená, že vzhľadom na predchádzajúcu časť by išlo o sériu definovaných štandardov, aby dve alebo viac zariadení IoT mohli komunikovať a navzájom si rozumieť, a zvyčajne ide o M2M, to znamená komunikáciu medzi strojmi. veľa zariadení IoT pripojených a zdieľajúcich informácie zo senzorov alebo iných zdrojov.

Kvôli veľkému počtu zariadení IoT musia tieto protokoly vyhovovať požiadavkám presahujúcim obmedzenia šírky pásma, rýchlosti atď. (všimnite si, že veľa zariadení je zabudovaných a lacných), čo je zvyčajne v niektorých zariadeniach. A myslím tým skutočnosť musí byť škálovateľný, aby bolo možné v prípade potreby pridať ďalšie pripojené zariadenia a bez ovplyvnenia globálneho systému.

Tiež musia mať a nízka závislosť spojenie medzi zariadeniami, aby po odstránení zariadenia nedochádzalo k problémom. Zároveň sa samozrejme hľadá vysoká interoperabilita, aby fungovala s veľkým počtom zariadení a veľmi rozmanitými systémami, pretože svet internetu vecí je dosť heterogénny.

Ďalšími užitočnými funkciami by bola ľahká implementácia, zabezpečenia, atď. Majte na pamäti, že IoT vytvára veľké výzvy v bezpečnostnom aspekte. O to viac, keď veľa pripojených zariadení býva v určitých prípadoch kritických ... napríklad hračky pre maloletých.

Dôležité pojmy

Je potrebné povedať, že je potrebné povedať, že riešenia pre IoT používajú centralizovaný server na príjem správ zo všetkých pripojených zariadení, ktoré ich emitujú, a distribúciu na všetky pripojené zariadenia IoT, ktoré počúvajú. Tento server je známy ako router alebo broker. Niečo, čo má v niektorých ohľadoch ďaleko od konvenčného vzťahu klient-server.

Okrem toho, metodológie ktoré nájdete v týchto komunikačných protokoloch pre IoT:

  • Pubsub: Publish / Susbcribe je vzor správ, pri ktorom zariadenie (Sub) informuje sprostredkovateľa, že chce prijať správu, zatiaľ čo iné zariadenie (Pub) zverejní správy, ktoré má sprostredkovateľ distribuovať na ďalšie zariadenie / zariadenia a čaká na ne.
  • rRPC: Volanie procedúry remodéra smerovača je ďalším vzorom vzdialeného vykonávania procesu. V ňom zariadenie (Callee) informuje sprostredkovateľa, že vykoná určitý postup, a sprostredkovateľ ho distribuuje do iného zariadenia (volajúceho), na ktorom je uvedený proces vykonaný.

Teraz, aby sme vykonali tieto metodiky alebo vzorce, a infraštruktúra pre zasielanie správ. A v tomto zmysle možno rozlíšiť dva:

  • Fronta správ: služba správ, kde sa vygeneruje jeden front správ pre všetkých klientov, ktorí začnú predplatné sprostredkovateľovi. Ten uchová správy uložené, kým nebudú doručené klientovi. Ak klient alebo príjemca nie sú pripojení, bude sa udržiavať, kým nebudú pripojení. Tieto typy služieb sú podobné tým, ktoré sa používajú v aplikáciách na okamžité správy, ako sú Telegra, WhatsApp, Messenger atď.
  • Služba správ: je to ďalšia služba, v ktorej sprostredkovateľ odosiela správy pripojenému klientovi príjemcu a filtruje ich podľa typu správy. Ak je klient alebo prijímajúce zariadenie odpojené, správy sa stratia (aj keď môže mať určitý systém protokolovania).

Protokoly IoT

Keď sme videli vyššie uvedené, pozrime sa teraz bližšie Protokoly IoT ktoré sú známejšie. Medzi najvýznamnejšie z M2M patria:

  • AMQP (Advanced Message Queuing Protocol): je protokol typu PubSub frontu správ. Navrhnuté pre dobrú interoperabilitu a zaistenie spoľahlivosti. Špeciálne pre podnikové aplikácie, vysoký výkon, siete s vysokou latenciou, kritické atď.
  • WAMP (protokol webových správ): je to ďalší otvorený protokol typu PubSub ako rRPC a beží na WebSockets.
  • CoAP (obmedzený aplikačný protokol): je protokol špeciálne navrhnutý pre aplikácie s nízkou kapacitou.
  • TOMP (Protokol správ o zameraní na vysielanie textu): veľmi jednoduchý protokol a na dosiahnutie maximálnej interoperability. Na prenos textových správ sa používa protokol HTTP.
  • XMPP (rozšírené správy správ a protokol prítomnosti): ďalší protokol používaný v IoT pre aplikácie okamžitých správ a založený na XML. Jan tento prípad je tiež otvorený.
  • WMQ (front správ WebSphere): protokol vyvinutý spoločnosťou IBM. Je typu Správa frontu správ, ako už naznačuje jeho názov, a je orientovaný na správy.
  • MQTT: (pozri nasledujúcu časť)

Všetko o užívateľovi MQTT

Balíček MQTT

El Protokol MQTT Jedná sa o komunikačný protokol Message Queue, ktorý sa riadi vzorom PubSub, a typu M2M, ako som už spomínal. Je široko používaný v IoT a je založený na zásobníku TCP / IP používanom na internete.

V prípade MQTT každé spojenie je stále otvorené a znova sa používa pri každej potrebnej komunikácii. Niečo odlišné od toho, čo sa deje v iných známych protokoloch, že každá komunikácia prebieha, si vyžaduje nové pripojenie.

Výhoda

Výhody protokolu MQTT sú celkom zrejmé z hľadiska M2M komunikácie pre IoT. Okrem všetkého vyššie uvedeného je to protokol, ktorý poskytuje:

  • Škálovateľnosť, aby sa pripojilo viac a viac zákazníkov.
  • Oddelenie medzi klientmi, pre menšiu závislosť.
  • Asynchrónnosť.
  • Jednoduchosť.
  • Ľahkosť, aby sa nespotrebovalo príliš veľa zdrojov (aj keď s bezpečnosťou TLS / SSL to stúpa).
  • Energeticky efektívne pre zariadenia, ktoré závisia od batérie alebo pracujú nepretržite, nepotrebujú veľkú šírku pásma (ideálne pre pomalé pripojenie, napríklad niektoré bezdrôtové).
  • Bezpečnosť a kvalita pre vyššiu spoľahlivosť a odolnosť v komunikácii.

História

MQTT bol vytvorený v 90. rokoch s ranou verziou protokolu v roku 1999. Vytvorili ju Dr. Andy Stanford-Clark z IBM a Arlen Nipper z Cirrus Link (predtým Eurotech).

La prvotný nápad bolo vytvoriť protokol na sledovanie potrubia, ktoré cestovalo cez púšť, s efektívnym komunikačným protokolom (nízka spotreba šírky pásma), svetlom a nízkou spotrebou energie. V tom čase to bolo veľmi drahé, ale teraz sa z toho stal lacný a otvorený protokol.

Počiatočný protokol bol vylepšený s výskytom nové verzie, ako napríklad MQTT v3.1 (2013) podľa špecifikácie OASIS (Organizácia pre pokrok v štandardoch štruktúrovaných informácií) atď. Mali by ste vedieť, že na začiatku to bol proprietárny protokol od IBM, ale že bude vydaný v roku 2010 a nakoniec sa stal štandardom v OASIS ...

Ako funguje pripojenie MQTT

Používa protokol MQTT filterpre správy odosielané každému klientovi na základe tém alebo tém, ktoré sú hierarchicky usporiadané. Týmto spôsobom môže zákazník uverejniť správu na konkrétnu tému. Týmto spôsobom budú všetci klienti alebo pripojené zariadenia, ktoré sa prihlásia na odber témy, dostávať správy prostredníctvom sprostredkovateľa.

Rovnako ako MQ, správy zostanú v poradí a nestratia sa, kým klient túto správu nedostane.

Pripojenia, ako som tiež naznačil, sú vykonané cez TCP / IPa server alebo sprostredkovateľ bude viesť záznamy o pripojených klientoch. V predvolenom nastavení budú zariadenia používať komunikačné porty číslo 1883, hoci port 8883 nájdete aj v prípade, že na zvýšenie bezpečnosti používate SSL / TLS.

Aby bolo pripojenie možné, nie sú potrebné iba klienti, server a porty. Aj iné balíkov alebo odoslaných správ pre komunikáciu:

  • Nadviazať spojenie: CONNECT správa / paket odoslaný klientom so všetkými potrebnými informáciami. Tieto informácie zahŕňajú ID zákazníka, používateľské meno, heslo atď. Sprostredkovateľ alebo server odpovie paketom CONNACK, ktorý klienta informuje, že pripojenie bolo prijaté, odmietnuté atď.
  • Posielajte a prijímajte správy: Po nadviazaní spojenia sa PUBLIKUJÚ balíčky alebo správy s témou a užitočným obsahom správy zaslanej sprostredkovateľovi. Na druhej strane zainteresovaný klient alebo klienti používajú na predplatné alebo výber predplatného balíčky SUBSCRIBE a UNSUSCRIBE. Sprostredkovateľ tiež odpovie balíkom SUBACK a UNSUBACK, aby oznámil úspešnosť operácie požadovanej klientom.
  • Udržiavanie spojenia: aby bolo zaručené, že pripojenie zostane otvorené, môžu klienti zo servera pravidelne posielať pakety PINGREQ, ktoré sa porovnajú s paketom PINGRESP.
  • Ukončiť pripojenie: keď sa klient odpojí, odošle paket DISCONNECT na nahlásenie tejto udalosti.

Tých správy alebo balíčky Tie, o ktorých som hovoril, majú rovnakú štruktúru ako iné pakety iných sieťových protokolov:

  • Hlavička alebo pevná hlavička: je pevná časť, ktorá zaberá 2 až 5 bajtov. Obsahuje riadiaci kód, ID typu odosielanej správy a jeho dĺžku. Na kódovanie dĺžky sa používa 1 až 4 bajty. Prvých 7 bitov každého oktetu sa použije ako údaj o dĺžke a ďalší bit spojitosti na zistenie, že dĺžku správy tvorí viac ako jeden bajt.
  • Variabilná hlavička: nie je vždy povinné, ale voliteľné. Je obsiahnutý iba v niektorých balíkoch v určitých situáciách alebo v konkrétnych správach.
  • Obsah alebo údaje: paketové dáta sú vlastne tie, ktoré obsahujú správu na odoslanie. Môže to byť od niekoľkých kB až po limit 256 MB.

Ak máte záujem vedieť zodpovedajúci kód v šestnástkovej sústave pre typy odosielaných správ sú:

správa Kód
CONNECT 0x10
SPOJIŤ SA 0x20
ZVEREJŇOVAŤ 0x30
VEREJNÝ 0x40
pubrec 0x50
Krčma 0x60
pubcomp 0x70
PREDPLATIŤ 0x80
VONKAJŠÍ 0x90
NEPOPIS 0xA0
ZRUŠIŤ 0xb0
PINGREQ 0xC =
PINGRESP 0xd0
ODPOJTE SA 0xE0

Kvalita a bezpečnosť komunikácií

Ďalším dôležitým detailom správ od MQTT je kvalita služieb alebo QoSa bezpečnosť. Od toho bude závisieť robustnosť komunikačného systému v prípade porúch a jeho bezpečnosť.

Čo sa týka jeho kvality, dá sa to určiť 3 rôznych úrovní:

  • QoS 0 (nepotvrdenie)- Správa sa odosiela iba raz a v prípade poruchy by sa nedoručila. Používa sa, keď to nie je kritické.
  • QoS 1 (potvrdiť): správa sa odošle toľkokrát, koľkokrát je potrebné na zaručenie doručenia zákazníkovi. Zlé je, že klient mohol dostať tú istú správu niekoľkokrát.
  • QoS 2 (zaistené)- Podobné ako vyššie, ale je zaručené, že budú doručené iba raz. Často sa používa pre kritickejšie systémy, kde je potrebná vyššia spoľahlivosť.

Na druhej strane, čo sa týka MQTT bezpečnosť, je možné použiť rôzne opatrenia na zabezpečenie jeho sily v tejto súvislosti. Ako som už uviedol predtým, autentifikáciu používateľa a hesla, podobne ako mnoho iných protokolov, možno zabezpečiť pomocou protokolu SSL / TLS. Aj keď mnoho zariadení IoT s nízkou kapacitou alebo zdrojmi môže mať pri používaní tohto typu zabezpečenej komunikácie problémy s preťažením práce ...

Z tohto dôvodu mnoho zariadení IoT, ktoré používajú MQTT, používa heslá a používateľov v serveri rovinný text, čo by mohlo niekoho prinútiť pričuchnúť k sieťovej premávke, aby ich získal veľmi ľahko. A ak to nestačí, sprostredkovateľa je možné nakonfigurovať aj na prijímanie anonymných pripojení, čo by každému používateľovi umožňovalo nadviazať komunikáciu, čo by znamenalo väčšie riziko.

Používanie MQTT s Arduinom

Arduino UNO s MQTT

Samozrejme môžete použite protokol MQTT s Arduinom a ďalšie vývojové dosky, ako aj Rapsberry Pi atď. Aby ste to dosiahli, musíte svojej doske Arduino poskytnúť konektivitu, ak ju nemá. Tiež knižnica Arduino klient pre MQTT pomôže vám pri týchto úlohách. Táto knižnica je kompatibilná s:

Už viete, že knižnicu si môžete stiahnuť a nainštalovať do svojho Arduino IDE pomocou príkazu: git klon https://github.com/knolleary/pubsubclient.git

Akonáhle do kódu na použitie MQTT v niektorých aplikáciách je pravda taká, že je to jednoduché. Na obrázku Fritzing vidíte plaketu Arduino UNO ku ktorej bola pridaná konektivita prostredníctvom Arduino Ethernet a bola tiež pripojená snímač vlhkosti a teploty DHT22, hoci to mohlo byť čokoľvek iné ...

Dobre, s týmto povedané, pre kód, ktorý musíte vygenerovať Arduino IDE Ak chcete pracovať s protokolom MQTT na Arduine, je to také jednoduché:

  • na posielať správy 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);
}

  • na prijímať správy od MQTT potrebujete iba tanier Arduino UNO a spojenie s Arduino Ethernetom alebo akýmkoľvek iným prvkom. Pokiaľ ide o kód, príkladom by bolo:
#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();
}

Pamätajte, že musíte zmeniť IP na vhodnú pre server a musíte tiež zmeniť MAC adresu vášho sieťového adaptéra Ethernet alebo toho, ktorý používate, ako aj zvyšok kódu, ak ho chcete prispôsobiť iný projekt. Toto je iba príklad!

Pre viac informácií môžete stiahnuť zadarmo Nuestro PDF príručka s kurzom Arduino IDE na začatie programovania.


Buďte prvý komentár

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.