MQTT: avoin verkkoprotokolla ja sen merkitys esineiden internetissä

MQTT-protokollaverkko IoT

Muista nimi MQTT, koska se on verkkoviestintätyyppinen M2M (Machine to Machine), joka kuulostaa melko vähän. Siitä on tulossa melko suosittua esineiden internetin tai esineiden internetin uuden aikakauden ansiosta sen lyhenne englanniksi. Lisäksi se on avoin protokolla, joka antaa monia etuja.

Itse asiassa siitä on tullut yksi IoT: n keskeisistä pilareista, koska se on varsin hyvä laitteissa, joilla on joitain lähetysrajoituksia, kuten nämä. Lyhenne MQTT tulee Viesti jonottava telemetrian kuljetus, OASIS: n ja ISO: n avoin standardi (ISO / IEC 20922) verkkoviestinnälle ja joka yleensä toimii tunnetulla TCP / IP: llä.

Verkkoprotokollat

OSI-malli ja sen kerrokset

Los tiedonsiirtoprotokollat Ne ovat sääntöjä, jotka sallivat kahden tai useamman laitteen tai järjestelmän kommunikoida keskenään. Toisin sanoen se on protokolla tiedon välittämiseksi useilla tavoilla ja määritetyssä muodossa riippumatta siitä, toteutetaanko ne ohjelmistolla ja laitteistolla (tai molemmilla).

El estándar protokollan määrittelee joukon viestintäominaisuuksia. Se voi mennä synkronointisäännöistä, semantiikasta, syntaksista, pakettimuodoista jne. Ja totuus on, että ne eivät ole vähäpätöisiä, koska näiden protokollien ansiosta voimme nykyään käyttää Internetiä ja muita viestintäverkkoja ...

Ja tietysti ei ole vain yhtä protokollaa, vaan monia. Esimerkiksi, kuuluisa DNS, FTP, MQTT, HTTP ja HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP jne. Sovelluskerrokselle. Siirtokerroksesta löytyy niin kuuluisia kuin TCP, UDP jne., Samoin kuin Internet-kerroksen, kuten IPv4 tai IPv6 (taso, joka on mahdollistanut suurimman määrän käytettävissä olevia IP-osoitteita ja IP-osoitteiden saapumisen). IoT), IPSec jne. ja muut linkkikerrokselta, kuten DSL, Ethernet, WiFi, ARP jne.

Tietoja IoT-protokollista

MQTT-protokolla

Tietenkin on olemassa erityisiä tietoliikenneprotokollia tai niitä voidaan käyttää Esineiden internet. Toisin sanoen edellisen osan perusteella ne olisivat sarja määriteltyjä standardeja, jotta kaksi tai useampia IoT-laitteita voi kommunikoida ja ymmärtää toisiaan, ja ne ovat yleensä M2M, eli koneiden välinen viestintä. monet IoT-laitteet ovat yhteydessä toisiinsa ja jakavat tietoja antureista tai muista lähteistä.

IoT-laitteiden suuren määrän vuoksi näiden protokollien on täytettävä vaatimukset, jotka ylittävät kaistanleveyden, nopeuden jne. Rajoitukset. (Huomaa, että monet laitteet ovat upotettuja ja halpoja), mikä on yleensä joissakin laitteissa. Ja tarkoitan sitä täytyy olla skaalautuva, jotta voidaan lisätä enemmän liitettyjä laitteita tarvittaessa ja vaikuttamatta maailmanlaajuiseen järjestelmään.

Lisäksi heillä on oltava pieni riippuvuus kytkentä laitteiden välillä, jotta ongelmia ei syntyisi, jos laite poistetaan. Ja tietysti samaan aikaan haetaan korkeaa yhteentoimivuutta, jotta se toimisi suuren määrän laitteita ja hyvin monipuolisia järjestelmiä varten, koska IoT: n maailma on melko heterogeeninen.

Muita hyödyllisiä ominaisuuksia olisi niiden toteuttamisen helppous, turvallisuus, jne. Muista, että IoT luo suuria haasteita turvallisuusnäkökulmasta. Vielä enemmän, kun monet liitetyistä laitteista ovat yleensä kriittisiä tietyissä tapauksissa ... esimerkiksi alaikäisten lelut.

Tärkeitä käsitteitä

Tästä huolimatta on sanottava, että IoT: n ratkaisut käyttävät keskitettyä palvelinta vastaanottamaan viestit kaikista liitetyistä laitteista, jotka lähettävät ja jakavat ne kaikille liitetyille IoT-laitteille, jotka kuuntelevat. Tuo palvelin tunnetaan nimellä reititin tai välittäjä. Jotain, joka on jollain tavalla kaukana tavanomaisesta asiakas-palvelinsuhteesta.

