MQTT Nedir? Publish-Subscribe, QoS ve RS-485 Saha Cihazını Buluta Taşıma
MQTT'nin publish-subscribe modelini, QoS 0/1/2'nin ne işe yaradığını ve 20 yıllık bir RS-485 Modbus hattını bir gateway ile MQTT üzerinden buluta taşırken yaşadığım 'kaybolan packet' vakasını — LWT ve retained mesajla anlatıyorum.

Kısa Cevap (Özet): MQTT, 1999’da IBM tarafından (sahra uydu telemetrisi için) geliştirilen, broker üzerinden publish/subscribe modeline dayanan, hafif bir mesajlaşma protokolüdür. Cihazlar topic’e mesaj yazar (publish), ilgililer o topic’i dinler (subscribe); cihazlar birbirini bilmez. QoS 0/1/2 teslimat garantisini, retained en son değeri, LWT (Last Will) bağlantı kopmasını bildirir. Varsayılan port 1883, güvenli (TLS) port 8883. Endüstride izleme/telemetri için idealdir; sert gerçek zamanlı kontrol için değil.
Bir izleme projesi, son prova. Sahada 20 yıllık bir RS-485 Modbus hatti vardı; 12 eski transmitter, kimsenin açmadığı bir dolabın arkasında. Onları buluta taşımak gerekiyordu. Bir RS-485 → MQTT gateway taktım: Modbus RTU’yu okuyor, topic’e publish’ıyordu. Her şey akıyordu — ama gateway bir gece düştü ve kimse anlamadı. Ertesi sabah LWT (Last Will) mesajı sayesinde anladım: gateway, broker’la bağlantısını kesmeden önce “ben gidiyorum” demişti. MQTT’nin sahadaki karakteri budur: susmak da bir mesajdır. Bu yazı o sessiz geceyi ve protokolün tamamını anlatıyor.
Publish-Subscribe: Cihazlar Birbirini Bilmez
MQTT, istemci-sunucu değil, yayıncı-abone modelidir. Ortada bir broker (aracı) vardır:
- Yayıncı (publisher): bir cihaz, bir topic’e mesaj yazar. Örneğin
fabrika/tank01/basinc. - Abone (subscriber): ilgililer, o topic’i dinler. SCADA, bulut, bir Python script’i — hepsi aynı topic’i abone olabilir.
Cihazlar birbirini bilmez; broker üzerinden konuşurlar. Bu, iki şeyi getirir:
- Çözülme: yeni bir abone eklemek, yayıncıyı bozmaz.
- Ölçek: bir yayıncı, bin aboneye tek mesajla ulaşır.
Topic, hiyerarşiktir: fabrika/hat02/tank01/basinc. Yabanıl kart (+ ve #) ile tek abone, bir alt ağacı dinler.
QoS 0, 1, 2: Teslimat Garantisi
MQTT, üç kalite seviyesi sunar:
| QoS | Garanti | Sahada |
|---|---|---|
| 0 | “Best effort” — bir kez gönder, kaybedersen kaybet | düşük önem, sık veri |
| 1 | “En az bir kez” — teslim olana kadar tekrar | çoğu izleme verisi |
| 2 | “Tam olarak bir kez” — dört el sıkışma | kritik, yinelenemez veri |
O “kaybolan packet” vakası, QoS 0 ile yaşandı: bir mesaj, zayıf bağlantıda düştü ve geri gelmedi. QoS 1’e çevirince, broker teslim alana kadar gateway tekrar gönderdi. QoS 2, yinelenmesinin zararlı olduğu durumlar içindir — çoğu endüstriyel izlemede QoS 1 yeterlidir.
Retained ve LWT: Sessizliğin Mesajı
- Retained: broker, bir topic’in son mesajını saklar; yeni abone bağlandığında, hâlâ akışta olmasa da son değeri alır. “Tank şu an kaç bar?“a anında cevap.
- LWT (Last Will): istemci, broker’a “ben aniden düşersem, bu mesajı şu topic’e yayın” der. O geceki gateway, tam da bunu yaptı: bağlantı kopunca broker
fabrika/gateway01/durumtopic’ineofflineyayınladı. Alarm, sabaha bırakılmadı.
LWT, “cihaz kayboldu”nun pasif algılanmasını aktif bildirime çevirir — MQTT’nin sahadaki en değerli özelliğidir.
RS-485 ve Modbus: Eski Sahayı Taşıma
MQTT, saha seviyesinde bir protokol değildir; ağ/bulut seviyesindedir. Eski 20 yıllık RS-485 Modbus hattını buluta taşımak, bir gateway ile olur:
- Gateway, RS-485 üzerinde Modbus RTU ile transmitter’ları okur.
- Okuduğu değerleri MQTT topic’lerine çevirir (publish).
- Bulut/SCADA, o topic’lere subscribe olur.
Yani Modbus “sahada ne”yi, MQTT “buluta nasıl”yı söyler. Aradaki gateway, iki dünyanın çevirmenidir. Bu mimari, “eski sahayı sökme” maliyetinden kaçınır — o 12 transmitter, kablo dahil, yerinde durur.
MQTT Nerede Kullanılır, Ne Zaman Değil?
Kullanılır: uzaktan izleme/telemetri, bulut entegrasyonu, dağıtık sensör toplama, durum bildirimi (LWT), edge + cloud mimarileri.
Kullanılmaz: sert gerçek zamanlı kontrol (döngü 1 ms altı) — o, PROFINET/EtherCAT işidir. MQTT, ms-cm mertebesinde gecikme toleransı olan izleme için doğrudur.
Güvenlik
MQTT, varsayılan olarak düz metindir (port 1883). Endüstride:
- TLS (port 8883) ile şifreleme.
- Kimlik doğrulama (username/password veya sertifika).
- ACL (Access Control List): hangi abonenin hangi topic’e yazabildiği.
Bu üçlü yoksa, MQTT “açık bir çöp kutusudur” — herkes her topic’i dinler ve yazabilir.
PLC’ye mi Yeni Başlıyorsun?
MQTT, PLC’nin bulutla konuştuğu dildir — onu anlamak, verinin sahadan buluta nasıl aktığını bilmektir. Eğitim programı sayfasında müfredat; iletişim sayfasından kendi mimarinize özel seçim yapabiliriz. Veri modelinin bir üst katmanı için: OPC UA (PubSub over MQTT ile buluşur).
O sessiz gece, bana MQTT’nin asıl dersini verdi: bağlantı, veri değil, durumdur. Gateway düştüğünde, asıl mesele kaybolan packet değil, kimse anlamamasıydı. LWT, o sessizliği bir mesaja çevirdi. Bir istemciye “sen düşersen ne yayınla?” diye sorduğun gün, MQTT — tıpkı o sabah olduğu gibi — senin yerine konuşmaya başlar.