MQTT: ачык тармак протоколу жана анын IOTтогу мааниси

MQTT протокол тармагы IoT

Атын унутпаңыз MQTT, бул тармактык байланыш протоколу M2M (Machine to Machine) түрү болгондуктан, ал бир аз угулат. Бул нерселер Интернеттин жаңы доорунун же IoT (Заттардын Интернети) англис тилиндеги кыскартылышы үчүн абдан популярдуу болуп баратат. Мындан тышкары, бул көптөгөн артыкчылыктарды берген ачык протокол.

Чындыгында, бул IOT борбордук тирөөчтөрүнүн бири болуп калды, анткени ал ушул сыяктуу кээ бир өткөрүү чектөөлөрү бар шаймандарда жакшы. MQTT кыскартылышы келип чыккан Билдирүү Кезек Телеметриялык Транспорт, тармактык байланыш үчүн OASIS жана ISO (ISO / IEC 20922) ачык стандарт жана жалпысынан белгилүү TCP / IP иштейт.

Тармактык протоколдор

OSI модели жана анын катмарлары

The байланыш протоколдору Алар эки же андан көп шаймандардын же тутумдардын бири-бири менен байланышууга мүмкүндүк берген эрежелер. Башкача айтканда, бул программалык камсыздоо жана (же экөө тең) ишке ашыргандыгына карабастан, ар кандай каражаттар аркылуу жана аныкталган формат менен маалыматты берүү протоколу.

El -стандартты, протоколдун көптөгөн байланыш мүнөздөмөлөрүн аныктайт. Бул синхрондоштуруу, семантика, синтаксис, пакет формат ж.б. эрежелеринен чыгышы мүмкүн. Чындыгында, алар жокко эсе эмес, анткени ушул протоколдордун жардамы менен биз бүгүн Интернетти жана башка байланыш тармактарын колдоно алабыз ...

Албетте, бир эле протокол эмес, көптөгөн протоколдор бар. Мисалы, белгилүү Колдонмо катмары үчүн DNS, FTP, MQTT, HTTP жана HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP ж.б. Транспорттук катмардан TCP, UDP жана башкалар сыяктуу белгилүү, ошондой эле IPv4, же IPv6 сыяктуу Интернет катмарын таба аласыз (эң көп IPлердин болушун камсыз кылган жана келүү IoT), IPSec ж.б., жана башкалар DSL, Ethernet, WiFi, ARP ж.б.

IOT протоколдору жөнүндө

MQTT протоколу

Албетте, белгилүү бир байланыш протоколдору бар же аларды колдонууга болот IOT. Башкача айтканда, мурунку бөлүмдү эске алганда, алар эки же андан көп IOT түзмөктөрү бири-бири менен тил табышып, бири-бирин түшүнүшү үчүн бир катар аныкталган стандарттарды түзүшмөк жана алар жалпысынан M2M, башкача айтканда, машинадан-машинага чейин бар. көптөгөн IoT шаймандары туташып, сенсорлордон же башка булактардан алынган маалыматты бөлүшөт.

IoT шаймандарынын көптүгүнөн, бул протоколдор өткөрмө жөндөмдүүлүгү, ылдамдыгы ж.б. талаптарга жооп бериши керек. (көпчүлүк шаймандар камтылган жана арзан экенине көңүл буруңуз), бул адатта айрым шаймандарда болот. Мен фактыны айткым келет масштабдуу болушу керек, керек болсо жана глобалдык тутумга таасирин тийгизбесе, дагы көп туташкан шаймандарды кошо аласыз.

Ошондой эле, алар а төмөн көз карандылык шаймандар алынып салынса, көйгөйлөр жаралбашы үчүн, түзмөктөрдүн ортосунда бириктирүү. Албетте, ошол эле учурда, IoT дүйнөсү кыйла гетерогендүү болгондуктан, көп сандаган шаймандар жана ар кандай системалар менен иштеши үчүн, жогорку өз ара аракеттенүү мүмкүнчүлүгү изделет.

Башка пайдалуу өзгөчөлүктөр аларды ишке ашыруунун жеңилдиги болмок, коопсуздук, жана башкалар. IoT коопсуздук жаатында чоң кыйынчылыктарды жаратып жаткандыгын унутпаңыз. Андан да көп туташкан шаймандар белгилүү учурларда өтө маанилүү болуп турганда ... мисалы, жашы жете элек балдар үчүн оюнчуктар.