Lisäksi, menetelmät Näistä IoT-yhteyskäytännöistä löydät seuraavat:

  • PubSub: Publish / Susbcribe on viestintäkuvio, jossa laite (ali) ilmoittaa välittäjälle haluavansa vastaanottaa viestin, kun taas toinen laite (pubi) julkaisee viestit välittäjälle jaettavaksi toiselle / niitä odottavalle laitteelle.
  • rRPC: Reitittimen remoderimenettelykutsut on toinen kauko-ohjain prosessin suorittamiseksi. Siinä laite (Callee) ilmoittaa välittäjälle suorittavansa tietyn menettelyn ja välittäjä jakaa sen toiselle laitteelle (soittaja), jolla mainittu prosessi suoritetaan.

Nyt näiden menetelmien tai mallien suorittamiseksi a viestintäinfrastruktuuri. Ja tässä mielessä voidaan erottaa kaksi:

  • Viestijono: viestipalvelu, jossa kaikille viestiille, jotka aloittavat tilauksen välittäjälle, luodaan yksi viestijono. Viimeksi mainittu pitää viestit tallennettuina, kunnes ne toimitetaan asiakkaalle. Jos asiakasta tai vastaanottajaa ei ole yhdistetty, sitä ylläpidetään, kunnes yhteys on muodostettu. Tämäntyyppiset palvelut ovat kuin pikaviestisovelluksissa, kuten Telegra, WhatsApp, Messenger jne.
  • Viestipalvelu: se on toinen palvelu, jossa välittäjä lähettää viestit liitetylle vastaanottajasovellukselle suodattamalla viestityypin mukaan. Jos asiakas tai vastaanottava laite on kytketty irti, viestit menetetään (vaikka sillä voi olla jokin kirjausjärjestelmä).

IoT-protokollat

Nähtyään edellä, katsotaanpa nyt tarkemmin IoT-protokollat jotka tunnetaan paremmin. M2M: n tunnetuimpia ovat:

  • AMQP (Advanced Message Queuing Protocol): on Message Queuen PubSub-tyyppinen protokolla. Suunniteltu hyvään yhteentoimivuuteen ja luotettavuuden takaamiseen. Erityisesti yrityssovelluksiin, korkean suorituskyvyn, korkean viiveen verkkoihin, kriittisiin jne.
  • WAMP (verkkosovellusten viestiprotokolla): se on toinen avoin PubSub-tyyppinen protokolla, kuten rRPC, ja se toimii WebSocketsissa.
  • CoAP (rajoitettu sovellusprotokolla): on protokolla, joka on erityisesti suunniteltu matalan kapasiteetin sovelluksiin.
  • TOMP (streaming text Oriented Messaging Protocol): hyvin yksinkertainen protokolla ja maksimaalisen yhteentoimivuuden saavuttamiseksi. HTTP: tä käytetään tekstiviestien lähettämiseen.
  • XMPP (eXtensible Messaging and Presence Protocol): toinen protokolla, jota IoT käyttää pikaviestisovelluksiin ja joka perustuu XML: ään. Jan tämä tapaus on myös avoin.
  • WMQ (WebSphere Message Queuing): IBM: n kehittämä protokolla. Se on tyyppiä Message Queue, kuten nimestään käy ilmi, ja se on viestikeskeinen.
  • MQTT: (katso seuraava osa)

Kaikki käyttäjästä MQTT

MQTT-paketti

El MQTT-protokolla Se on Message Queue -yhteyskäytäntö, joka seuraa PubSub-mallia, ja M2M-tyyppinen, kuten jo mainitsin. Sitä käytetään laajasti IoT: ssä ja se perustuu Internetissä käytettyyn TCP / IP-pinoon.

MQTT: n tapauksessa jokainen yhteys pidetään auki ja sitä käytetään uudestaan ​​kaikessa tarvittavassa viestinnässä. Jotain erilaista kuin muissa tunnetuissa protokollissa tapahtuu, että jokainen viestintä tapahtuu, edellyttää uutta yhteyttä.

Etu

MQTT-protokollan edut ovat melko ilmeisiä IoT: n M2M-viestinnän kannalta. Kaiken edellä mainitun lisäksi se on protokolla, joka tarjoaa:

  • Skaalautuvuus yhdistää yhä useammat asiakkaat.
  • Irrottaminen asiakkaiden kesken vähentää riippuvuutta.
  • Asynkronismi.
  • Yksinkertaisuus.
  • Keveys, jotta ei kuluteta liikaa resursseja (vaikka TLS / SSL-suojauksella se nousee).
  • Energiatehokas laitteille, jotka ovat riippuvaisia ​​akusta tai toimivat ympäri vuorokauden ympäri vuorokauden, se ei tarvitse suurta kaistanleveyttä (ihanteellinen hitaille yhteyksille, kuten jotkut langattomat).
  • Turvallisuus ja laatu, lisää viestinnän luotettavuutta ja kestävyyttä.

