Giriş
MQTT (Message Queuing Telemetry Transport), 1999 yılında IBM tarafından geliştirilen, hafif ve güvenilir bir mesajlaşma protokolüdür. Düşük bant genişliği, yüksek gecikme veya güvenilir olmayan ağlar için optimize edilmiştir.
Günümüzde IoT uygulamalarının de facto standardı haline gelen MQTT, milyarlarca cihazın bulut platformlarıyla iletişim kurmasını sağlamaktadır.
Neden MQTT?
Publish/Subscribe Modeli
MQTT, geleneksel istemci-sunucu modelinden farklı olarak Publish/Subscribe mimarisini kullanır.
- Publisher: Mesaj yayınlayan cihaz (sensör, gateway)
- Subscriber: Mesajlara abone olan istemci (SCADA, uygulama)
- Broker: Mesajları yöneten merkezi sunucu (Mosquitto, HiveMQ)
- Topic: Mesajların kategorize edildiği hiyerarşik adres
Topic Yapısı
MQTT'de mesajlar topic adı verilen hiyerarşik adresler üzerinden yönlendirilir:
fabrika/hat1/sicaklik
fabrika/hat1/basinc
fabrika/hat2/sicaklik
bina/kat3/oda5/nem
Wildcard Karakterleri
| Wildcard | Açıklama | Örnek |
|---|---|---|
+ |
Tek seviye eşleştirme | fabrika/+/sicaklik |
# |
Çoklu seviye eşleştirme | fabrika/# |
# wildcard'ı sadece topic sonunda kullanılabilir. fabrika/#/sicaklik geçersizdir!
QoS Seviyeleri
MQTT, mesaj teslimatı için üç farklı güvenilirlik seviyesi sunar:
IoT uygulamalarının büyük çoğunluğunda QoS 1 yeterlidir. QoS 2 sadece gerçekten kritik ve duplikasyona toleranssız durumlarda kullanılmalıdır.
Özel Mesaj Türleri
Retained Message
Broker, retain=true ile gönderilen son mesajı saklar. Yeni bir subscriber bağlandığında, topic'in son değerini hemen alır.
Last Will and Testament (LWT)
Cihazın beklenmedik şekilde bağlantısı koparsa, broker tarafından otomatik yayınlanan mesajdır. Cihaz durumu izleme için kullanılır.
# LWT tanımlama
client.will_set(
topic="device/status",
payload="offline",
qos=1,
retain=True
)
MQTT Broker'lar
| Broker | Tip | Kullanım |
|---|---|---|
| Mosquitto | Açık Kaynak | Küçük-orta projeler, edge |
| HiveMQ | Ticari | Büyük ölçekli IoT |
| EMQX | Açık Kaynak | Yüksek trafikli sistemler |
| AWS IoT Core | Bulut | AWS ekosistemi |
| Azure IoT Hub | Bulut | Microsoft ekosistemi |
Python Örneği
import paho.mqtt.client as mqtt
import json, time
client = mqtt.Client()
client.connect("broker.example.com", 1883)
while True:
data = {"sicaklik": 25.5, "nem": 60}
client.publish("fabrika/hat1/sensor01",
json.dumps(data), qos=1)
time.sleep(10)
import paho.mqtt.client as mqtt
import json
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
print(f"Sıcaklık: {data['sicaklik']}°C")
client = mqtt.Client()
client.on_message = on_message
client.connect("broker.example.com", 1883)
client.subscribe("fabrika/+/sensor01", qos=1)
client.loop_forever()
Güvenlik
- TLS/SSL Şifreleme: Tüm trafiği şifreleyin. Port 8883 kullanın.
- Kimlik Doğrulama: Username/password veya client sertifikası zorunlu olmalı.
- ACL: Her client'ın publish/subscribe yapabileceği topic'leri kısıtlayın.
- Firewall: MQTT portlarını sadece güvenilir IP'lere açın.
Sonuç
MQTT, IoT uygulamaları için tasarlanmış hafif, güvenilir ve ölçeklenebilir bir protokoldür. Publish/Subscribe modeli, esnek QoS seviyeleri ve geniş ekosistem desteği ile endüstriyel IoT projelerinin vazgeçilmez bileşeni haline gelmiştir.