MQTT (Message Queuing Telemetry Transport), yayınlama ve abone olma mantığına dayanan telemetry mesajlasma protokolüdür. Makineler arası haberleşmede kullanılmaktadır. Benzer protokollerden ayrılan en önemli özelliği ise hafif (lightweight) olması ve bu sayede bir çok platformda rahatlıkla kullanılabilmesidir.
Subscriber birimleri mesaj almak için abone olan birimlerdir ve hangi birimlerden hangi mesajları alacaklarını bulutta bulunan broker birimine “topic” olarak bildirirler.
Publisher birimleri mesaj yayınlayan birimlerdir ve yayınlamak istedikleri mesajı, topic bilgisi ile birlikte broker birimine iletirler. Broker, ilgili topic’e üye olan subscriber birimlerine mesajı iletir.
Publisher ve Subscriber birimleri gerekirse birden fazla broker birimi üzerinden diğer birimler ile iletişim kurabilirler.
Anlatımın daha anlaşılır olabilmesi için Controloc ailesinin S102* modelini örneklendirelim.
Controlloc ailesi ve S102 modeli hakkında kısa bir bilgi:
Controloc ailesi, ortamların uzaktan gözlemlenmesini ve kontrol edilmesini sağlayan ürünlerden oluşmaktadır. Bu ürünler, aynı zamanda üretim tanımlı ve/veya kullanıcı tanımlı kurallar çerçevesinde oluşan durumlar karşısında standalone aksiyon alabilmektedirler.
S102 modeli, Controloc ailesindendir. Onboard ve harici sensörler ile ortamdaki sıcaklık, nem ve duman değerlerini ölçebilmektedir. Ayrıca, kapı kontağı ve proximity okuyucu ile ortamın erişim kontrolünü sağlayabilmektedir. Bir diğer özelliği ise harici e-meter ile kontrol edilen ortamın tükettiği enerji değerini elde etmektedir. Web sayfası, SNMP, SMTP vs. ile ortam bilgilerini uzağa iletebilmekte ve uzaktan kontrol edilebilmektedir.
Topic’ler, subtopic’lerden oluşmaktadır. S102 cihazı onboard nem-sıcaklık sensörüne sahiptir. Nem-sıcaklık sensörünün nem değerini lokasyon bilgisi ile birlikte topic olarak aşağıdaki gibi belirleyebiliriz.
turkiye/istanbul/atasehir/cabin1/nemsicaklik/nem
S102 cihazı nem bilgisini içeren mesaji oluşturulan topic ile publisher olarak yayınlar (broker birimine gönderir). Bu topic’e kayıtlı olan subscriber birimlerine bu mesaj iletilir.
Subscriber birimi herhangi bir subtopic ile ilgili bütün mesajları almak isterse ilgili subtopic alanında “+” karakterini kullanarak abone olur. Örneğin subscriber birimi olan bir mobil uygulama İstanbul’daki bütün kabinlerin nem değerlerini almak için aşağıdaki topic ile abone olması gerekir.
turkiye/istanbul/+/+/nemsicaklik/nem
Abonelik için kullanılan bir diğer yöntem ise belli bir subtopic’in altındaki tüm subtopic’lere abone olmaktır. Abone olunmak istenen tüm subtopic’lerin yerine “#” karakteri kullanılır. Ataşehir’de bulunan kabin1’deki S102’nin tüm mesajları için abonelikte aşağıdaki topic yapısı kullanılır.
turkiye/istanbul/atasehir/cabin1/#
Topic yapılarının ardından bir diğer konu yayınlamada ve abonelikte kullanılan parametrelerdir.
Yayınlama Parametreleri
Mesajin Kalitesi
Publisher birimi, mesajın subscriber birimlerine iletiminin kalitesini QOS (Qualities of Service) parametresi ile belirler. Bu parametre aşağıdaki değerleri alabilir:
0: Mesaj en fazla birkez iletilir. İletilmeme ihtimali vardır.
1: Mesaj iletilir fakat tekrarlar olabilir
2: Mesaj kesin olarak birkez iletilir.
Mesajın Daimi Olması
Publisher birimi mesajı yayınlarken daimi olarak işaretleyebilir. Bunun anlamı yayından sonra herhangi bir subscriber birimi mesajın topic’ine abone olur ise broker direk olarak abonelikten önce daimi olarak işaretlenmiş olan mesajı subscriber birimine iletir.
Abonelik Parametreleri
Dayanıklılık
Subscriber birimi abone olurken “dayanıklı” (durable) parametresi kullanırsa, broker ile bağlantısı koptuğunda broker iletilmesi gereken bütün mesajlari biriktirir. Bağlantı tekrar sağlandığında biriktirilen mesajlar ilgili subscriber birimine iletilir.
“Dayanıksız” (non-durable) parametresinde ise mesajlar sadece bağlantı olduğu zaman gönderilir.
MQTT’nin diğer özellikleri:
- Protokol paketlerinin küçük oluşu networkdeki veri trafiğini azaltmaktadır. (En küçük paket 2 byte’dan oluşmaktadır.) Network bu sayede daha verimli kullanılabilmektedir.
- Sistemde 10k publisher ve subscriber birimleri yer alabilmektedir.
- Çift taraflı asenkron mesajlaşma sağlamaktadır. (Http’de serverdan veri alınabilmesi icin sürekli poll edilmesi gerekmektedir.)
- Sınırlı (ram, işlemci, battery v.s.) kaynaklı birimlerde kullanımı uygundur.
- Subscriber ve publisher birimleri için kullanılabilecek düşük boyutlu (30-60kb) bir çok dilde (c, java vs) açık kaynak kütüphaneler mevcuttur.
- Broker server olarak kullanılabilecek bazı hizmetler asagidaki gibidir:
- mosquitto : açık kaynaklı broker server
- m2m.ecliose.org
Kaynaklar:
http://www.mqtt.org
http://www.mqtt.org/software
http://www.ibm.com/developerworks/webservices/library/ws-mqtt/
* S102 modeli MQTT protokolünü desteklememektedir. Sahip olduğu yapı örnek olarak gösterilmiştir.
KAYNAK : https://tiantik.wordpress.com/2013/03/28/mqtt-message-queuing-telemetry-transport/
Güncel kaynak adresi:
http://timucin.anuslu.com/tr/2016/01/03/mqtt/