MQTT: atvērta tīkla protokols un tā nozīme IoT

MQTT protokola tīkls IoT

Atceries vārdu MQTT, jo tas ir tīkla sakaru protokola tips M2M (Machine to Machine), kas skanēs diezgan maz. Tas kļūst diezgan populārs, pateicoties lietisko interneta jeb IoT (lietu internetam) jaunajam laikmetam par tā saīsinājumu angļu valodā. Turklāt tas ir atvērts protokols, kas dod daudz priekšrocību.

Faktiski tas ir kļuvis par vienu no IoT centrālajiem pīlāriem, jo ​​tas ir diezgan labs ierīcēs ar dažiem tādiem pārraides ierobežojumiem kā šie. Saīsinājums MQTT nāk no Telemetrijas transporta ziņojumu rindošana, atvērts standarts no OASIS un ISO (ISO / IEC 20922) tīkla sakariem un kas parasti darbojas ar slaveno TCP / IP.

Tīkla protokoli

OSI modelis un tā slāņi

L sakaru protokoli Tie ir noteikumi, kas ļauj divām vai vairākām ierīcēm vai sistēmām sazināties savā starpā. Tas ir, tas ir protokols informācijas pārsūtīšanai, izmantojot dažādus līdzekļus un ar noteiktu formātu, neatkarīgi no tā, vai to īsteno programmatūra un aparatūra (vai abi).

El standarta protokola definē daudzus sakaru raksturlielumus. Tas var iziet no sinhronizācijas noteikumiem, semantikas, sintakses, pakešu formāta utt. Patiesība ir tāda, ka tie nav kaut kas nenozīmīgs, jo, pateicoties šiem protokoliem, šodien mēs varam izmantot internetu un citus sakaru tīklus ...

Un, protams, ir ne tikai viens protokols, bet arī daudz. Piemēram, slavenais DNS, FTP, MQTT, HTTP un HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP utt. Lietojumprogrammas slānim. Transporta slānī jūs varat atrast tikpat slavenus kā TCP, UDP utt., Kā arī tādus interneta slāņus kā IPv4 vai IPv6 (kas ļāva panākt vislielāko pieejamo IP skaitu un IoT ierašanos ), IPSec utt., Un citi no saites slāņa, piemēram, DSL, Ethernet, WiFi, ARP utt.

Par IoT protokoliem

MQTT protokols

Protams, ir īpaši sakaru protokoli vai tos var piemērot IoT. Citiem vārdiem sakot, ņemot vērā iepriekšējo sadaļu, tie būtu noteiktu standartu kopums, lai divas vai vairākas IoT ierīces varētu sazināties un saprasties, un tās parasti ir M2M, tas ir, mašīnu-mašīnu komunikācija. Ir daudz Pievienotas IoT ierīces un kopīgota informācija no sensoriem vai citiem avotiem.

Tā kā IoT ierīču skaits ir liels, šiem protokoliem jāatbilst prasībām, kas pārsniedz joslas platuma, ātruma utt. (ņemiet vērā, ka daudzas ierīces ir iegultas un lētas), kas parasti ir dažās ierīcēs. Un es domāju to jābūt mērogojamam, lai vajadzības gadījumā varētu pievienot vairāk pievienotu ierīču un neietekmētu globālo sistēmu.

Turklāt viņiem ir jābūt zema atkarība savienojums starp ierīcēm, lai problēmas neradītos, ja ierīce tiek noņemta. Un, protams, tajā pašā laikā tiek meklēta augsta sadarbspēja, lai tā darbotos ar lielu skaitu ļoti daudzveidīgu ierīču un sistēmu, jo IoT pasaule ir diezgan neviendabīga.

Citas noderīgas funkcijas būtu to ieviešanas vienkāršība, drošībautt. Paturiet prātā, ka IoT rada lielas problēmas drošības aspektā. Vēl jo vairāk, ja dažos gadījumos daudzas pievienotās ierīces parasti ir kritiskas ... piemēram, rotaļlietas nepilngadīgajiem.

Svarīgi jēdzieni

Tas nozīmē, ka jāsaka, ka IoT risinājumi izmanto centralizētu serveri, lai saņemtu ziņojumus no visām pievienotajām ierīcēm, kuras izstaro un izplata tās visām pieslēgtajām IoT ierīcēm, kuras klausās. Šis serveris ir tā dēvētais maršrutētājs vai brokeris. Kaut kas kaut kādā ziņā ir tālu no parastajām klienta un servera attiecībām.

