MQTT

Message Queuing Telemetry Transport

MQTT, mesajları cihazlar arasında taşıyan hafif, yayınla-abone ol ağ protokolüdür. Protokol genellikle TCP/IP üzerinden çalışır, ancak sıralı, kayıpsız, çift yönlü bağlantılar sağlayan herhangi bir ağ protokolü MQTT'yi destekleyebilir.

Burada yazılanlar MQTT organizasyonuna ait https://mqtt.org/ sitesinden alıntıdır.

MQTT, Nesnelerin İnterneti (IoT) için bir OASIS standart mesajlaşma protokolüdür. Küçük bir kod alanı ve minimum ağ bant genişliği ile uzak cihazları bağlamak için ideal olan son derece hafif bir yayınla/abone ol mesajlaşma aktarımı olarak tasarlanmıştır. MQTT günümüzde otomotiv, imalat, telekomünikasyon, petrol ve gaz gibi çok çeşitli endüstrilerde kullanılmaktadır.

Neden MQTT?

  • Hafif ve Verimli : MQTT istemcileri çok küçüktür, minimum kaynak gerektirir, bu nedenle küçük mikro denetleyicilerde kullanılabilir. MQTT mesaj başlıkları, ağ bant genişliğini optimize etmek için küçüktür.

  • Çift Yönlü İletişim : MQTT, cihazdan buluta ve buluttan cihaza mesajlaşmaya izin verir. Bu, mesajların bir grup şeye kolayca iletilmesini sağlar.

  • Milyonlarca Şeye Ölçeklendirin : MQTT, milyonlarca IoT cihazına bağlanmak için ölçeklenebilir.

  • Güvenilir Mesaj Teslimatı : Mesaj tesliminin güvenilirliği, birçok IoT kullanım durumu için önemlidir. Bu nedenle MQTT'nin tanımlanmış 3 hizmet kalitesi seviyesi vardır: 0 - en fazla bir kez, 1- en az bir kez, 2 - tam olarak bir kez.

  • Güvenilmez Ağlar için Destek : Birçok IoT cihazı, güvenilmez hücresel ağlar üzerinden bağlanır. MQTT'nin kalıcı oturumlar için desteği, istemciyi aracıya yeniden bağlama süresini azaltır.

  • Güvenlik Etkin : MQTT, TLS kullanarak mesajları şifrelemeyi ve OAuth gibi modern kimlik doğrulama protokollerini kullanarak istemcilerin kimliğini doğrulamayı kolaylaştırır.

1.Adım Bağlantı Oluşturmak

İnSCADA'da MQTT protokolü ile veri alış verişi yapabilmek için bir cihaz bağlantısı tanımlamak için öncelikle "Development" modülünde bulunan "Bağlantılar" menüsü kullanılmaktadır. Bakınız; Bağlantılar

Protokol olarak " MQTT " seçildikten sonra açılan özellikler menüsü doldurulmalıdır.

  • Indentifier : MQTT Broker'ına bağlanan her bir client'ın id'sidir. Broker gelen mesajların kimden geldiğini anlamak için bu id'leri kullanmaktadır.

  • Kullanıcı adı ve şifre : MQTT broker'ı kendisine veri gönderen 'indentifier'ı doğrulamak ve yetkilendirmek için kullanıcı adı ve parola kullanabilmektedir.

  • Use SSL : Client bilgileri bir SSL sertifikası ile doğrulanabiliyor ise kullanıcı adı ve parola kullanımına gerek duyulmadan işleme devam etmenize olanak sağlamaktadır. Aynı zamanda daha güvenli bağlantı için SSL doğrulama ve kullanıcı adı şifrede aynı anda kullanılabilmektedir.

  • initial delay in ms : Bir client'ın MQTT broker'ı ile arasındaki bağlantının kopması sonrası bekleme süresini belirtmektedir.

  • Max delay in ms : Broker ile bağlantı kopmasından sonra maksimum bekleme süresini belirtmektedir.

  • Clean Session : Celan Session flag' i client'ın broker ile kalıcı bir oturum oluşturmak isteyip istemediğini belirtmek için kullanılmaktadır. Özetle bağlantının mevcut oturumla mı devam etmesini veya her bağlantıda yeni bir oturum mu açılması istendiğinin kararıdır.

  • Keep Alive in ms : Bu süre client ile MQTT broker arasında mesaj göndermeden bağlantının açık kalabilieceği maksimum süreyi belirtmektedir.

  • Pool Size : Alınan mesajların parçacıklarının büyüklüğünü belirtmektedir.

2.Adım Bağlantıya Bağlı Cihaz Oluşturmak.

Projemiz için MQTT bağlantımız eklendikten sonra "development" modülünde bulunan " cihazlar " menüsüne gelerek ilgili bağlantı için cihaz tanımlaması yapılır . Bakınız ; Cihazlar

3.Adım Cihazdan Okunacak/Yazılacak Veri Bloklarının Oluşturulması.

// return {'SAMPLE_VALUE_01': JSON.parse(message.payload).i};

Örneğimizde ; MQTT Broker'ında bulunan değişkenlerden " i " değişkeninin data verilerini inSCADA'da bulunan " SAMPLE_VALUE_01 " değişkeni ile eşleştirip " i " değerinin bu değişken üzerinden inSCADA'ya aktarılması gösterilmektedir.

//return {
    topic: "A/B",
    qos:0,
    retain:false,
    payload: JSON.stringify({"i":setValueRequests[0].value})
}

Burada ise , MQTT Broker'ından gelen veri alma isteğinde " setValueRequests[0].value " olan istek için inSCADA'da ki değerin MQTT Broker'ında bulunan " i " değişkenine tekrar geri gönderilmesi gösterilmektedir.

Last updated