Маанилүү түшүнүктөр

Башкача айтканда, IOT чечимдери борборлоштурулган серверди колдонуп, бардык туташкан түзмөктөрдөн билдирүүлөрдү кабыл алып, аларды угуп жаткан бардык туташкан IOT түзмөктөрүнө таркатат деп айтуу керек. Бул сервер катары белгилүү нерсе роутер же брокер. Кандайдыр бир жол менен кадимки кардар-сервер мамилесинен алыс нерсе.

Башка жагынан алганда, методология IOT үчүн бул байланыш протоколдорунан таба аласыз:

  • PubSub: Publish / Susbcribe - бул түзмөктүн (Sub) брокерге билдирүү алгысы келгендигин кабарлаган билдирүүсүнүн үлгүсү, ал эми башка шайман (Pub) брокер үчүн аларды күтүп жаткан башка түзмөккө / секцияларга жайылтуу үчүн билдирүүлөрдү жарыялайт.
  • rRPC: Роутер Ремодеринин Процедурасы Чакыруулар процессти алыстан аткаруунун дагы бир үлгүсү. Анда шайман (Callee) брокерге белгилүү бир жол-жобону жүзөгө ашыра тургандыгын билдирет жана брокер аны башка шайманга (Чакыруучуга) таратат, ал процесс аткарылат.

Эми, ушул методологияны же мыйзам ченемдүүлүктү жүзөгө ашыруу үчүн, а билдирүү инфраструктурасы. Жана ушул мааниде экөөнү ажыратууга болот:

  • Билдирүү кезегиброкерге жазылууну баштаган бардык кардарлар үчүн бир билдирүү кезеги пайда болгон билдирүү кызматы. Акыркысы кардарды кардарга жеткиргенге чейин сакталат. Эгерде кардар же алуучу туташтырылбаса, ал туташканга чейин сакталат. Кызматтын бул түрлөрү Telegra, WhatsApp, Messenger жана башка ушул сыяктуу тез кабарлашуу колдонмолорунда колдонулгандарга окшош.
  • Билдирүү кызматы: бул дагы бир кызмат, анда брокер билдирүүнүн түрү боюнча чыпкаланып, байланышкан алуучу кардарга билдирүүлөрдү жөнөтөт. Эгерде кардар же кабыл алуучу шайман ажыратылса, анда билдирүүлөр жоголот (бирок анда кандайдыр бир журнал жүргүзүү тутуму болушу мүмкүн).

IoT протоколдору

Жогоруда айтылгандарды көрүп, эми тереңирээк карап көрөлү IoT протоколдору жакшыраак белгилүү. M2M эң көрүнүктүүлөрүнүн катарына төмөнкүлөр кирет:

  • AMQP (Билдирүүнү Өркүндөтүлгөн Өркүндөтүлгөн Протокол): Билдирүү Кезегинин PubSub түрүндөгү протоколу. Жакшы өз ара иштешүү жана ишенимдүүлүктү камсыз кылуу максатында иштелип чыккан. Юридикалык тиркемелер үчүн атайын, жогорку өндүрүмдүүлүк, жогорку кечигүү тармактары, критикалык ж.б.
  • WAMP (Веб Колдонмо Кабарлашуу Протоколу): бул RRPC сыяктуу PubSub типтеги дагы бир ачык протокол жана ал WebSocketsте иштейт.
  • CoAP (Колдонуунун чектелген протоколу): аз кубаттуулуктагы колдонмолор үчүн атайын иштелип чыккан протокол.
  • TOMP (Агым Текстке багытталган билдирүү протоколу): абдан жөнөкөй протокол жана максималдуу өз ара иштешүүгө жетишүү. HTTP тексттик билдирүүлөрдү берүү үчүн колдонулат.
  • XMPP (Extensible Messaging and Presence Protocol): IOT'до тез кабарлашуу колдонмолору үчүн колдонулган жана XML негизделген дагы бир протокол. Jan бул иш дагы ачык.
  • WMQ (WebSphere билдирүүлөрүнүн кезеги): IBM тарабынан иштелип чыккан протокол. Ал аты айтып тургандай, билдирүү кезегинин түрүнө кирет жана билдирүүгө багытталган.
  • MQTT: (кийинки бөлүмдү караңыз)

