MQTT ve Sparkplug: endüstriyel veri için ortak bir sözleşme
MQTT mesaj taşır ama veri modelini tanımlamaz. Sparkplug, konu adlarını ve yük yapısını standartlaştırarak bu boşluğu doldurur.
MQTT, bir broker üzerinden çalışan hafif bir yayınla-abone-ol taşıma protokolüdür; konu adları ve yük biçimi serbesttir. Sparkplug B, MQTT'nin üstüne oturan bir spesifikasyondur: konu adı düzenini, protobuf yükünü ve doğum/ölüm sertifikalarıyla düğüm durumunu tanımlar. Düz MQTT bir veri modeli tanımlamaz.
MQTT, bir broker üzerinden mesaj dağıtan hafif bir yayınla-abone-ol protokolüdür. Bir istemci bir konuya yayın yapar, o konuya abone olan istemciler mesajı alır. Konu adları ve yükün biçimi tasarımcıya kalır. Bir ekip pompa hızını 'pompa/hiz' konusunda JSON olarak yayınlarken başka bir ekip tamamen farklı bir isimlendirme kullanabilir. Broker bu farkı çözmez.
Sparkplug B bu boşluğu kurallarla doldurur. Konular spBv1.0/grup/mesaj türü/edge node/cihaz düzeninde adlandırılır. Yük, protobuf ile tanımlı bir yapıdadır. Bir edge node bağlandığında, sahip olduğu metrikleri doğum sertifikasıyla (BIRTH) bildirir. Bağlantı koptuğunda MQTT'nin last-will mekanizmasıyla ölüm sertifikası (DEATH) yayınlanır. Değişimler yalnızca değiştiğinde gönderilebilir (report by exception).
Hipotetik bir örnek: bir edge node, her biri 20 metrik taşıyan 3 cihazı izliyor. Her metrik için ayrı konu açan düz bir MQTT tasarımında 3 × 20 = 60 konu oluşur ve her konunun adını, yükünü ve yayın sıklığını ekip kendisi tanımlar.
Sparkplug B'de her cihaz için doğum mesajı (DBIRTH) bir kez gönderilir; metrik adları, tipleri ve başlangıç değerleri bu mesajdadır. Sonraki DDATA mesajları yalnızca değişen metrikleri taşıyabilir. Tüketici, her mesaj türü için birkaç joker (wildcard) aboneliğiyle tüm cihazları izleyebilir; 60 ayrı konuyla uğraşmak gerekmez.
Tüketici tarafında bir DDEATH ya da NDEATH mesajı, ilgili cihazın ya da düğümün çevrimdışı olduğunu gösterir; değerler bayat olarak işaretlenmelidir.
Birinci hata, MQTT kurup 'Sparkplug yapıyoruz' demektir. Konu adları ve yük biçimi serbest kaldığında her uygulama kendi dilinde konuşur ve diğerleri bunu okuyamaz. Ortada bir Sparkplug uyumu değil, yalnızca ortak bir MQTT kurulumu vardır.
İkinci hata, ölüm sertifikasını atlamaktır. Bir edge node sessizce koparsa tüketici son değeri hâlâ geçerli sanabilir. Last-will ayarı ve NDEATH işleyişi test edilmeden varsayılmamalıdır.
Üçüncü hata, tutulan (retained) mesajları gelişigüzel kullanmaktır. Tutulan bir mesaj, kaynak kapalıyken de yeni abonelere iletilir ve canlı gibi görünebilir. Hangi konuların değer tutacağına bilinçli karar verin.
Hayır. Sparkplug B standart bir MQTT broker'ı üzerinde çalışır. Asıl gereksinim, yayıncı ve abonelerin Sparkplug konu düzenini, yük yapısını ve doğum/ölüm kurallarını uygulamasıdır.
Genellikle hayır; ikisi farklı katmanlarda ve farklı amaçlarla kullanılır. Saha cihazlarından merkezi sisteme hafif veri akışı için Sparkplug B, gezinme ve metot çağrısı gerektiren bilgi modelleri için OPC UA tercih edilebilir. Mimari, veri sözleşmesine göre seçilmelidir.
Örnek sayılar varsayımsaldır; sahada doğrulanmış sonuç iddiası değildir.