MQTT: otevřený síťový protokol a jeho význam v IoT

Síť IoT protokolu MQTT

Zapamatuj si to jméno MQTT, protože se jedná o síťový komunikační protokol typu M2M (Machine to Machine), který bude hodně znít. Stává se docela populární díky nové éře internetu věcí nebo IoT (internet věcí) pro svou zkratku v angličtině. Kromě toho se jedná o otevřený protokol, který poskytuje mnoho výhod.

Ve skutečnosti se stal jedním z centrálních pilířů IoT, protože je docela dobrý na zařízeních s některými omezeními přenosu, jako jsou tato. Zkratka MQTT pochází z Telemetrie Transport Message Queuing, otevřený standard od OASIS a ISO (ISO / IEC 20922) pro síťovou komunikaci a který obecně běží na slavném TCP / IP.

Síťové protokoly

OSI model a jeho vrstvy

L komunikační protokoly Jsou to pravidla, která umožňují vzájemné komunikaci dvou nebo více zařízení nebo systémů. To znamená, že se jedná o protokol k přenosu informací různými prostředky a v definovaném formátu, ať už je implementován softwarem a hardwarem (nebo obojím).

El standardní protokolu definuje velké množství komunikačních charakteristik. Může jít z pravidel synchronizace, sémantiky, syntaxe, formátu paketu atd. A pravdou je, že nejsou zanedbatelné, protože díky těmto protokolům dnes můžeme používat internet a další komunikační sítě ...

A samozřejmě neexistuje jen jeden protokol, ale mnoho. Například, známý DNS, FTP, MQTT, HTTP a HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP atd. Pro aplikační vrstvu. Zatímco v transportní vrstvě najdete známé jako TCP, UDP atd., Stejně jako vrstvy internetové, jako je IPv4 nebo IPv6 (ta, která umožnila největší počet dostupných IP adres a příchod IoT), IPSec atd. a další z linkové vrstvy, jako je DSL, Ethernet, WiFi, ARP atd.

O protokolech IoT

Protokol MQTT

Samozřejmě existují specifické komunikační protokoly nebo je lze použít na Internet věcí. To znamená, s ohledem na předchozí část, by to byla řada definovaných standardů, aby dvě nebo více zařízení IoT mohla komunikovat a vzájemně si rozumět, a jsou to obvykle M2M, tj. Komunikace mezi stroji. připojeno mnoho zařízení IoT a sdílení informací ze senzorů nebo jiných zdrojů.

Vzhledem k velkému počtu zařízení IoT musí tyto protokoly splňovat požadavky nad rámec omezení šířky pásma, rychlosti atd. (Všimněte si, že mnoho zařízení je vestavěných a levných), což je obvykle v některých zařízeních. A myslím tím fakt musí být škálovatelné, abychom mohli v případě potřeby přidat další připojená zařízení a bez ovlivnění globálního systému.

Také musí mít nízká závislost propojení mezi zařízeními, aby při odebrání zařízení nedocházelo k problémům. A samozřejmě se současně hledá vysoká interoperabilita, aby fungovala s velkým počtem zařízení a velmi rozmanitými systémy, protože svět IoT je docela heterogenní.

Mezi další užitečné funkce patří snadnost jejich implementace, zabezpečení, atd. Mějte na paměti, že IoT vytváří velké výzvy v bezpečnostním aspektu. Ještě více, když mnoho připojených zařízení bývá v určitých případech kritických ... například hračky pro nezletilé.

Důležité koncepty

To znamená, že je třeba říci, že řešení pro IoT používají centralizovaný server k přijímání zpráv ze všech připojených zařízení, která vysílají, a distribuují je na všechna připojená zařízení IoT, která poslouchají. Tento server je známý jako router nebo broker. Něco, co je v některých ohledech daleko od konvenčního vztahu klient-server.

