MQTT Nedir? Nasıl Çalışır?



MQTT Nedir?

MQTT (Message Queuing Telemetry Transport) kelimelerinin baş harflerinden oluşur. Türkçe karşılığı olarak "Mesaj Kuyruğa Alma Telemetri Aktarımı" yani kablolu ve kablosuz ağlar üzerinden sistemlerin uzaktan  izlenmesi ve kontrol  edilmesi için geliştirilen hafif (Lightweight) TCP/IP protokolüdür.


MQTT M2M (Machine 2 Machine) makineler arası veri aktarımı için kullanılmaktadır. Küçük byte lar ile veri aktarımının yapılabilmesi IOT (Internet Of Things) cihazları arasında yaygınlaşmasına neden olmuştur.


MQTT Nasıl Çalışır?

MQTT nin çalışması için 1 komisyoncu (Broker), 1 yayıncı (Publisher) ve 1 de abone olan (Subscriber) a ihtiyaç vardır. Publisher ve Subscriber 1 er adet olabileceği gibi birden fazlada olabilir. MQTT nin mesajların ayrıştırılması için "Konu" (Topic) kullanılmaktadır. Topic örnek olarak "ev/salon/sicaklik" gibi bir konu kullanılabilir. Bu Topic ile ile gönderilen mesaj Publisher den Subscriber a doğru Broker aracılığıyla iletilir. 



Publisher tarafından gönderilen mesajın Broker aracılığıyla Subscriber a iletilmesi için Subscriber ın Broker bağlı olması gerekir. Subscriber Broker a socket ile bağlıdır.  

TCP Socket için MQTT çalışan cihazlarda Subscriber ve Publisher default olarak 1883 nolu port kullanmaktadır.

Websocket için MQTT çalışan cihazlarda Subscriber ve Publisher default olarak 9001 nolu port kullanmaktadır.


MQTT Nerede Çalışır?

MQTT clientleri Arduino geliştirme kartı, ATMEGA, STM, PIC gibi mikrodenetleyiciler için ve Android, Linux, Windows ve MacOS gibi işletim sistemleri için kullanılabilmektedir. Bu cihazlarda MQTT için socket yapısı kullanılmaktadır. Bir web sayfası üzerinden bağlantı kurulacak ise Websocket yapısı kullanılabilmektedir.


Gömülü sistem cihazlarında MQTT yi kullanmak için mikrodenetleyiciniz için geliştirilen kütüphaneleri kullanmalısınız.

Örneğin aşağıdaki kütühaneler client olarak kullanılmaktadır;

Android için MQTT kütüphanesi : https://github.com/eclipse/paho.mqtt.android 


MQTT Broker Nedir?

MQTT cihazları arasında mesaj alış verişini sağlayan Publisher den gelen mesajı Subscriber a ileten sunucu yazılımıdır. MQTT Broker Android, Linux, MacOS ve Windows gibi işletim sistemleri üzerine kurularak çalıştırılmaktadır. 

MQTT Broker için https://mqtt.org/ sayfasını inceleyebilirsiniz. Bir çok şirket MQTT standartlarına bağlı kalarak kendi Broker ını geliştirmektedir. Broker lar farklı firmalar tarafından geliştirilsede MQTT standartlarına göre çalışmaktadır. 

Broker lar 3 modda çalışmaktadır. Bu çalışma modları mesajların teslim edilme şartını belirlemektedir. Amaç en az veri trafiği olduğu için mesajın ne kadar önemli olduğuna göre bu 3 moddan birisi seçilmelidir.

1- QOS0 : En az veri trafiği QOS0 modunda kullanılmaktadır. Publisher dan gelen mesajın Subscriber a kontrolsüz bir şekilde gönderilmesini sağlar. Herhangi bir kontrol işlemi gerçekleştirilmez.

2- QOS1 : Gönderilen mesajın Subscriber a ulaşması ile geriye bir mesaj döner. Bu durumda en az 1 kere mesaj iletilmiş olur.

3- QOS2 : Publisher ın gönderdiği mesaj Subscriber a gelir ve geriye iletim mesajı iletilir, Publisher tekrar mesajın doğru bir şekilde gidip gitmadiğini sorarak Subscriber den 2. bir onay istenir.

En çok kullanılan MQTT Broker lar şu şekilde sıralanabilir.

1- Eclipse Mosquitto https://mosquitto.org/

2- HiveMQ https://www.hivemq.com/

3- EMQX https://www.emqx.io/

4- CloudMQTT https://www.cloudmqtt.com/


MQTT Client Nasıl Kurulur?

Client lar için bir çok kütüphane bulunmakatdır. Popüler proğramlama dillerinin çoğu MQTT için kütüphaneye sahiptir. Python, Java, Javascript, C, C++, Dart, Delphi, Erlang, Go, Haskell, Lua, .NET, Objective-C, Perl, PHP Prolog gibi dillerin çoğu MQTT client kütüphanelerini kullanmanıza izin verir.