Historia

MQTT luotiin 90-luvulla, varhaisella versiolla vuonna 1999. Sen loivat tohtori Andy Stanford-Clark IBM: stä ja Arlen Nipper Cirrus Linkistä (aiemmin Eurotech).

La alkuperäinen idea tarkoituksena oli luoda protokolla tarkkailemaan aavikon läpi kulkevaa putkistoa tehokkaalla tiedonsiirtoprotokollalla (matala kaistanleveys), valolla ja alhaisella energiankulutuksella. Tuolloin se oli erittäin kallista, mutta nyt siitä on tullut halpa ja avoin protokolla.

Alkuperäistä protokollaa parannettiin uudet versiot, kuten MQTT v3.1 (2013) OASIS (Organization for the Advancement of Structured Information Standards) -määrityksen mukaisesti jne. Sinun pitäisi tietää, että alussa se oli IBM: n oma protokolla, mutta se julkaistiin vuonna 2010 ja siitä tuli lopulta OASIS-standardi ...

Kuinka MQTT-yhteys toimii

MQTT-protokolla käyttää suodatin, jokaiselle asiakkaalle lähetetyille viesteille hierarkkisesti järjestettyjen aiheiden tai aiheiden perusteella. Tällä tavalla asiakas voi lähettää viestin tietystä aiheesta. Tällä tavoin kaikki aihetta tilaavat asiakkaat tai liitetyt laitteet saavat viestejä välittäjän kautta.

Kuten MQ, viestit pysyvät jonossa ja niitä ei menetetä, ennen kuin asiakas on saanut kyseisen viestin.

Yhteydet, kuten myös mainitsin, on tehty TCP / IP: n kautta, ja palvelin tai välittäjä pitää kirjaa liitetyistä asiakkaista. Laitteet käyttävät oletusarvoisesti tiedonsiirtoportteja numero 1883, vaikka saatat löytää myös portin 8883, jos käytät SSL / TLS: ää lisäturvallisuuteen.

Yhteyden mahdollistamiseksi tarvitaan paitsi asiakkaita, palvelimia ja portteja. Myös muut lähetetyt paketit tai viestit viestinnän toteuttamiseksi:

  • Muodosta yhteys: Yhdistä asiakkaan lähettämä viesti / paketti, jossa on kaikki tarvittavat tiedot. Nämä tiedot sisältävät asiakastunnuksen, käyttäjätunnuksen, salasanan jne. Välittäjä tai palvelin vastaa CONNACK-paketilla, joka ilmoittaa asiakkaalle yhteyden hyväksymisestä, hylkäämisestä jne.
  • Lähetä ja vastaanota viestejä: Kun yhteys on muodostettu, välittäjälle lähetetyn viestin aiheen ja hyötykuorman kanssa käytetään PUBLISH-paketteja tai viestejä. Toisaalta kiinnostunut asiakas tai asiakkaat käyttävät SUBSCRIBE- ja UNSUSCRIBE-paketteja tilaamaansa tai peruuttamaan tilauksensa. Välittäjä vastaa myös SUBACK- ja UNSUBACK-paketeilla ilmoittamaan asiakkaan pyytämän operaation onnistumisesta.
  • Yhteyden ylläpito: jotta yhteys pysyy auki, asiakkaat voivat lähettää ajoittain PINGREQ-paketin, joka sovitetaan palvelimelta PINGRESP-paketin kanssa.
  • Lopeta yhteys: kun asiakas katkaisee yhteyden, se lähettää POISTA-paketin ilmoittaakseen tapahtumasta.

Nuo viestejä tai paketteja Niillä, joista olen puhunut, on sama rakenne kuin muilla verkkoprotokollien paketeilla:

  • Otsikko tai kiinteä otsikko: on kiinteä osa, joka vie 2-5 tavua. Se sisältää ohjauskoodin, lähetetyn viestin tyypin tunnuksen ja sen pituuden. Pituuden koodaamiseen käytetään 1-4 tavua, käyttäen kunkin oktetin ensimmäisiä 7 bittiä pituuden datana ja lisäbittinä jatkuvuutta sen määrittämiseksi, että on enemmän kuin yksi tavu, joka muodostaa viestin pituuden.
  • Muuttuva otsikko: ei ole aina pakollinen, mutta valinnainen. Se sisältyy joihinkin paketteihin vain tietyissä tilanteissa tai tietyissä viesteissä.
  • Sisältö tai tiedot: pakettidata sisältää tosiasiallisesti lähetettävän viestin. Se voi olla muutamasta kt: stä 256 Mt: n rajaan.

