MQTT: açık bir ağ protokolü ve IoT'deki önemi

MQTT protokol ağı IoT

Adını hatırlıyorum MQTT, M2M (Makineden Makineye) türünde bir ağ iletişim protokolü olduğu için kulağa epeyce gelecek. İngilizce kısaltması için Nesnelerin İnterneti veya Nesnelerin İnterneti'nin (Nesnelerin İnterneti) yeni dönemi sayesinde oldukça popüler hale geliyor. Ayrıca birçok avantaj sağlayan açık bir protokoldür.

Aslında, bu gibi bazı iletim sınırlamaları olan cihazlarda oldukça iyi olduğu için IoT'nin temel direklerinden biri haline geldi. MQTT kısaltması Message Queuing Telemetri Aktarımı, ağ iletişimi için OASIS ve ISO'dan (ISO / IEC 20922) açık bir standarttır ve genellikle ünlü TCP / IP üzerinde çalışır.

Ağ protokolleri

OSI modeli ve katmanları

Jardines de Viveros iletişim protokolleri İki veya daha fazla cihazın veya sistemin birbiriyle iletişim kurmasına izin veren kurallardır. Yani, ister yazılım ve donanım (veya her ikisi) tarafından uygulanmış olsun, çeşitli yollarla ve tanımlı bir formatla bilgi aktarımı için bir protokoldür.

El standart Protokolün bir çok iletişim özelliği tanımlanır. Senkronizasyon, anlambilim, sözdizimi, paket formatı vb.Kurallardan gidebilir. Ve gerçek şu ki, ihmal edilebilir bir şey değiller, çünkü bugün bu protokoller sayesinde İnternet ve diğer iletişim ağlarını kullanabiliyoruz ...

