mqtt header

MQTT Haberleşme Protokolü

MQTT protokolü 1999 yılında petrol ve gaz sektörü için geliştirilmiştir. Mühendisler, petrol boru hatlarını uyduyla gözlemlemek için minimum düzeyde bant genişliğine sahip ve en az seviyede enerji tüketen bir protokole ihtiyaç duyuyordu

01.07.2024
6 mins

MQTT protokolü 1999 yılında petrol ve gaz sektörü için geliştirilmiştir. Mühendisler, petrol boru hatlarını uyduyla gözlemlemek için minimum düzeyde bant genişliğine sahip ve en az seviyede enerji tüketen bir protokole ihtiyaç duyuyordu. İlk etapta bu protokol, başlangıç sürecini bir IBM ürünü olan MQ serisi desteklediği için “Mesaj Sıraya Alma ve Telemetri Aktarma” olarak biliniyordu. 2010 yılında IBM ilk sürümü MQTT 3.1'i ücretsiz ve açık bir protokol olarak yayınladı. Bunun ardından protokol 2013 yılında kar amacı gütmeyen bir kuruluş olan OASIS (Organization for the Advancement of Structured Information Standards - Yapılandırılmış Bilgi Standartlarının Geliştirilmesi Organizasyonu) birimine geliştirilmesi için gönderildi. 2019 yılında OASIS, geliştirilmiş MQTT sürüm 5'i yayınladı. MQTT’nin günümüze kadar farklı sürümleri yayınlanmıştır. MQTT 3.0 ve MQTT 5.0 sırasıyla 3 ve 5 sürümlerini ifade ederken MQTT 3.1.1 4 sürümünü ifade eder. MQTT’nin otomotiv, lojistik, üretim, akıllı sistemler, tüketici ürünleri ve ulaşım gibi pek çok çeşitli ve geniş kullanım alanı vardır.

MQTT terimi "Message Queuing Telemetry Transport" kısaltmasıdır. IoT (Internet of Things) haberleşme için kullanılan bir standarttır. Makineden makineye -uçtan uca- iletişim için kullanılan mesajlama protokolüdür. MQTT temel olarak aracı (broker) ve istemci (client) olmak üzere iki bileşenden oluşmaktadır. Yazının devamında “aracı” için “broker” İngilizce ifadesini kullanırken “istemci” Türkçe olarak kullanılacaktır.

MQTT broker temelde bir sunucudur. İstemciler ise bu sunuyla iletişim kurabilen, sisteme bağlı aygıtlardır. Bir aygıt veya istemci bir broker’a veri göndermek istediğinde buna publish (yayımlama) denir. İşlem tersine çevrildiğinde buna subscribe (abone) denir.

Niçin MQTT?

Hafif ve verimlidir.

Çift yönlü iletişim sağlar

Ölçeklenebilirliği sayesinde milyonlarca IoT cihazıyla bile haberleşebilir.

Güvenilir mesaj dolaşımına (QoS-0 en fazla bir defa, QoS-1 en az bir defa, QoS-2 tam olarak bir defa) olanak sağlar.

Güvensiz ağlar için desteklenir.

Etkin güvenlik, TLS Encryption ve OAuth gibi kimlik doğrulama protokollerini destekler.

MQTT Bileşenleri

MQTT, yayınla/abone ol modelini, istemci ve broker bileşenlerini aşağıdaki şekilde tanımlayarak uygular. Bir MQTT istemcisi, bir MQTT kütüphanesi mevcut herhangi bir cihaz (sunucu, mikro denetleyici, mobil cihaz, PC vb.) olabilir. İstemci, mesaj gönderiyorsa yayıncı olarak, mesaj alıyorsa alıcı olarak işlev görür. MQTT broker, farklı istemciler arasındaki mesajları koordine eden arka uç sistemidir. Aracının sorumlulukları arasında mesaj alma ve filtreleme, her bir mesaja abone olan istemcileri belirleme ve bunlara mesajların gönderilmesi vardır. İstemciler ve aracılar bir MQTT bağlantısı aracılığıyla iletişime geçer.

MQTT Genel Çalışma Prensibi ve Bileşenleri

MQTT istemcisi, MQTT broker ile bağlantı kurar. Bağlantı kurulduğunda istemci, mesaj yayınlayabilir, belirli mesajlara abone olabilir veya ikisini birden yapabilir. MQTT broker bir mesaj aldığında, mesajı ilgili başlığa abone olan istemcilere yönlendirir. Bahsedilen “Publish/Subscribe, Message, Topics, Broker” MQTT’nin temel bileşenlerini oluşturmaktadır.

Publish/Subscribe (MQTT Aboneliği): Publish/subscribe sisteminde, bir cihaz bir konu hakkında mesaj yayınlayabilir veya mesaj almak için belirli bir konuya abone olabilir. MQTT istemcileri, ilgi duyabilecekleri konular hakkında mesaj almak için MQTT broker'ına “SUBSCRIBE” mesajı gönderir. Bu mesaj benzersiz bir tanımlayıcı (ID) ve bir abonelik listesi barındırır. Örneğin, telefonunuzdaki akıllı ev uygulaması evinizde kaç tane ışığın açık olduğunu görüntülemek istiyorsa “Işık” konusuna abone olup tüm açık mesajların sayacını artırır.

Mesajlar (MQTT Yayını): Mesajlar, cihazlarınız arasında değiş tokuş etmek istediğiniz bilgilerdir. Örneğin, bir komut gibi bir mesaj veya sensör okumaları gibi veriler olabilir. MQTT istemcileri, konuyu ve veriyi barındıran mesajları bayt formatında yayınlar. İstemci; metin verisi, ikili veri, XML veya JSON dosyası gibi veri formatını belirler. Örneğin, akıllı ev sistemi bünyesindeki bir lamba açık mesajını “oturmaodası/ışık” konusu altında yayınlayabilir.

Topics (Konu): Gelen mesajlara ilgi kaydetme şekliniz veya mesajı nerede yayınlamak istediğinizi nasıl belirlediğinizdir. Konular, eğik çizgi ile ayrılmış dizelerle temsil edilir. Her eğik çizgi bir konu seviyesini gösterir. Konular, bir dosya veya klasör dizinine benzer şekilde, hiyerarşik olarak organize edilir. Örneğin, her bir katında birbirinden farklı akıllı cihazlara sahip çok katlı bir evde çalışan akıllı bir ev sistemini göz önünde bulundurun. Bu durumda MQTT broker’ı, konuları aşağıdaki gibi organize edebilir:

evimiz/girişkatı/oturmaodası/ışık

evimiz/girişkatı/mutfak/ısı

Broker (Aracı): MQTT broker tüm mesajları almaktan, mesajları filtrelemekten, kiminle ilgileneceğine karar vermekten ve ardından mesajı abone olan tüm istemcilere yayınlamaktan sorumludur.

Bu yazıda kısaca bahsedilen MQTT tabanlı sistemleri geliştirmek için istemci tarafında Python ve C++ dilleri için Eclipse tarafından geliştirilen Paho kütüphanesi bulunmaktadır. Farklı yazılım dilleri içinde istemci kütüphaneleri mevcuttur. Eclipse Mosquitto ise açık kaynak MQTT broker’ıdır.

Referanslar

[1] https://mqtt.org/

[2] https://mosquitto.org/

[3] https://eclipse.dev/paho/index.php?page=clients/python/index.php

[4] https://aws.amazon.com/tr/what-is/mqtt/