Turklāt, metodoloģijas Šajos IoT sakaru protokolos varat atrast:

  • PubSub: Publish / Susbcribe ir ziņojumapmaiņas paraugs, kurā ierīce (apakškopa) informē brokeri, ka vēlas saņemt ziņojumu, savukārt cita ierīce (krogs) publicē ziņojumus, ko brokeris var izplatīt uz citām ierīcēm, kuras tos gaida.
  • rrpc: Maršrutētāja pārveidotāja procedūras izsaukumi ir vēl viens attālās procesa izpildes modelis. Tajā ierīce (Callee) informē brokeri, ka tas veiks noteiktu procedūru, un brokeris to izplata citai ierīcei (Zvanītājs), kurā tiek izpildīts minētais process.

Tagad, lai veiktu šīs metodikas vai modeļus, a ziņojumapmaiņas infrastruktūra. Šajā ziņā var atšķirt divus:

  • Ziņojuma rinda: ziņojumapmaiņas pakalpojums, kurā visiem klientiem, kuri uzsāk brokera abonēšanu, tiek ģenerēta viena ziņu rinda. Pēdējais glabās saglabātos ziņojumus, līdz tie tiks nogādāti klientam. Ja klients vai saņēmējs nav savienots, tas tiek uzturēts līdz savienojuma izveidei. Šāda veida pakalpojumi ir līdzīgi tiem, kurus izmanto tūlītējās ziņojumapmaiņas lietotnēs, piemēram, Telegra, WhatsApp, Messenger utt.
  • Ziņojumu pakalpojums: tas ir vēl viens pakalpojums, kurā brokeris nosūta ziņojumus pievienotajam saņēmēja klientam, filtrējot pēc ziņojuma veida. Ja klients vai saņēmēja ierīce ir atvienota, ziņojumi tiek zaudēti (lai gan tajā var būt kāda reģistrēšanas sistēma).

IoT protokoli

Ņemot vērā iepriekš minēto, tagad apskatīsim to tuvāk IoT protokoli kas ir labāk zināmi. Starp izcilākajiem M2M ir:

  • AMQP (papildu ziņojumu rindas protokols): ir ziņojumu rindas PubSub tipa protokols. Izstrādāts tā, lai būtu laba sadarbspēja un nodrošinātu uzticamību. Īpaši korporatīvām lietojumprogrammām, augstas veiktspējas, augstas latentuma tīkliem, kritiskiem utt.
  • WAMP (tīmekļa lietojumprogrammu ziņojumapmaiņas protokols): tas ir vēl viens atvērts PubSub tipa protokols, piemēram, rRPC, un tas darbojas WebSockets.
  • CoAP (ierobežota lietojuma protokols): ir protokols, kas īpaši izstrādāts mazas ietilpības lietojumiem.
  • TOMP (straumēšanas teksta orientēts ziņojumapmaiņas protokols): ļoti vienkāršs protokols un lai panāktu maksimālu savietojamību. HTTP tiek izmantots īsziņu pārsūtīšanai.
  • XMPP (eXtensible Messaging and Presence Protocol): cits protokols, ko IoT izmanto tūlītējās ziņojumapmaiņas lietotnēm un kura pamatā ir XML. Jan šī lieta arī ir atklāta.
  • WMQ (WebSphere ziņojumu rinda): IBM izstrādātais protokols. Tas ir Message Queue tipa, kā norāda nosaukums, un ir orientēts uz ziņojumu.
  • MQTT: (skatīt nākamo sadaļu)

Viss par MQTT

MQTT pakete

El MQTT protokols Tas ir Message Queue sakaru protokols, kas seko PubSub paraugam, un M2M tipa, kā jau minēju. To plaši izmanto IoT, un tā pamatā ir internetā izmantotā TCP / IP kaudze.

MQTT gadījumā katrs savienojums tiek turēts atvērts un tas tiek atkārtoti izmantots katrā nepieciešamajā saziņā. Kaut kas atšķiras no tā, kas notiek citos zināmos protokolos, ka katra saziņa notiek, ir nepieciešams jauns savienojums.

Priekšrocība

MQTT protokola priekšrocības ir diezgan acīmredzamas M2M sakaru ziņā IoT. Papildus visam iepriekšminētajam tas ir protokols, kas nodrošina:

  • Mērogojamība, lai piesaistītu arvien vairāk klientu.
  • Atvienošana starp klientiem, lai mazinātu atkarību.
  • Asinhronisms.
  • Vienkāršība.
  • Vieglums, lai nepatērētu pārāk daudz resursu (lai gan ar TLS / SSL drošību tas pieaug).
  • Energoefektīva ierīcēm, kuru darbība ir atkarīga no akumulatora vai darbojas visu diennakti, un tai nav nepieciešams liels joslas platums (ideāli piemērots lēniem savienojumiem, piemēram, dažiem bezvadu savienojumiem).
  • Drošība un kvalitāte, lai nodrošinātu lielāku uzticamību un izturību komunikācijā.