MQTT Broker ı sunucunuza kurabilir veya bilgisayarınızda local olarak çalıştırabilirsiniz. Hatta kurulum yapmadan Cloud Public MQTT Broker larını kullanabilirsiniz.

Client Publisher ve Subscriber için herhangi bir proğramlama dili kullanmak istemiyorsunuz Eclipse Mosquitto tarafından geliştirilen mosquitto_sub ve mosquitto_pub client uygulamalarını kullanabilirsiniz.

mosquitto_pub ve mosquitto_sub ı kullanmak için consol uygulamanız üzerinden aşağıdaki parametreleri vermelisiniz.

mosquitto_sub Kullanımı:



mosquitto_sub -d -h 192.168.1.186 -p 1883 -t "ev/salon/sicaklik" -u testuser -P testpassword

* -d : Broker ile olan bağlantıya ait Debug mesajları ekranda gösterilir.
* -h : Broker a ait IP adresi veya domain adresi. Geçerli olan (Default) adres localhost tur.
* -p : Broker port adresi. Default adres 1883 dür. TLS kullanılır ise 8883 tür.
* -t : Broker a gelen mesajlara abone olunacak MQTT konusu. Bu seçenek birden fazla konuya abone olmak istenirse tekrar eklenebilir.
* -u : Mesajların başka kullanıcılar tarafından görüntülenmemesi istenirse Broker ayarları yapılarak kullanıcı tanımlanır ve kullanıcı adı burada kullanılır.
* -P : Mesajların başka kullanıcılar tarafından görüntülenmemesi istenirse Broker ayarları yapılarak kullanıcı tanımlanır ve parola burada kullanılır.


mosquitto_pub Kullanımı:



mosquitto_pub -d -h 192.168.1.186 -p 1883 -t "ev/salon/sicaklik" -m "27.8" -u testuser -P testpassword

* -d : Broker a gönderilen mesaja ait Debug mesajları ekranda gösterilir.
* -h : Broker a ait IP adresi veya domain adresi. Geçerli olan (Default) adres localhost tur.
* -p : Broker port adresi. Default adres 1883 dür. TLS kullanılır ise 8883 tür.
* -t : Broker a ve oradanda Subscriber a gönderilen mesaja ait MQTT konusu. 
* -m : Bir kerede gönderilecek mesaj.
* -u : Mesajların başka kullanıcılar tarafından görüntülenmemesi istenirse Broker ayarları yapılarak kullanıcı tanımlanır ve kullanıcı adı burada kullanılır.
* -P : Mesajların başka kullanıcılar tarafından görüntülenmemesi istenirse Broker ayarları yapılarak kullanıcı tanımlanır ve parola burada kullanılır.


Linux Ubuntu 20.04 İçin Mosquitto Broker Kurulumu


Ubuntu 18.04 den itibaren Mosquitto Ubuntu resmi depolarında bulunmaktadır. Kurulumu yapmak için komut satırına aşağıdaki komutları yazınız.

sudo apt update -y && sudo apt install mosquitto -y

Kurulumdan sonra mosquitto broker ı kullanabilirsiniz.
Broker ın durumunu kontrol etmek için 

sudo systemctl status mosquitto

komutunu çalıştırabilirsiniz.


Linux Ubuntu 20.04 İçin Mosquitto Subscriber ve Publisher Kurulumu


Ubuntu 18.04 den itibaren Mosquitto Ubuntu resmi depolarında bulunmaktadır. Kurulumu yapmak için komut satırına aşağıdaki komutları yazınız.

sudo apt update -y && sudo apt install mosquitto-clients -y

Kurulumdan sonra mosquitto_sub ve mosquitto_pub komutlarını kullanabilirsiniz.

Ubuntu MQTT Mosquitto Subscriber Kullanımı 

MQTT Subscriber i kullanmak için Broker olarak publicmqttbroker kullanılmıştır. publicmqttbroker ın host adresi 'publicmqttbroker.iiotmq.com'   kullanıcı adı 'publicmqttbroker' ve parola 'publicmqttbroker' dır. Port numarası 1883 dir.



Ubuntu terminaline aşağıdaki komutu girerek testtopic e abone olunur.



Ubuntu terminal ekranı:




Ubuntu MQTT Mosquitto Publisher Kullanımı 

MQTT Publisher yine Subscriber gibi Broker olarak publicmqttbroker ı kullanılmıştır. publicmqttbroker ın host adresi 'publicmqttbroker.iiotmq.com'   kullanıcı adı 'publicmqttbroker' ve parola 'publicmqttbroker' dır. Port numarası 1883 dir.


Ubuntu terminaline aşağıdaki komutu girerek testtopic e mesaj gönderilir.


Komut çalıştırıldıktan sonra subscriber terminaline mesajın geldiği görülür.

Ubuntu Subscriber ve Publisher ın çalışan terminal görüntüsü şu şekildedir. 



İyi çalışmalar.