Kromě toho, metodiky v těchto komunikačních protokolech pro IoT najdete:

  • PubSub: Publish / Susbcribe je vzor zasílání zpráv, kdy zařízení (Sub) informuje makléře, že chce obdržet zprávu, zatímco jiné zařízení (Pub) publikuje zprávy, které má broker distribuovat do jiného zařízení / zařízení a čeká na ně.
  • rRPC: Volání procedur Remoder Router je dalším vzorem vzdáleného provádění procesu. V něm zařízení (Callee) informuje zprostředkovatele, že provede určitý postup, a zprostředkovatel jej distribuuje do jiného zařízení (volajícího), na kterém je uvedený proces spuštěn.

Nyní, abychom provedli tyto metodiky nebo vzorce, a infrastruktura zasílání zpráv. A v tomto smyslu lze rozlišit dva:

  • Fronta zpráv: služba zasílání zpráv, kde je generována jedna fronta zpráv pro všechny klienty, kteří zahájí předplatné brokera. Ten uchová zprávy uložené, dokud nebudou doručeny klientovi. Pokud klient nebo příjemce není připojen, bude udržován, dokud nebude připojen. Tyto typy služeb jsou podobné těm, které se používají v aplikacích pro rychlé zasílání zpráv, jako je Telegra, WhatsApp, Messenger atd.
  • Služba zpráv: je to další služba, ve které zprostředkovatel odesílá zprávy připojenému klientovi příjemce a filtruje podle typu zprávy. Pokud je klient nebo přijímající zařízení odpojeno, dojde ke ztrátě zpráv (i když to může mít nějaký systém protokolování).

Protokoly IoT

Když jsme viděli výše uvedené, podívejme se blíže Protokoly IoT které jsou známější. Mezi nejvýznamnější M2M patří:

  • AMQP (Advanced Message Queuing Protocol): je protokol typu PubSub fronty zpráv. Navrženo pro dobrou interoperabilitu a zajištění spolehlivosti. Speciální pro podnikové aplikace, vysoký výkon, sítě s vysokou latencí, kritické atd.
  • WAMP (Web Application Messaging Protocol): je to další otevřený protokol typu PubSub jako rRPC a běží na WebSockets.
  • CoAP (protokol omezené aplikace): je protokol speciálně navržený pro aplikace s nízkou kapacitou.
  • TOMP (Streaming Text Oriented Messaging Protocol): velmi jednoduchý protokol a pro dosažení maximální interoperability. K přenosu textových zpráv se používá protokol HTTP.
  • XMPP (eXtensible Messaging and Presence Protocol): další protokol používaný v IoT pro aplikace pro rychlé zasílání zpráv a založený na XML. Jan tento případ je také otevřený.
  • WMQ (fronta zpráv WebSphere): protokol vyvinutý společností IBM. Je typu Message Queue, jak naznačuje jeho název, a je orientovaný na zprávy.
  • MQTT: (viz další část)

Vše o uživateli MQTT

Balíček MQTT

El Protokol MQTT Jedná se o komunikační protokol fronty zpráv, který se řídí vzorem PubSub, a typu M2M, jak jsem již zmínil. Je široce používán v IoT a je založen na zásobníku TCP / IP používaném na internetu.

V případě MQTT každé připojení je udržováno otevřené a je znovu použit v každé nezbytné komunikaci. Něco jiného, ​​než co se děje v jiných známých protokolech, že každá komunikace probíhá, vyžaduje nové připojení.

Výhoda

Výhody protokolu MQTT jsou zcela zřejmé, pokud jde o komunikaci M2M pro IoT. Kromě všeho výše uvedeného je to protokol, který poskytuje:

  • Škálovatelnost pro připojení stále více zákazníků.
  • Oddělení mezi klienty, pro menší závislost.
  • Asynchronismus.
  • Jednoduchost.
  • Lehkost, aby nespotřebovávala příliš mnoho zdrojů (i když se zabezpečením TLS / SSL to stoupá).
  • Energeticky efektivní pro zařízení, která jsou závislá na baterii nebo pracují 24/7, nepotřebuje velkou šířku pásma (ideální pro pomalé připojení, jako jsou některá bezdrátová).
  • Zabezpečení a kvalita pro větší spolehlivost a odolnost komunikace.

historie