Ve elbette, sadece bir protokol değil, çok sayıda protokol var. Örneğin, ünlü Uygulama katmanı için DNS, FTP, MQTT, HTTP ve HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP vb. Aktarım katmanındayken, TCP, UDP, vb. Kadar meşhur olanların yanı sıra IPv4 veya IPv6 (mevcut en fazla sayıda IP'yi mümkün kılan ve IPvXNUMX) gibi İnternet katmanlarını bulabilirsiniz. IoT), IPSec vb. ve DSL, Ethernet, WiFi, ARP vb. gibi bağlantı katmanından diğerleri.

IoT protokolleri hakkında

MQTT protokolü

Tabii ki, belirli iletişim protokolleri vardır veya bunlar, IOT. Yani bir önceki bölüm göz önüne alındığında, iki veya daha fazla IoT cihazının birbiriyle iletişim kurup anlayabilmesi için bir dizi tanımlanmış standart olacaktır ve bunlar genellikle M2M yani makineden makineye iletişimdir. birçok IoT cihazı bağlı ve sensörlerden veya diğer kaynaklardan bilgi paylaşıyor.

Çok sayıda IoT cihazı nedeniyle, bu protokoller bant genişliği, hız vb. Sınırlamaların ötesindeki gereksinimleri karşılamalıdır. (birçok cihazın gömülü ve ucuz olduğunu unutmayın), bu genellikle bazı cihazlarda bulunur. Ve gerçeği kastediyorum ölçeklenebilir olmalı, gerekirse ve global sistemi etkilemeden daha fazla bağlı cihaz ekleyebilmek.

Ayrıca, bir düşük bağımlılık cihazlar arasında bağlantı, böylece bir cihaz çıkarılırsa sorunlar üretilmez. Ve tabii ki, aynı zamanda, çok sayıda cihazla ve çok çeşitli sistemlerle çalışması için yüksek bir birlikte çalışabilirlik aranıyor, çünkü IoT dünyası oldukça heterojen.

Diğer yararlı özellikler, bunları uygulama kolaylığı olacaktır. güvenlik, vb. IoT'nin güvenlik açısından büyük zorluklar yarattığını unutmayın. Daha da önemlisi, bağlı cihazların çoğu belirli durumlarda kritik olma eğiliminde olduğunda ... örneğin, küçükler için oyuncaklar.

Önemli kavramlar

Bununla birlikte, IoT çözümlerinin, onları dinleyen tüm bağlı IoT cihazlarına yayan ve dağıtan tüm bağlı cihazlardan mesajları almak için merkezi bir sunucu kullandığı söylenmelidir. Bu sunucu, yönlendirici veya komisyoncu. Bazı yönlerden geleneksel istemci-sunucu ilişkisinden uzak bir şey.

Ayrıca, metodolojiler IoT için bu iletişim protokollerinde bulabileceğiniz şeyler şunlardır:

  • PubSub: Yayınla / Abone Ol, bir aygıtın (Alt) aracıyı bir mesaj almak istediğini bildirirken, başka bir aygıtın (Pub) aracının kendilerini bekleyen diğer aygıt / aygıtlara dağıtması için mesajlar yayınladığı bir mesajlaşma modelidir.
  • rRPC: Yönlendirici Yeniden Denetleyici Prosedür Çağrıları, uzaktan işlem yürütmenin başka bir modelidir. İçinde bir aygıt (Aranan), aracıyı belirli bir yordamı gerçekleştireceği konusunda bilgilendirir ve aracı bunu, söz konusu işlemin yürütüldüğü başka bir aygıta (Arayan) dağıtır.

Şimdi, bu metodolojileri veya kalıpları uygulamak için, mesajlaşma altyapısı. Ve bu anlamda iki ayırt edilebilir:

  • Mesaj Sırası: komisyoncuya bir abonelik başlatan tüm istemciler için tek bir mesaj kuyruğunun oluşturulduğu mesajlaşma hizmeti. İkincisi, istemciye teslim edilene kadar mesajları saklayacaktır. İstemci veya alıcı bağlı değilse, bağlanana kadar korunur. Bu tür hizmetler, Telegra, WhatsApp, Messenger vb. Anlık mesajlaşma uygulamalarında kullanılanlar gibidir.
  • Mesaj servisi: aracının iletileri bağlı alıcı istemciye göndererek ileti türüne göre filtrelediği başka bir hizmettir. İstemci veya alıcı cihazın bağlantısı kesilirse, mesajlar kaybolur (bazı kayıt sistemine sahip olmasına rağmen).

IoT protokolleri

Yukarıdakileri gördükten sonra şimdi daha yakından bakalım IoT protokolleri daha iyi bilinir. M2M'nin en öne çıkanlarından bazıları şunlardır:

  • AMQP (Gelişmiş Mesaj Kuyruklama Protokolü): Message Queue'nun PubSub türü bir protokolüdür. İyi bir birlikte çalışabilirliğe sahip olacak ve güvenilirlik sağlayacak şekilde tasarlanmıştır. Özellikle kurumsal uygulamalar, yüksek performans, yüksek gecikmeli ağlar, kritik vb.
  • WAMP (Web Uygulaması Mesajlaşma Protokolü): rRPC gibi PubSub türünde başka bir açık protokoldür ve WebSockets üzerinde çalışır.
  • CoAP (Kısıtlı Uygulama Protokolü): düşük kapasiteli uygulamalar için özel olarak tasarlanmış bir protokoldür.
  • TOMP (Akışlı Metin Odaklı Mesajlaşma Protokolü): çok basit protokol ve maksimum birlikte çalışabilirlik elde etmek için. HTTP, metin mesajlarını iletmek için kullanılır.
  • XMPP (Genişletilebilir Mesajlaşma ve Durum Protokolü): anlık mesajlaşma uygulamaları için IoT'de kullanılan ve XML'e dayalı başka bir protokol. Jan bu dava da açık.
  • WMQ (WebSphere İleti Kuyruğu): IBM tarafından geliştirilen protokol. Adından da anlaşılacağı gibi Message Queue tipindedir ve mesaj odaklıdır.
  • MQTT: (sonraki bölüme bakın)

MQTT hakkında her şey

MQTT paketi

El MQTT protokolü Daha önce de bahsettiğim gibi, PubSub modelini izleyen ve M2M tipi bir Message Queue iletişim protokolüdür. IoT'de yaygın olarak kullanılır ve İnternette kullanılan TCP / IP yığınına dayanır.

MQTT durumunda, her bağlantı açık tutulur ve gerekli her iletişimde yeniden kullanılır. Bilinen diğer protokollerde olanlardan farklı bir şey, her iletişimin gerçekleşmesi yeni bir bağlantı gerektirir.

Avantaj

MQTT protokolünün avantajları, IoT için M2M iletişimi açısından oldukça belirgindir. Yukarıda belirtilen her şeye ek olarak, şunları sağlayan bir protokoldür:

  • Daha fazla müşteriyi bağlamak için ölçeklenebilirlik.
  • Daha az bağımlılık için istemciler arasında ayırma.
  • Eşzamansızlık.
  • Basitlik.
  • Çok fazla kaynak tüketmemek için hafiflik (TLS / SSL güvenliği ile artmasına rağmen).
  • Bataryaya bağlı olan veya 24/7 çalışan cihazlar için enerji açısından verimli, büyük bir bant genişliğine ihtiyaç duymaz (bazı kablosuz bağlantılar gibi yavaş bağlantılar için idealdir).
  • İletişimde daha fazla güvenilirlik ve sağlamlık için güvenlik ve kalite.

tarih

MQTT, 90'lı yıllarda, 1999 protokolü. IBM'den Dr. Andy Stanford-Clark ve Cirrus Link'ten (eski adıyla Eurotech) Arlen Nipper tarafından oluşturuldu.

La ilk fikir verimli bir iletişim protokolü (düşük bant genişliği tüketimi), ışık ve düşük enerji tüketimi ile çölde seyahat eden bir boru hattını izlemek için bir protokol oluşturmaktı. O zamanlar çok pahalıydı ama şimdi ucuz ve açık bir protokol haline geldi.

İlk protokol, yeni versiyonlar, OASIS (Yapılandırılmış Bilgi Standartlarını Geliştirme Organizasyonu) şartnamesindeki MQTT v3.1 (2013) gibi, vb. Başlangıçta IBM'in tescilli bir protokol olduğunu, ancak 2010'da piyasaya sürüleceğini ve OASIS'te bir standart haline geleceğini bilmelisiniz ...

MQTT bağlantısı nasıl çalışır?

MQTT protokolü kullanır bir filtre, hiyerarşik olarak düzenlenmiş konulara veya konulara göre her müşteriye gönderilen mesajlar için. Bu şekilde, bir müşteri belirli bir konu hakkında bir mesaj gönderebilir. Bu şekilde, konuya abone olan tüm bu istemciler veya bağlı aygıtlar, aracı aracılığıyla mesajlar alacaktır.

MQ olduğu gibi, mesajlar kuyrukta kalacak ve müşteri bu mesajı alana kadar kaybolmazlar.

Bağlantılar da belirttiğim gibi yapıldı TCP / IP aracılığıylave sunucu veya aracı, bağlı istemcilerin kaydını tutacaktır. Varsayılan olarak cihazlar 1883 numaralı iletişim bağlantı noktalarını kullanır, ancak ek güvenlik için SSL / TLS kullanıyorsanız 8883 numaralı bağlantı noktasıyla da karşılaşabilirsiniz.

Bağlantının mümkün olması için sadece istemcilere, sunuculara ve bağlantı noktalarına gerek yoktur. Ayrıca diğerleri gönderilen paketler veya mesajlar iletişimin gerçekleşmesi için:

  • Bağlantı kurun: İstemci tarafından gönderilen mesajı / paketi gerekli tüm bilgilerle BAĞLAYIN. Bu bilgiler arasında müşteri kimliği, kullanıcı adı, şifre vb. Yer alır. Aracı veya sunucu, istemciye bağlantının kabul edildiğini, reddedildiğini vb. Bildiren bir CONNACK paketi ile yanıt verir.
  • Mesaj gönderin ve alın: bağlantı kurulduktan sonra, PUBLISH paketleri veya mesajları, konu ve aracıya gönderilen mesajın yükü ile birlikte kullanılır. Öte yandan, ilgilenen müşteri veya müşteriler aboneliklerini sırasıyla abone olmak veya geri çekmek için ABONE OL ve KULLANIMDAN KALDIR paketlerini kullanır. Aracı ayrıca, müşteri tarafından talep edilen işlemin başarısını bildirmek için sırasıyla bir SUBACK ve UNSUBACK paketi ile yanıt verecektir.
  • Bağlantının sürdürülmesi: Bağlantının açık kalmasını sağlamak için istemciler periyodik olarak sunucudan gelen bir PINGRESP paketi ile eşleştirilecek bir PINGREQ paketi gönderebilirler.
  • Bağlantıyı sonlandır: Bir istemci bağlantısı kesildiğinde, olayı bildirmek için bir BAĞLANTI KESME paketi gönderir.

Şunlar mesajlar veya paketler Bahsettiklerim, diğer ağ protokollerinin diğer paketleri ile aynı yapıya sahiptir:

  • Başlık veya sabit başlık: 2-5 bayt alan kaplayan sabit bir bölümdür. Bir kontrol kodu, gönderilen mesaj tipinin kimliği ve uzunluğunu içerir. Uzunluk için veri olarak her sekizlinin ilk 1 biti ve mesajın uzunluğunu oluşturan birden fazla bayt olduğunu belirlemek için ek bir devamlılık biti kullanılarak uzunluğu kodlamak için 4-7 bayt arası kullanılır.
  • Değişken başlık: her zaman zorunlu değil, isteğe bağlıdır. Yalnızca belirli durumlarda veya belirli mesajlarda bazı paketlerde bulunur.
  • İçerik veya veriler: paket verileri, gönderilecek mesajı gerçekte içeren şeydir. Birkaç kB'den 256 MB'a kadar olabilir.

Bilmekle ilgileniyorsanız onaltılık olarak karşılık gelen kod gönderilen mesaj türleri için:

mesaj Kod
CONNECT 0x10
BAĞLANTI 0x20
YAYINLA 0x30
YUVARLAK 0x40
kasık 0x50
YAYIN 0x60
pubcomp 0x70
ABONE OL 0x80
GERİ DÖN 0x90
KULLANILMAMALIDIR 0xA0
SÖZLEŞMEDEN ÇIK 0xB0
PINGREQ 0xC =
PİNGRESP 0xD0
ÇIKARIN 0xE0

İletişimin kalitesi ve güvenliği

MQTT'nin mesajlarının bir diğer önemli detayı ise hizmet kalitesi veya QoSve güvenlik. Arıza durumunda iletişim sisteminin sağlamlığı ve güvenliği buna bağlı olacaktır.

Kalitesine göre belirlenebilir 3 farklı seviye:

  • QoS 0 (onaylanmamış)- Mesaj yalnızca bir kez gönderilir ve hata durumunda teslim edilmez. Kritik olmadığında kullanılır.
  • QoS 1 (onay): Mesaj, müşteriye teslimatı garantilemek için gerektiği kadar gönderilecektir. Olumsuz yanı, müşterinin aynı mesajı birkaç kez alabilmesidir.
  • QoS 2 (garantili)- Yukarıdakine benzer, ancak yalnızca bir kez teslim edilmesi garantilidir. Genellikle daha fazla güvenilirliğin gerekli olduğu daha kritik sistemler için kullanılır.

Öte yandan, MQTT güvenliğiBu konudaki gücünü sağlamak için çeşitli önlemler kullanılabilir. Daha önce de bahsettiğim gibi, diğer birçok protokol gibi kullanıcı adı ve şifrenin doğrulanması da SSL / TLS ile sağlanabilir. Düşük kapasitelere veya kaynaklara sahip birçok IoT cihazı, bu tür güvenli iletişimi kullanırken işin aşırı yüklenmesiyle ilgili sorunlar yaşayabilir ...

Bu nedenle, MQTT kullanan birçok IoT cihazı şifreleri ve kullanıcıları uçak metni, bu da birinin ağ trafiğini çok kolay bir şekilde almak için koklamasına neden olabilir. Ve bu yeterli değilse, aracı, herhangi bir kullanıcının daha büyük risk içeren iletişim kurmasına izin verecek şekilde anonim bağlantıları kabul edecek şekilde de yapılandırılabilir.

MQTT'yi Arduino ile kullanma

Arduino UNO MQTT ile

Tabi ki yapabilirsin Arduino ile MQTT protokolünü kullanın ve diğer geliştirme kartlarının yanı sıra Rapsberry Pi vb. Bunu yapmak için, Arduino kartınıza sahip değilse bağlantı sağlamalısınız. Ayrıca kütüphane MQTT için Arduino İstemcisi bu görevlerde size yardımcı olacaktır. Bu kitaplık şunlarla uyumludur:

Şu komutu kullanarak kütüphaneyi Arduino IDE'nize indirip kurabileceğinizi zaten biliyorsunuz: git klon https://github.com/knolleary/pubsubclient.git

En kısa sürede MQTT'yi kullanmak için koda bazı uygulamalarda gerçek şu ki basittir. Fritzing görüntüsünde bir plak görebilirsiniz Arduino UNO Arduino Ethernet tarafından hangi bağlantının eklendiği ve ayrıca bağlandığı a DHT22 nem ve sıcaklık sensörü, her ne kadar başka bir şey olabilirdi ...

Tamam, bununla birlikte, içinde oluşturmanız gereken kod için Arduino IDE Arduino'da MQTT protokolüyle çalışmak bu kadar basit:

  • Daha mesaj gönder 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);
}

  • Daha alınan mesajlar MQTT ile sadece plakaya ihtiyacınız var Arduino UNO ve Arduino Ethernet veya başka herhangi bir eleman ile bağlantı. Koda gelince, bir örnek şöyle olacaktır:
#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'yi sunucu için uygun olana değiştirmeniz gerektiğini ve ayrıca Ethernet ağ bağdaştırıcınızın veya kullandığınız MAC adresini ve uyarlamak istiyorsanız kodun geri kalanını değiştirmeniz gerektiğini unutmayın. farklı bir proje. Bu sadece bir örnek!

Daha fazla bilgi için şunları yapabilirsiniz: ücretsiz indir nuestro PDF kılavuzu Programlamaya başlamak için Arduino IDE kursu ile.


İlk yorumu siz

Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.