Endüstriyel IoT MQTT, modern fabrikaların verileri PLC'lerden, sensörlerden ve makinelerden bu verilere göre aksiyon alan sistemlere, geçmişin kırılgan noktadan noktaya entegrasyonları olmadan taşımasının yoludur. Bu rehber MQTT'nin neden IIoT omurgası hâline geldiğini, edge'den buluta bir mimarinin nasıl kurulduğunu, Sparkplug B ve ISA-95 topic namespace'lerinin nereye oturduğunu ve çalıştırılabilir kodla ilk makineden broker'a veri akışının nasıl oluşturulacağını açıklar. Sonunda bir sonraki proje toplantınıza götürebileceğiniz bir referans mimariniz ve bir kontrol listeniz olacak.
MQTT Neden Endüstriyel IoT'nin Omurgası Oldu?
Klasik otomasyon katmanlı Purdue modelini izler: sensörler PLC'lerle, PLC'ler SCADA ile, SCADA bir historian ile konuşur; MES ve ERP en üstte yer alır. Her katman bir sonrakiyle, çoğu zaman tescilli protokoller kullanan noktadan noktaya bağlantılarla entegre olur. Bir kalite dashboard'u veya kestirimci bakım modeli gibi makine verisinin yeni bir tüketicisini eklemek, bu bağlantıların birkaçına dokunmak demektir.
MQTT, publish/subscribe ile bu kalıbı kırar. Her veri kaynağı merkezi bir broker'a bir kez yayın yapar ve istenen sayıda tüketici tam olarak ihtiyaç duyduğu veriye abone olur. Bu modelde yeniyseniz bir MQTT broker'ın ne yaptığı temelleri anlatır. Endüstriyel kullanımda MQTT'nin bazı özellikleri özellikle önemlidir:
- Yalnızca giden bağlantılar. Edge cihazları broker'a bağlantı açar; fabrika ağının içine hiçbir şeyin erişmesi gerekmez. Bu, gelen erişim gerektiren sorgulama (polling) protokollerine göre OT güvenlik politikalarına çok daha iyi uyar.
- İstisna bazlı raporlama (report by exception). Cihazlar sabit bir döngüde sorgulanmak yerine bir değer değiştiğinde yayın yapar; bu da yavaş veya ölçülü bağlantılarda bant genişliğini büyük ölçüde azaltır. Bkz. istisna bazlı raporlama.
- Durum farkındalığı. Last Will and Testament mesajları, retained değerler ve keep-alive'lar her tüketiciye bir makinenin çevrimiçi olup olmadığını ve bilinen son durumunu söyler.
- Hafif ayak izi. MQTT client'ları PLC'lerde, gateway'lerde, hatta mikrodenetleyicilerde çalışır ve hücresel bağlantılar üzerinden işler.
- Açık standart. MQTT, her dilde client'ı olan bir OASIS standardıdır; bu yüzden tek bir tedarikçinin yığınına bağlı kalmazsınız.
Bu, OPC UA'yı veya fieldbus protokollerini geçersiz kılmaz. OPC UA zengin bilgi modelleri ve makine seviyesinde erişim için mükemmel olmaya devam eder; bu yüzden çoğu IIoT mimarisi ikisini birleştirir. Bunları OPC UA ve MQTT karşılaştırması yazısında karşılaştırıyoruz.
Endüstriyel IoT MQTT Referans Mimarisi
Pratik bir IIoT mimarisinin dört katmanı vardır. Her birinin net bir görevi vardır ve broker merkezde yer alır.
| Katman | Bileşenler | Sorumluluklar |
|---|---|---|
| Cihazlar ve kontrol | PLC'ler, CNC'ler, robotlar, sensörler, sürücüler | Prosesi çalıştırır; veriyi Modbus, OPC UA, EtherNet/IP, S7 ve diğerleriyle sunar |
| Edge | Endüstriyel gateway'ler, edge PC'ler, MQTT client'lı PLC'ler | Protokol dönüşümü, istisna bazlı raporlama, tamponlama, yerel mantık |
| Broker | Şirket içinde veya bulutta MQTT broker | Yönlendirme, oturumlar, durum, güvenlik; canlı veri için tek doğruluk kaynağı |
| Uygulamalar | SCADA, MES, historian'lar, dashboard'lar, analitik, ERP | Veriyi tüketir, saklar, görselleştirir ve buna göre aksiyon alır |
IIoT mimarisi yazısı her katmanı daha derinlemesine ele alır. İşte en önemli kararlar.
Edge Gateway
Kurulu makinelerin çoğu MQTT konuşmaz. Bir IIoT edge gateway onları kendi native protokolleriyle okur ve broker'a yayın yapar. Yerelde hızlı sorgulamalı, ancak yalnızca değişiklikte yayın yapmalı, zaman damgası ve birim eklemeli ve üst bağlantı koptuğunda mesajları tamponlamalıdır. Bu son göreve store and forward denir ve bir ağ kesintisinin veri boşluğuna dönüşmesini engelleyen budur. Belirli protokoller için Modbus TCP'den MQTT'ye, OPC UA'dan MQTT'ye gateway rehberine ve PLC'den buluta yazısına bakın.
Ağdaki Konumlandırma
Fabrikalar genellikle OT ve IT ağlarını aralarında bir DMZ ile ayırır. Yaygın kalıplar şunlardır: OT gateway'lerinin yayın yaptığı DMZ'deki bir broker, giden bir güvenlik duvarı kuralıyla ulaşılan buluttaki bir broker veya ikisinin birbirine köprülenmesi. Her birinin gecikme, otonomi ve güvenlik açısından ödünleşimleri vardır; endüstriyel DMZ'de MQTT bunları adım adım ele alır.
Broker Nerede Çalışır?
Şirket içi broker'lar internet çalışmadığında da çalışmaya devam eder; bu, bir kontrol döngüsünün içindeki her şey için önemlidir. Bulut broker'lar ise çok sahalı toplama, uzaktan erişim ve dashboard'ları çok daha basit hâle getirir. Birçok fabrika ikisini birden yapar: yerel mantık yerelde kalır ve bir bulut MQTT broker analitik ve kurumsal sistemler için sahaları bir araya toplar. Neyi seçerseniz seçin, çalışma süresi, izolasyon ve güvenlik konusundaki endüstriyel gereksinimler tüketici IoT'sine göre daha yüksektir; bunu endüstriyel MQTT broker seçimi yazısında ele alıyoruz.
Topic Tasarımı: ISA-95 ve Unified Namespace
Düz MQTT topic yapısı hakkında hiçbir şey söylemez ve bu özgürlük fabrika ölçeğinde tehlikelidir. Bir kural olmadan aynı broker'da machine7/temp, Line-2/Temp_C ve plant/oven/temperature ile karşılaşırsınız ve kimse "hat 2'deki her şeye" abone olamaz.
Endüstriyel cevap, topic'leri ISA-95 ekipman hiyerarşisiyle hizalamaktır:
enterprise/site/area/line/cell/measurement
acme/izmir/machining/line1/cnc1/spindle_temp
Bu şekilde düzenlenmiş bir broker bir Unified Namespace (UNS) hâline gelir: tüm işletmenin güncel durumunun herkesin anladığı bir yapıda yayımlandığı tek bir yer. MES acme/izmir/#'e, bir hat dashboard'u acme/izmir/machining/line1/#'e, bir bakım modeli ise acme/+/+/+/+/vibration'a abone olur. Bir tüketici eklemek hiçbir zaman bir üreticiye dokunmayı gerektirmez.
Gerçek fabrikalarda işe yarayan kurallar:
- İlk cihaz bağlanmadan önce seviye adları ve izin verilen karakterler üzerinde anlaşın.
- Küçük harf kullanın, boşluk kullanmayın ve sabit tanımlayıcılar seçin (operatör takma adları değil, varlık ID'leri).
- Telemetriyi, durumu, olayları ve komutları ayrı yaprak topic'lere ayırın.
- Mühendislik birimlerini ve zaman damgalarını topic'e değil payload'a koyun.
- Yeni tüketicilerin anında alabilmesi için güncel durumu retained message olarak yayımlayın.
Ayrıntılı rehberlik ISA-95 MQTT topic'leri, UNS topic yapısı ve adım adım Unified Namespace nasıl kurulur yazılarında yer alıyor.
Sparkplug B: MQTT'ye Durum ve Yapı Eklemek
Sparkplug B, endüstriyel cihazların MQTT'yi nasıl kullanması gerektiğini tanımlayan bir Eclipse Foundation spesifikasyonudur. Düz MQTT'nin açık bıraktığı üç şeyi sabitler:
- Bir topic namespace'i:
spBv1.0/{group_id}/{message_type}/{edge_node_id}/{device_id}. - Bir payload formatı: Adları, veri tipleri, zaman damgaları ve alias'ları olan Protobuf ile kodlanmış metrikler.
- Durum yönetimi: Her tüketicinin hangi edge node'ların ve cihazların çevrimiçi olduğunu ve hangi metrikleri yayımladığını bilmesi için doğum (NBIRTH, DBIRTH) ve ölüm (NDEATH, DDEATH) sertifikaları.
| Mesaj tipi | Gönderen | Anlamı |
|---|---|---|
| NBIRTH / DBIRTH | Edge node / cihaz | Çevrimiçi; metriklerin tam listesi ve güncel değerleriyle |
| NDATA / DDATA | Edge node / cihaz | Değişen metrik değerleri (istisna bazlı raporlama) |
| NDEATH / DDEATH | Last Will ile broker / edge node | Çevrimdışı; değerler eskimiş kabul edilmelidir |
| NCMD / DCMD | Host uygulaması | Bir metriği yazma veya yeniden doğum (rebirth) talep etme komutu |
| STATE | Birincil host uygulaması | Merkezi SCADA/host'un çevrimiçi olup olmadığı |
Faydaları, Sparkplug uyumlu ürünler arasında birlikte çalışabilirlik ve güvenilir durum bilgisidir. Bedeli ise Protobuf payload'larının insan tarafından okunamaması ve sabit topic düzeninin fabrika hiyerarşinizi yansıtmamasıdır. Sparkplug B payload'ı ve Sparkplug doğum ve ölüm sertifikaları açıklayıcı yazılarıyla başlayın; ham trafiği incelemeniz gerektiğinde Python ile Sparkplug B çözme yazısını kullanın.
Sparkplug B ve ISA-95 Birlikte
Birçok fabrika ikisini birden çalıştırır: durum farkındalığı olan verimli iletişim için edge'de Sparkplug B, diğer herkes için ise ISA-95 JSON namespace'i. İşin zor kısmı aradaki çeviri katmanıdır. Sparkplug B ve Unified Namespace yazımız iki yaklaşımı ayrıntılı olarak karşılaştırır; bir sonraki bölüm ise bir broker'ın bu çeviriyi sizin için nasıl yapabileceğini gösterir.
Uygulamalı: İlk Endüstriyel IoT MQTT Veri Akışınız
Endüstriyel topic kalıplarını hemen şimdi broker.connectmq.com adresindeki ücretsiz public MQTT broker üzerinde deneyebilirsiniz. Benzersiz bir önek kullanın, topic'leri 8 seviye içinde tutun ve public alanın herkes tarafından okunabildiğini unutmayın; bu yüzden yalnızca simüle edilmiş veri kullanın.
Simüle edilmiş fabrikanın tamamına abone olun:
mosquitto_sub -h broker.connectmq.com -p 1883 -i iiot-sub-m5q2 \
-t "connectmq/demo/m5q2/#" -v
ISA-95 tarzı bir okuma ve retained bir makine durumu yayımlayın:
mosquitto_pub -h broker.connectmq.com -p 1883 -i iiot-pub-m5q2 -q 1 \
-t "connectmq/demo/m5q2/machining/line1/cnc1/telemetry" \
-m '{"spindle_temp":61.4,"spindle_rpm":8200,"unit_temp":"C","ts":1760600000}'
mosquitto_pub -h broker.connectmq.com -p 1883 -i iiot-pub-m5q2 -q 1 -r \
-t "connectmq/demo/m5q2/machining/line1/cnc1/state" -m "RUNNING"
Minimal Bir Modbus TCP'den MQTT'ye Edge Köprüsü
Aşağıdaki betik bir edge gateway rolünü üstlenir. Her saniye bir Modbus TCP cihazından iki holding register okur, yalnızca bir değer ölü bandı (deadband) aşacak kadar değiştiğinde yayın yapar ve tüketicilerin gateway'in ortadan kaybolduğunu bilmesi için bir Last Will kaydeder. pymodbus 3.x ve paho-mqtt 2.x kullanır:
pip install "pymodbus>=3.6" "paho-mqtt>=2.0"
import json
import time
import paho.mqtt.client as mqtt
from pymodbus.client import ModbusTcpClient
PLC_HOST = "192.168.1.50" # Modbus TCP cihazınız veya simülatörünüz
BASE = "connectmq/demo/m5q2/machining/line1/press1"
DEADBAND = 0.5 # yalnızca değer bu kadar değişirse yayımla
def on_connect(client, userdata, flags, reason_code, properties):
print("Broker connection:", reason_code)
client.publish(f"{BASE}/state", "ONLINE", qos=1, retain=True)
mqttc = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id="edge-press1-m5q2",
protocol=mqtt.MQTTv5,
)
mqttc.will_set(f"{BASE}/state", "OFFLINE", qos=1, retain=True)
mqttc.on_connect = on_connect
mqttc.reconnect_delay_set(min_delay=1, max_delay=30)
mqttc.connect("broker.connectmq.com", 1883, keepalive=30)
mqttc.loop_start()
plc = ModbusTcpClient(PLC_HOST, port=502)
last = {}
while True:
if not plc.connected:
plc.connect()
rr = plc.read_holding_registers(address=0, count=2)
if rr.isError():
print("Modbus read failed:", rr)
time.sleep(2)
continue
values = {
"pressure_bar": rr.registers[0] / 10.0, # PLC'de x10 ölçeklenmiş
"temperature_c": rr.registers[1] / 10.0,
}
changed = {k: v for k, v in values.items()
if k not in last or abs(v - last[k]) >= DEADBAND}
if changed:
changed["ts"] = int(time.time() * 1000)
mqttc.publish(f"{BASE}/telemetry", json.dumps(changed), qos=1)
last.update({k: v for k, v in changed.items() if k != "ts"})
time.sleep(1)
Abone terminalinizi izleyin: değerler yalnızca değiştiklerinde görünür ve betiği sonlandırırsanız OFFLINE gelir. Register ölçekleme, word sıralaması ve adresleme PLC üreticileri arasında farklılık gösterir; bu yüzden cihazın register haritasını kontrol edin. Modbus'tan MQTT'ye köprüleme rehberimiz bu ayrıntıları ele alır. Production'daki bir gateway ayrıca kesintiler sırasında diske tamponlama yapar ve kimlik bilgileriyle TLS kullanır.
ConnectMQ Endüstriyel IoT MQTT'yi Nasıl Destekler?
ConnectMQ, özellikle endüstriyel trafiğe yönelik özelliklere sahip yönetilen bir MQTT broker'dır:
- ISA-95 ve UNS algılama. Broker, trafiğinizdeki ISA-95 ve Unified Namespace topic yapılarını tanır.
- Sparkplug B çözme. Sparkplug B payload'ları (Protobuf veya JSON) çözülür; böylece baytlara bakmak yerine onları portalda okuyabilirsiniz.
- Sparkplug'dan ISA-95'e yeniden yayımlama. Sparkplug B verileri okunabilir payload'larla ISA-95 topic'lerine yeniden yayımlanabilir; örneğin
spBv1.0/factory1/DDATA/line1/cnc1,connectmq/factory1/production/line1/cnc1/telemetryolur. Edge node'lar Sparkplug konuşmaya devam ederken MES ve dashboard'lar temiz bir namespace tüketir. - ISA-95 cihaz görünümü ve uyarılar. Portal cihazları ISA-95 seviyelerine göre düzenlenmiş olarak gösterir; uyarı loguyla birlikte eşik tabanlı uyarı kuralları, bir iş mili sıcaklığının limiti aşması gibi değerleri işaretler.
- Dağıtım seçeneği. Ücretsiz Serverless planla başlayın, ardından izole bir Dedicated kümeye, kendi bulut hesabınızda BYOC'ye veya şirket içinde kalması gereken sahalar için Self Managed Enterprise'a geçin.
Bunun uçtan uca nasıl göründüğünü görmek için ConnectMQ 3D dijital ikiz web demosu; CNC, robot kol, fırın, tank, konveyör ve pompa içeren bir fabrikanın Secure WebSocket üzerinden canlı güncellendiğini gösterir. Depolama ve analitik açık yöntemle yapılır: historian'lar, Telegraf, Node-RED veya kendi servisleriniz broker'a standart MQTT client'ları olarak abone olur. Bu kalıp için bir MQTT historian kurma yazısına bakın.
Endüstriyel IoT MQTT Proje Kontrol Listesi
İlk dağıtımın kapsamını belirlerken bu listeyi kullanın. Tam sürümü IIoT bağlantı kontrol listemizde bulabilirsiniz.
- Makinelerin, protokollerin ve gerçekten bir iş sorusunu yanıtlayan veri noktalarının envanterini çıkarın.
- Hem OT hem de IT ile bir ISA-95 topic hiyerarşisi ve adlandırma kuralları üzerinde anlaşın.
- Payload formatına karar verin: edge'de Sparkplug B, tüketiciler için JSON veya her ikisi.
- Gateway donanımını seçin ve tamponlama ile TLS'i desteklediğini doğrulayın.
- Broker'ın nerede çalışacağına ve trafiğin OT/IT sınırını nasıl geçeceğine karar verin.
- Her gateway için benzersiz kimlik bilgileri verin ve 8883'te TLS'i zorunlu kılın.
- Durum yönetimini tanımlayın: Last Will, retained durum topic'leri, doğum ve ölüm mesajları.
- Depolama ve görselleştirmeyi broker tarafı sihirle değil, abone araçlarla planlayın.
- Bir hatta pilot uygulama yapın, ölçün, ardından ölçeklendirin.
Burada organizasyonel uyum teknoloji kadar önemlidir; IT/OT yakınsaması ekiplerin sorumlulukları nasıl paylaştığını ele alır. Bu bağlantı katmanının bir dijital dönüşüm programında nereye oturduğuna dair büyük resim için Endüstri 4.0 rehberimizi okuyun.
Endüstriyel IoT Pilotunuzu ConnectMQ Üzerinde Kurun
Yukarıdaki örnekleri broker.connectmq.com üzerinde deneyin, ardından app.connectmq.com adresinde özel bir broker oluşturun. Serverless ücretsiz plan kredi kartı gerektirmez ve birkaç gateway, dashboard ile yukarıda anlatılan Sparkplug B çözme ve ISA-95 görünümlerini içeren tek hatlık bir pilot için yeterlidir.
Sık Sorulan Sorular
MQTT endüstriyel otomasyon için uygun mu?
Evet; makineler, edge gateway'ler ve uygulamalar arasında veri taşımak için. Katı gerçek zamanlı kontrol döngüleri hâlâ fieldbus'lara ve PLC'lere aittir; MQTT bunların etrafındaki veriyi SCADA, MES, historian'lar ve analitiğe taşır.
Endüstriyel IoT MQTT için Sparkplug B gerekli mi?
Hayır, ancak birçok tedarikçinin ürünlerinin birlikte çalışması gerektiğinde ve güvenilir çevrimiçi/çevrimdışı durum bilgisine ihtiyaç duyduğunuzda yardımcı olur. Birçok fabrika edge'de Sparkplug B, tüketiciler için ise ISA-95 JSON namespace'i kullanır.
Endüstriyel MQTT broker şirket içinde mi yoksa bulutta mı çalışmalı?
Bir kontrol döngüsünün içindeki hiçbir şey bir internet bağlantısına bağımlı olmamalıdır; bu yüzden fabrikalarda yerel broker'lar yaygındır. Bulut broker çok sahalı toplama, uzak dashboard'lar ve kurumsal entegrasyon için daha iyidir ve birçok mimari ikisini birden kullanır.
MQTT desteklemeyen bir PLC'yi nasıl bağlarım?
PLC'yi Modbus, OPC UA, S7 veya EtherNet/IP gibi kendi native protokolüyle okuyan ve broker'a yayın yapan bir edge gateway kullanın. Birçok yeni PLC'de ayrıca yerleşik MQTT client'ı bulunur.
ConnectMQ Sparkplug B mesajlarını okuyabilir mi?
Evet. ConnectMQ Sparkplug B payload'larını çözer ve bunları okunabilir payload'larla ISA-95 topic'lerine yeniden yayımlayabilir; böylece Sparkplug kullanmayan tüketiciler veriyi doğrudan kullanabilir.