Jos olet kiinnostunut tietämään vastaava koodi heksadesimaaleina lähetettyjen viestien tyypit ovat:

viesti Koodi
CONNECT 0x10
TAKAISIN 0x20
JULKAISTA 0x30
PUTKI 0x40
pubrec 0x50
PUBREL 0x60
pubcomp 0x70
TILAA 0x80
SUBACK 0x90
ÄLÄ KOSKI 0xA0
TAKAISIN 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
KATKAISTA 0xE0

Viestinnän laatu ja turvallisuus

Toinen tärkeä yksityiskohta MQTT: n viesteistä on palvelun laatu tai QoSja turvallisuus. Viestintäjärjestelmän kestävyys vikatilanteissa ja sen turvallisuus riippuvat tästä.

Sen laatu voidaan määrittää 3 eri tasoa:

  • QoS 0 (tietämättömyys)- Viesti lähetetään vain kerran, ja jos se epäonnistuu, sitä ei toimiteta. Sitä käytetään, kun se ei ole kriittinen.
  • QoS 1 (kuittaus): viesti lähetetään niin monta kertaa kuin tarvitaan toimituksen takaamiseksi asiakkaalle. Haittapuoli on, että asiakas voisi saada saman viestin useita kertoja.
  • QoS 2 (varma)- Samanlainen kuin yllä, mutta toimitetaan vain kerran. Sitä käytetään usein kriittisemmissä järjestelmissä, joissa tarvitaan suurempaa luotettavuutta.

Toisaalta, kuten MQTT-turvallisuus, voidaan käyttää erilaisia ​​toimenpiteitä sen vahvuuden varmistamiseksi tässä suhteessa. Kuten jo aiemmin mainitsin, käyttäjätunnuksen ja salasanan todentaminen, kuten monet muutkin protokollat, voidaan varmistaa SSL / TLS: n avulla. Vaikka monilla IoT-laitteilla, joilla on vähän kapasiteettia tai resursseja, voi olla ongelmia työn ylikuormituksessa tämän tyyppistä suojattua viestintää käytettäessä ...

Tästä syystä monet MQTT: tä käyttävät IoT-laitteet käyttävät salasanoja ja käyttäjiä tasoteksti, mikä saattaa saada jonkun haistamaan verkkoliikennettä saadakseen ne helposti. Ja jos se ei riitä, välittäjä voidaan myös määrittää hyväksymään nimettömiä yhteyksiä, mikä antaisi kenellekään käyttäjälle mahdollisuuden muodostaa viestintää, johon liittyy suurempi riski.

MQTT: n käyttö Arduinon kanssa

Arduino UNO MQTT: n kanssa

Voit tietysti käytä MQTT-protokollaa Arduinon kanssa ja muut kehitysalustat sekä Rapsberry Pi jne. Tätä varten sinun on tarjottava Arduino-kortillesi liitettävyys, jos sillä ei ole sitä. Myös kirjasto Arduino -asiakas MQTT: lle se auttaa sinua näissä tehtävissä. Tämä kirjasto on yhteensopiva seuraavien kanssa:

Tiedät jo, että voit ladata ja asentaa kirjaston Arduino IDE -laitteeseesi komennolla: git-klooni https://github.com/knolleary/pubsubclient.git

Niin pian kuin koodiin käyttääksesi MQTT: tä joissakin sovelluksissa totuus on, että se on yksinkertainen. Fritzing-kuvassa näkyy plaketti Arduino UNO johon Arduino Ethernet on lisännyt liitettävyyden ja se on myös kytketty a kosteus- ja lämpötila-anturi DHT22, vaikka se olisi voinut olla jotain muuta ...

Ok, sanottuasi, koodille, joka sinun on luotava Arduino IDE Työskentely MQTT-protokollan kanssa Arduinossa on niin yksinkertaista:

  • että lähettää viestejä 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);
}

  • että vastaanottaa viestejä MQTT: n mukaan tarvitset vain levyn Arduino UNO ja yhteys Arduino Ethernetillä tai millä tahansa muulla elementillä. Koodin osalta esimerkki olisi:
#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();
}

Muista, että sinun on vaihdettava IP palvelimelle sopivaksi ja muutettava myös Ethernet-verkkosovittimesi tai käyttämäsi MAC-osoite sekä muu koodi, jos aiot mukauttaa sen erilainen projekti. Tämä on vain esimerkki!

Lisätietoja voit lataa ilmaiseksi Nuestro PDF-käyttöopas Arduino IDE -kurssilla ohjelmoinnin aloittamiseksi.


Ole ensimmäinen kommentti

Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.