MQTT жөнүндө

MQTT пакети

El MQTT протоколу Бул PubSub үлгүсүн ээрчип турган Message Queue байланыш протоколу жана мен айтып өткөндөй M2M түрү. Ал IoTто кеңири колдонулат жана Интернетте колдонулган TCP / IP стекине негизделген.

MQTT учурда, ар бир байланыш ачык бойдон калууда жана ал бардык керектүү баарлашууда колдонулат. Башка белгилүү протоколдордогу окуялардан айырмаланып, ар бир байланыш жаңы байланышты талап кылат.

пайда

MQTT протоколунун артыкчылыктары IoT үчүн M2M байланышы жагынан айкын көрүнүп турат. Жогоруда айтылгандардан тышкары, бул төмөнкүлөрдү камсыз кылган протокол:

  • Масштабдуулук, барган сайын көбүрөөк кардарларды туташтыруу.
  • Кардарлардын ортосунда ажыроо, азыраак көз карандылык.
  • Асинхронизм.
  • Жөнөкөйлүк.
  • Өтө көп ресурстарды колдонбош үчүн жеңилдик (TLS / SSL коопсуздугу жогору болсо дагы).
  • Батареяга же 24/7 режимине көз каранды түзмөктөр үчүн энергияны үнөмдөө, чоң өткөрмө жөндөмүн талап кылбайт (жай туташуу үчүн идеалдуу, мисалы, кээ бир зымсыз байланыштар).
  • Байланыштагы ишенимдүүлүк жана бекемдик үчүн, коопсуздук жана сапат.

Тарыхын кароо

MQTT 90-жылдары түзүлгөн, анын эрте версиясы менен 1999-жылдагы протокол. Аны IBMдин доктору Энди Стэнфорд-Кларк жана Cirrus Link компаниясынын Арлен Ниппер (мурунку Евротех) жаратышкан.

La баштапкы идея натыйжалуу байланыш протоколу (өткөрмө өткөрүмдүүлүгү аз чыгым), жарык жана аз энергия сарптоо менен, чөл аркылуу өткөн куурга байкоо жүргүзүү үчүн протокол түзүү керек болчу. Убагында ал абдан кымбат болсо, азыр арзан жана ачык протокол болуп калды.

Баштапкы протокол көрүнүшү менен жакшыртылды жаңы нускалары, мисалы, OASIS (структураланган маалымат стандарттарын өркүндөтүү боюнча уюм) спецификациясына ылайык MQTT v3.1 (2013) ж.б. Башында ал IBM компаниясынын менчик протоколу болгонун, бирок 2010-жылы чыгарыларын жана аягында OASIS стандартына айланганын билишиңиз керек ...

MQTT байланышы кандайча иштейт

MQTT протоколу колдонулат чыпка, ар бир кардарга жөнөтүлгөн билдирүүлөр үчүн, иерархиялык тартипте уюштурулган темалардын же темалардын негизинде. Ошентип, кардар белгилүү бир тема боюнча билдирүү жаза алат. Ошентип, темага жазылган бардык кардарлар же туташкан шаймандар брокер аркылуу билдирүүлөрдү алышат.

MQ сыяктуу, билдирүүлөр кезекте калат жана кардар ошол билдирүүнү алганга чейин алар жоголуп кетпейт.

Байланыштар, мен дагы көрсөткөндөй, түзүлдү TCP / IP аркылуу, жана сервер же брокер байланышкан кардарлардын эсебин жүргүзөт. Демейки шартта, шаймандар 1883 номериндеги байланыш портторун колдонушат, бирок сиз кошумча коопсуздук үчүн SSL / TLS колдонуп жаткан болсоңуз, 8883 портуна туш болушуңуз мүмкүн.