MQTT byl vytvořen v 90. letech s ranou verzí protokol v roce 1999. Vytvořili jej Dr. Andy Stanford-Clark z IBM a Arlen Nipper ze společnosti Cirrus Link (dříve Eurotech).

La počáteční nápad bylo vytvořit protokol pro monitorování potrubí, které cestovalo pouští, s efektivním komunikačním protokolem (nízká spotřeba šířky pásma), světlem a nízkou spotřebou energie. V té době to bylo velmi drahé, ale nyní se z toho stal levný a otevřený protokol.

Počáteční protokol byl vylepšen vzhledem nové verze, jako je MQTT v3.1 (2013) podle specifikace OASIS (Organizace pro rozvoj standardů strukturovaných informací) atd. Měli byste vědět, že zpočátku to byl proprietární protokol od IBM, ale že bude vydán v roce 2010 a nakonec se stal standardem v OASIS ...

Jak funguje připojení MQTT

Protokol MQTT používá filtr, pro zprávy odesílané každému klientovi na základě témat nebo témat, která jsou hierarchicky uspořádána. Tímto způsobem může zákazník zveřejnit zprávu na konkrétní téma. Tímto způsobem budou všichni klienti nebo připojená zařízení, která se přihlásí k odběru tématu, přijímat zprávy prostřednictvím zprostředkovatele.

Stejně jako MQ, zprávy zůstanou ve frontě a nejsou ztraceny, dokud klient neobdrží tuto zprávu.

Spojení, jak jsem také naznačil, jsou vytvořena přes TCP / IPa server nebo makléř bude uchovávat záznamy o připojených klientech. Ve výchozím nastavení budou zařízení používat komunikační porty číslo 1883, ačkoli můžete také najít port 8883, pokud pro větší zabezpečení používáte SSL / TLS.

Aby bylo možné připojení, jsou potřeba nejen klienti, servery a porty. Také další balíčky nebo zprávy odeslané pro komunikaci:

  • Navažte spojení: CONNECT zpráva / paket zaslaný klientem se všemi potřebnými informacemi. Mezi tyto informace patří ID zákazníka, uživatelské jméno, heslo atd. Zprostředkovatel nebo server odpoví paketem CONNACK, který klienta informuje, že připojení bylo přijato, odmítnuto atd.
  • Odesílejte a přijímejte zprávy: jakmile je spojení navázáno, PUBLIKUJÍ se balíčky nebo zprávy s tématem a nákladem zprávy zaslané brokerovi. Na druhou stranu klient nebo klienti, kteří mají zájem, používají k odběru nebo odběru své balíčky SUBSCRIBE a UNSUSCRIBE. Zprostředkovatel také odpoví balíčkem SUBACK a UNSUBACK, aby ohlásil úspěch operace požadované klientem.
  • Udržování spojení: aby bylo zajištěno, že připojení zůstane otevřené, mohou klienti pravidelně odesílat paket PINGREQ, který bude ze serveru spárován s paketem PINGRESP.
  • Ukončete připojení: když se klient odpojí, odešle paket DISCONNECT k hlášení této události.

Ty zprávy nebo balíčky Ty, o kterých jsem mluvil, mají stejnou strukturu jako jiné pakety jiných síťových protokolů:

  • Záhlaví nebo pevné záhlaví: je pevná část, která zabírá mezi 2 až 5 bajty. Obsahuje kontrolní kód, ID typu zasílané zprávy a jeho délku. K zakódování délky se používá 1–4 bajty, přičemž prvních 7 bitů každého oktetu se použije jako data pro délku a další bit spojitosti k určení, že délku zprávy tvoří více než jeden bajt.
  • Variabilní záhlaví: není vždy povinné, ale volitelné. Je obsažen pouze v některých balíčcích v určitých situacích nebo konkrétních zprávách.
  • Obsah nebo data: paketová data jsou to, co ve skutečnosti obsahuje zprávu, která má být odeslána. Může to být od několika kB až po limit 256 MB.

Pokud máte zájem vědět odpovídající kód v šestnáctkové soustavě pro typy odesílaných zpráv jsou:

zpráva Kód
PŘIPOJIT 0x10
PŘIPOJENÍ 0x20
PUBLIKOVAT 0x30
PUBACK 0x40
PUBREC 0x50
PUBREL 0x60
PUBCOMP 0x70
PŘIHLÁSIT SE 0x80
SUBACK 0x90
NEPŘIHLÁSIT 0xA0
ZRUŠIT 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
ODPOJIT 0xE0

Kvalita a bezpečnost komunikace

Dalším důležitým detailem zpráv od MQTT je kvalita služeb nebo QoSa bezpečnost. Od toho bude záviset robustnost komunikačního systému v případě poruch a jeho bezpečnost.

Pokud jde o jeho kvalitu, lze ji určit 3 různých úrovní:

  • QoS 0 (nepotvrdit)- Zpráva je odeslána pouze jednou a v případě selhání by nebyla doručena. Používá se, když to není kritické.
  • QoS 1 (potvrzení): zpráva bude odeslána tolikrát, kolikrát je potřeba, aby bylo zaručeno doručení zákazníkovi. Nevýhodou je, že klient mohl obdržet stejnou zprávu několikrát.
  • QoS 2 (zajištěno)- Podobně jako výše, ale zaručeno, že bude doručeno pouze jednou. Často se používá pro kritičtější systémy, kde je potřeba větší spolehlivost.

Na druhou stranu, pokud jde o Zabezpečení MQTTlze k zajištění její síly v tomto ohledu použít různá opatření. Jak jsem již zmínil dříve, autentizaci uživatelského jména a hesla, stejně jako mnoho jiných protokolů, lze zajistit pomocí SSL / TLS. Ačkoli mnoho zařízení IoT s nízkou kapacitou nebo zdroji může mít při používání tohoto typu zabezpečené komunikace problémy s přetížením práce ...

Z tohoto důvodu mnoho zařízení IoT, která používají MQTT, používá hesla a uživatele v rovina textu, což by mohlo někoho přimět čichat síťový provoz a snadno je získat. A pokud to nestačí, může být zprostředkovatel také nakonfigurován tak, aby přijímal anonymní připojení, což by každému uživateli umožňovalo navázat komunikaci, což by znamenalo větší riziko.

Používání MQTT s Arduinem

Arduino UNO s MQTT

Samozřejmě můžete použijte protokol MQTT s Arduinem a další vývojové desky, stejně jako Rapsberry Pi atd. Chcete-li to provést, musíte poskytnout desce Arduino připojení, pokud ji nemá. Také knihovna Arduino klient pro MQTT pomůže vám v těchto úkolech. Tato knihovna je kompatibilní s:

Již víte, že si můžete stáhnout a nainstalovat knihovnu do svého Arduino IDE pomocí příkazu: git klon https://github.com/knolleary/pubsubclient.git

Jakmile do kódu použít MQTT v některých aplikacích je pravdou, že je to jednoduché. Na obrázku Fritzing vidíte plaketu Arduino UNO ke kterému byla přidána konektivita Arduino Ethernet a byla také připojena čidlo vlhkosti a teploty DHT22, i když to mohlo být cokoli jiného ...

Dobře, s tím bylo řečeno, pro kód, který musíte vygenerovat Arduino IDE Pro práci s protokolem MQTT na Arduinu je to tak jednoduché:

  • na posílat zprá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 přijímat zprávy od MQTT potřebujete pouze talíř Arduino UNO a spojení s Arduino Ethernet nebo jiným prvkem. Pokud jde o kód, příkladem by bylo:
#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();
}

Nezapomeňte, že musíte změnit IP na vhodnou pro server a musíte také změnit MAC adresu vašeho síťového adaptéru Ethernet nebo ten, který používáte, stejně jako zbytek kódu, pokud jej chcete přizpůsobit jiný projekt. To je jen příklad!

Pro více informací můžete stáhnout zdarma Nuestro PDF manuál s kurzem Arduino IDE k zahájení programování.


Obsah článku se řídí našimi zásadami redakční etika. Chcete-li nahlásit chybu, klikněte zde.

Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.