Vēsture

MQTT tika izveidots 90. gados ar agrīno versiju protokols 1999. gadā. To izveidoja Dr. Endijs Stenfords-Klarks no IBM un Ārens Nipers no Cirrus Link (agrāk Eurotech).

La sākotnējā ideja bija izveidot protokolu, lai uzraudzītu cauruļvadu, kas pārvietojās pa tuksnesi, ar efektīvu sakaru protokolu (zems joslas platuma patēriņš), gaismu un zemu enerģijas patēriņu. Tajā laikā tas bija ļoti dārgs, bet tagad tas ir kļuvis par lētu un atvērtu protokolu.

Sākotnējais protokols tika uzlabots, parādoties jaunas versijas, piemēram, MQTT v3.1 (2013) saskaņā ar OASIS (Organizācija strukturēto informācijas standartu attīstībai) specifikāciju utt. Jums jāzina, ka sākumā tas bija patentēts IBM protokols, taču tas tiks izlaists 2010. gadā un galu galā kļuva par OASIS standartu ...

Kā darbojas MQTT savienojums

MQTT protokols izmanto filtru, katram klientam nosūtītajiem ziņojumiem, pamatojoties uz tēmām vai tēmām, kas sakārtotas hierarhiski. Tādā veidā klients var ievietot ziņojumu par noteiktu tēmu. Tādā veidā visi klienti vai pievienotās ierīces, kas abonē šo tēmu, saņems ziņojumus, izmantojot starpnieku.

Tāpat kā MQ, ziņojumi paliks rindā un tie netiek zaudēti, kamēr klients nav saņēmis šo ziņojumu.

Savienojumi, kā es arī norādīju, ir izveidoti izmantojot TCP / IP, un serveris vai brokeris reģistrēs pievienotos klientus. Pēc noklusējuma ierīcēs tiks izmantoti sakaru porti ar numuru 1883, lai gan, iespējams, var rasties arī ports 8883, ja papildu drošībai izmantojat SSL / TLS.

Lai savienojums būtu iespējams, ir nepieciešami ne tikai klienti, serveri un porti. Arī citi nosūtītās paketes vai ziņas saziņai:

  • Izveidojiet savienojumu: CONNECT klienta nosūtīts ziņojums / pakete ar visu nepieciešamo informāciju. Šī informācija ietver klienta ID, lietotājvārdu, paroli utt. Brokeris vai serveris atbild ar CONNACK paketi, kas informēs klientu par savienojuma pieņemšanu, noraidīšanu utt.
  • Sūtīt un saņemt ziņas: kad savienojums ir izveidots, PUBLISH paketes vai ziņojumi tiek izmantoti kopā ar brokerim nosūtītās ziņas tēmu un lietderīgo slodzi. No otras puses, ieinteresētais klients vai klienti izmanto SUBSCRIBE un UNSUSCRIBE paketes, lai attiecīgi abonētu vai atsauktu savu abonementu. Brokeris atbildēs arī ar pakotni SUBACK un UNSUBACK, lai ziņotu par klienta pieprasītās operācijas panākumiem.
  • Savienojuma uzturēšana: lai garantētu, ka savienojums paliek atvērts, klienti no servera var periodiski nosūtīt PINGREQ paketi, kas tiks saskaņota ar PINGRESP paketi.
  • Beigt savienojumu: kad klients atvienojas, tas nosūta ATCELŠANAS paketi, lai ziņotu par šo notikumu.

Tie ziņas vai paketes Tiem, par kuriem esmu runājis, ir tāda pati struktūra kā citām tīkla protokolu paketēm:

  • Galvene vai fiksēta galvene: ir fiksēta daļa, kas aizņem 2-5 baitus. Tas satur kontroles kodu, nosūtītā ziņojuma veida ID un tā garumu. Garuma kodēšanai tiek izmantoti 1-4 baiti, izmantojot katra okteta pirmos 7 bitus kā datus par garumu un papildu nepārtrauktības bitu, lai noteiktu, ka ir vairāk nekā viens baits, kas veido ziņojuma garumu.
  • Mainīga galvene: ne vienmēr ir obligāta, bet nav obligāta. Dažās paketēs tas atrodas tikai noteiktās situācijās vai īpašos ziņojumos.
  • Saturs vai dati: pakešdati ir tas, kas faktiski satur nosūtāmo ziņojumu. Tas var būt no dažiem kB līdz 256 MB ierobežojumam.