Туташуу үчүн кардарлар, серверлер жана порттор гана эмес керек. Ошондой эле башкалар жөнөтүлгөн пакеттер же билдирүүлөр баарлашуу үчүн:

  • Байланыш орнотуу: Кардар тарабынан жөнөтүлгөн билдирүүнү / топтомду бардык керектүү маалыматтар менен туташтырыңыз. Бул маалымат кардардын ID, колдонуучунун аты, пароль ж.б. Брокер же сервер CONNACK пакети менен жооп берет, ал кардарга байланыш кабыл алынгандыгы, четке кагылгандыгы ж.б.
  • Билдирүүлөрдү жөнөтүү жана кабыл алуу: байланыш орнотулгандан кийин, брокерге жөнөтүлгөн билдирүүнүн темасы жана жүктөмү менен PUBLISH пакеттери же билдирүүлөрү колдонулат. Башка жагынан алганда, кызыкдар болгон кардар же кардарлар тиешелүү түрдө жазылуу же жазылуудан баш тартуу үчүн SUBSCRIBE жана UNSUSCRIBE топтомдорун колдонушат. Брокер ошондой эле кардар сураган операциянын ийгиликтүү болгондугу жөнүндө SUBACK жана UNSUBACK пакети менен жооп берет.
  • Байланышты сактоо: байланыш ачык бойдон кала тургандыгына кепилдик берүү үчүн, кардарлар мезгил-мезгили менен серверден PINGRESP пакети менен дал келе турган PINGREQ пакетин жөнөтүп турушат.
  • Байланышты токтотуу: кардар ажыратканда, ал окуя жөнүндө кабарлоо үчүн DISCONNECT пакетин жөнөтөт.

Ошол билдирүүлөр же топтомдор Мен сүйлөшкөндөрдүн түзүмү башка тармактык протоколдордун башка пакеттери менен бирдей:

  • Баш ат же туруктуу баш: 2-5 байттын аралыгын ээлеген туруктуу бөлүгү. Анда башкаруу коду, жөнөтүлгөн билдирүүнүн түрүнүн идентификатору жана анын узундугу камтылган. 1-4 байттын аралыгында, ар бир октеттин биринчи 7 битин узундугу үчүн маалымат катары жана узундугунун кошумча битин колдонуп, билдирүүнүн узундугун түзгөн бирден ашык байт бар экендигин белгилөө үчүн, узундукту коддоо үчүн колдонулат.
  • Өзгөрүлмө баш: ар дайым милдеттүү эмес, бирок милдеттүү эмес. Айрым пакеттерде айрым кырдаалдарда же белгилүү бир билдирүүлөрдө гана камтылат.
  • Мазмун же маалыматтар: пакет маалыматтары чындыгында жөнөтүлө турган билдирүүнү камтыйт. Ал бир нече кБдан 256 МБге чейин болушу мүмкүн.

Эгерде сиз билүүгө кызыкдар болсоңуз он алтылыктагы ылайыктуу код жөнөтүлгөн билдирүүлөрдүн түрлөрү үчүн:

Mensaje коду
CONNECT 0x10
БАЙЛАНЫШ 0x20
Жар 0x30
PUBACK 0x40
PUBREC 0x50
ПУБРЕЛ 0x60
PUBCOMP 0x70
ЖАЗЫЛЫҢЫЗ 0x80
SUBACK 0x90
КАТТАЛБАҢЫЗ 0xA0
ЖАЗЫЛУУ 0xB0
PINGREQ 0xC =
PINGRESP 0xD0
ӨЧҮРҮҮ 0xE0

Байланыштын сапаты жана коопсуздугу

MQTT тарабынан билдирүүлөрдүн дагы бир маанилүү деталы болуп саналат тейлөө сапаты же QoSжана коопсуздук. Байланыш тутумунун иштен чыккан учурдагы бекемдиги жана анын коопсуздугу ушуга байланыштуу болот.

Анын сапатына карата, аны аныктоого болот 3 ар кандай деңгээл:

  • QoS 0 (билбөө)- Билдирүү бир гана жолу жөнөтүлөт, эгерде ал ишке ашпай калса, анда ал жеткирилбейт. Ал сынчыл болбогон учурда колдонулат.
  • QoS 1 (ырастоо): билдирүү кардарга жеткирүүнү кепилдөө үчүн канча жолу керек болсо жөнөтүлөт. Жаман жагы, кардар ошол эле билдирүүнү бир нече жолу алса болот.
  • QoS 2 (ишендирилген)- Жогорудагыга окшош, бирок бир жолу гана жеткирүүгө кепилдик бар. Көбүнчө көбүрөөк ишенимдүүлүк талап кылынган өтө маанилүү системалар үчүн колдонулат.