Ja jūs interesē zināt atbilstošo kodu heksadecimālā nosūtīto ziņojumu veidiem ir:

ziņa Kods
CONNECT 0x10
ATKĀPĒŠANĀS 0x20
PUBLICĒT 0x30
PUBACK 0x40
pubrec 0x50
Dzērve 0x60
pubcomp 0x70
ABONĒT 0x80
SUBACK 0x90
NEVAICINIET 0xA0
ATKĀPINĀT 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
ATKLĀT 0xE0

Sakaru kvalitāte un drošība

Vēl viena svarīga MQTT ziņojumu detaļa ir pakalpojumu kvalitāte vai QoSun drošība. No tā būs atkarīga sakaru sistēmas izturība kļūmju gadījumā un tās drošība.

Attiecībā uz tā kvalitāti to var noteikt 3 dažādi līmeņi:

  • QoS 0 (neatzīšana): ziņojums tiek nosūtīts tikai vienu reizi, un kļūmes gadījumā tas netiks piegādāts. To lieto, ja tas nav kritisks.
  • QoS 1 (apstiprināt): ziņojums tiks nosūtīts tik reižu, cik nepieciešams, lai garantētu piegādi klientam. Negatīvie ir tas, ka klients to pašu ziņojumu varēja saņemt vairākas reizes.
  • QoS 2 (nodrošināts)- Līdzīgi kā iepriekš, bet garantēts, ka tiks piegādāts tikai vienu reizi. To bieži izmanto kritiskākām sistēmām, kur nepieciešama lielāka uzticamība.

No otras puses, kā attiecībā uz MQTT drošība, var izmantot dažādus pasākumus, lai nodrošinātu tā izturību šajā sakarā. Kā jau iepriekš komentēju, lietotāja un paroles autentiskumu, tāpat kā daudzus citus protokolus, var nodrošināt ar SSL / TLS. Lai gan daudzām IoT ierīcēm ar zemu jaudu vai resursiem, izmantojot šāda veida drošus sakarus, varētu būt problēmas ar darba pārslodzi ...

Šī iemesla dēļ daudzas IoT ierīces, kas izmanto MQTT, izmanto Windows paroles un lietotājus vienkāršs teksts, kas kādam varētu likt šņaukt tīkla trafiku, lai tos ļoti viegli iegūtu. Un, ja ar to nepietiek, brokeri var konfigurēt arī pieņemt anonīmus savienojumus, kas ļautu jebkuram lietotājam izveidot sakarus, kas saistīti ar lielāku risku.

MQTT lietošana ar Arduino

Arduino UNO ar MQTT

Protams tu vari izmantojiet MQTT protokolu ar Arduino un citi izstrādes dēļi, kā arī Rapsberry Pi utt. Lai to izdarītu, jānodrošina savam Arduino dēlim savienojamība, ja tam tā nav. Arī bibliotēka Arduino klients MQTT tas jums palīdzēs šajos uzdevumos. Šī bibliotēka ir saderīga ar:

Jūs jau zināt, ka varat lejupielādēt un instalēt bibliotēku savā Arduino IDE, izmantojot komandu: git klons https://github.com/knolleary/pubsubclient.git

Tiklīdz kodu, lai izmantotu MQTT kādā lietojumā patiesība ir tāda, ka tā ir vienkārša. Attēlā Fritzing jūs varat redzēt plāksni Arduino UNO kurai pievienota Arduino Ethernet savienojamība un arī tā ir pievienota a mitruma un temperatūras sensors DHT22, lai gan tas varēja būt kaut kas cits ...

Labi, ar to teikts kodam, kas jums jāģenerē Arduino IDE Lai strādātu ar Arduino MQTT protokolu, tas ir tik vienkārši:

  • līdz sūtīt ziņas 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);
}

  • līdz saņemt ziņas ar MQTT jums ir nepieciešama tikai plāksne Arduino UNO un savienojums ar Arduino Ethernet vai jebkuru citu elementu. Attiecībā uz kodu, piemēram, varētu būt:
#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();
}

Atcerieties, ka jums ir jāmaina IP uz atbilstošo serverim, kā arī jāmaina Ethernet tīkla adaptera vai izmantotā MAC adrese, kā arī pārējais kods, ja plānojat to pielāgot cits projekts. Šis ir tikai piemērs!

Lai iegūtu vairāk informācijas, varat lejupielādēt bez maksas Nuestro PDF rokasgrāmata ar Arduino IDE kursu, lai sāktu programmēšanu.


Esi pirmais, kas komentārus

Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.