Башка жагынан алып караганда MQTT коопсуздугу, бул жагынан анын күчүн камсыз кылуу үчүн ар кандай чараларды колдонсо болот. Мен буга чейин айтып өткөндөй, колдонуучу аты менен сыр сөздүн аныктыгын текшерүү, башка протоколдор сыяктуу эле, SSL / TLS аркылуу камсыз кылынышы мүмкүн. Кубаттуулугу төмөн ресурстарга же ресурстарга ээ болгон көптөгөн IoT түзмөктөр, коопсуз байланыштын ушул түрүн колдонууда ашыкча жүктөмдө көйгөйлөргө дуушар болушу мүмкүн ...

Ушул себептен улам, MQTT колдонгон көптөгөн IoT түзмөктөрү сырсөздөрдү жана колдонуучуларды колдонушат тегиз текст, бул кимдир бирөөнү тармактык трафикти жонокой алуу үчүн жыттай алат. Эгерде бул жетишсиз болсо, анда брокер дагы белгисиз байланыштарды кабыл алгандай кылып конфигурацияланышы мүмкүн, бул каалаган колдонуучуга көбүрөөк тобокелге салып, байланыш түзүүгө мүмкүнчүлүк берет.

Arduino менен MQTT колдонуу

Arduino UNO MQTT менен

Албетте сен кыла аласың Arduino менен MQTT протоколун колдонуңуз жана башка өнүгүү такталары, ошондой эле Rapsberry Pi ж.б. Бул үчүн, эгерде сизде жок болсо, Arduino тактасын байланыш менен камсыз кылуу керек. Ошондой эле, китепкана MQTT үчүн Arduino Кардары бул сизге ушул тапшырмаларды аткарууда жардам берет. Бул китепкана төмөнкүлөргө шайкеш келет:

Китепкананы Arduino IDE'ге жүктөп, орното алаарыңызды буга чейин эле билесиз: git клону https://github.com/knolleary/pubsubclient.git

Тезирээк MQTT колдонуу кодуна кээ бир колдонууда, чындыгында, ал жөнөкөй. Fritzing сүрөтүндө сиз тактаны көрө аласыз Arduino UNO ага Arduino Ethernet кошуу мүмкүнчүлүгү кошулган жана ал дагы туташтырылган DHT22 нымдуулук жана температура сенсору, башка нерсе болушу мүмкүн болсо да ...

Макул, ошону менен бирге, сиз киргизишиңиз керек болгон код үчүн Ардуино IDE Arduino боюнча MQTT протоколу менен иштөө үчүн, бул жөнөкөй:

  • Para кабарларды жиберүүгө 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);
}

  • Para билдирүүлөрдү кабыл алуу MQTT тарабынан сизге табак гана керек Arduino UNO жана Arduino Ethernet же башка элементтер менен байланышуу. Кодекстин мисалында:
#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();
}

IPни серверге ылайыктуу бирине өзгөртүшүңүз керектигин, ошондой эле Ethernet тармак адаптеринин MAC дарегин же сиз колдонуп жаткан кодду, ошондой эле коддун калган бөлүгүн, эгерде сиз аны ылайыкташтыргыңыз келсе, өзгөртүшүңүз керектигин унутпаңыз. башка долбоор. Бул жөн гана мисал!

Көбүрөөк маалымат алуу үчүн, сиз аласыз акысыз жүктөп алуу биздин PDF боюнча колдонмо программалоону баштоо үчүн Arduino IDE курсу менен.


Макаланын мазмуну биздин принциптерге карманат редакциялык этика. Ката жөнүндө кабарлоо үчүн чыкылдатыңыз бул жерде.

Комментарий биринчи болуп

Комментарий калтырыңыз

Сиздин электрондук почта дареги жарыяланбайт. Милдеттүү талаалар менен белгиленет *

*

*

  1. Маалыматтар үчүн жооптуу: Мигель Анхель Гатан
  2. Маалыматтын максаты: СПАМды көзөмөлдөө, комментарийлерди башкаруу.
  3. Мыйзамдуулук: Сиздин макулдугуңуз
  4. Маалыматтарды берүү: Маалыматтар үчүнчү жактарга юридикалык милдеттенмелерден тышкары билдирилбейт.
  5. Маалыматтарды сактоо: Occentus Networks (ЕС) тарабынан уюштурулган маалыматтар базасы
  6. Укуктар: Каалаган убакта маалыматыңызды чектеп, калыбына келтирип жана жок кыла аласыз.