Skip to main content

General

Gömülü MQTT Broker

Proxus Uç Birim (Edge) Gateway'lerinde yerleşik MQTT broker'ı yapılandırın ve yerel telemetri toplayın.

Her Proxus Uç Birim (Edge) Gateway'i bir gömülü MQTT broker içerir. Bu sayede Mosquitto veya EMQX gibi harici broker altyapısına gerek kalmaz. Edge mimarisi hakkında daha fazla bilgi için Durumsuz Uç Birim (Edge) Mimarisi bölümüne bakın.

MQTT Broker Ne Yapar?

Gömülü broker, cihazlarınız ile Proxus platformu arasında çift yönlü veri geçidi görevi görür:

📥 Giriş (Cihaz → Gateway)

Yerel ağdaki cihazlar telemetri verisini Gateway'e yayınlar:

  1. Cihaz, benzersiz Device Token ile gateway-ip:1883 adresine bağlanır
  2. Cihaz, telemetry konusuna JSON payload gönderir
  3. Gateway veriyi ayrıştırır, doğrular ve Veri Akış Hattı'na yönlendirir
Giriş: Cihazdan Gateway'e
sensors

Cihaz

PLC / IoT Sensör

hub

MQTT Broker

Proxus Gateway

route

Veri Hattı

Ayrıştır & Doğrula

📤 Çıkış (Gateway → Birleşik İsim Alanı)

Gateway veriyi ISA-95 uyumlu konulara otomatik yeniden yayınlar:

  1. Veri, metrik bazlı telemetri mesajlarına dönüştürülür
  2. Cihaz durumu ve lastSeen zaman damgaları yayınlanır
  3. İsteğe bağlı özet mesaj tüm metrikleri toplar
  4. Harici sistemler (SCADA, MES, Analytics) bu konulara abone olabilir
Çıkış: Gateway'den UNS'e
route

Veri Hattı

İşlenmiş Veri

hub

MQTT Broker

UNS Yayıncısı

monitoring

UNS Tüketicileri

SCADA / MES / Analytics

Temel Faydalar

Güvenlik için Güvenlik ve Erişim Kontrolü bölümüne bakın.


Konfigürasyon

MQTT broker, Proxus-config.toml içinde yapılandırılır:

lightbulb
Tam Referans

Tüm ayarların listesi ve environment override'ları için Konfigürasyon Referansı bölümüne bakın.

Temel Ayarlar

[MQTTBroker]
MQTTBrokerPort = 1883
MasterToken = "your-master-token"
AllowAnonymous = false
AyarTipVarsayılanAçıklama
MQTTBrokerPortint1883MQTT bağlantıları için TCP portu
MasterTokenstring-Geliştirme için paylaşımlı token
AllowAnonymousboolfalseKimlik doğrulamayı kapatır

Birleşik İsim Alanı Ayarları

[UNS]
# Payload formatı: "JSON" veya "SparkplugB"
UNSPayloadFormat = "JSON"

# SparkplugB özel ayarları
UNSGroupId = "ProxusGroup"
UNSEdgeNodeId = "ProxusEdge_MachineName"

# MQTT broker'da retain mesajları
UNSRetainMessages = true
AyarTipVarsayılanAçıklama
UNSPayloadFormatstringJSONPayload formatı: JSON veya SparkplugB
UNSGroupIdstringProxusGroupSparkplugB grup kimliği
UNSEdgeNodeIdstringautoSparkplugB uç birim (edge) düğüm kimliği
UNSRetainMessagesbooltrueHer topic için son mesajı tutar

Performans Optimizasyonları

[UNS.Optimizations]
# İnce payload, metrik başına context bilgisini çıkarır
TelemetryThinPayload = true

# Özet mesajlarda ISA-95 context'i ekle
SummaryIncludeContext = true

# Throttle aralıkları (ms, 0 = sınırsız)
SummaryIntervalMs = 5000
LastSeenIntervalMs = 5000

# Status sadece değişince yayınlansın
StatusOnChangeOnly = true

# Değer değişmedikçe özet yayınlama (hash tabanlı)
SummaryOnlyOnChange = false
AyarTipVarsayılanAçıklama
TelemetryThinPayloadbooltrueMetrik mesajından context çıkar
SummaryIncludeContextbooltrueÖzet mesajda ISA-95 context ekle
SummaryIntervalMsint5000Özet yayınlama aralığı (ms)
LastSeenIntervalMsint5000LastSeen yayınlama aralığı (ms)
StatusOnChangeOnlybooltrueDurum sadece değişince yayınlansın
SummaryOnlyOnChangeboolfalseMetrik hash değiştiğinde özeti yayınla

Kimlik Doğrulama Yöntemleri

Cihaz Token'ı (Önerilen)

Proxus'ta tanımlanan her cihaz için benzersiz Device Token üretilir. MQTT bağlantısında kullanıcı adı olarak bu token'ı kullanın. Daha fazla bilgi için Cihaz Ekle bölümüne bakın.

Host: gateway-ip:1883
Username: device-token
Password: (gerekli değil)

Master Token

Geliştirme veya test için MasterToken kullanılabilir.

Anonymous

AllowAnonymous = true ise cihazlar kimlik bilgisi olmadan bağlanabilir. Sadece izole ağlarda kullanın. Güvenlik için Güvenlik ve Erişim Kontrolü bölümüne bakın.


Telemetri Yayınlama

Topic Sözleşmesi

Cihazlar telemetriyi şu topic'lere yayınlayabilir:

  • telemetry
  • telemetry/<herhangi-bir-alt-topic>

Payload Sözleşmesi

Cihazlar JSON payload gönderir. Parser düz, iç içe ve dizi yapıları kabul eder.

Örnek (düz):

{
"Temperature": 72.5,
"Pressure": 14.7,
"Status": "Running"
}

Örnek (iç içe, nokta notasyonu ile flatten):

{
  "line": {
    "motor": {
      "rpm": 1450
    }
  }
}

Oluşan anahtar: line.motor.rpm

Örnek (dizi, index notasyonu ile flatten):

{
  "temperatures": [22.1, 22.8]
}

Oluşan anahtarlar: temperatures[0], temperatures[1]

Örnek (unit içeren metrik nesnesi):

{
  "temperature": {
    "value": 25.5,
    "unit": "degC"
  }
}

Farklı Dillerde Yayınlama Örnekleri

Gateway otomatik olarak:

  1. JSON payload'ı ayrıştırır
  2. Kimliği doğrulanan cihazla ilişkilendirir
  3. Veri hattına yönlendirir
  4. Birleşik İsim Alanı konularına yayınlar (etkinse)
info
Unit Alanı Sözleşmesi

JSON UNS yayınında unit metrik bazında isteğe bağlıdır:

  • Metrik birime sahipse mesajda "unit": "<değer>" yer alır.
  • Unit boşsa unit alanı hiç yazılmaz (boş string olarak gönderilmez).

Birleşik İsim Alanı Yayını

Broker veriyi ISA-95 uyumlu konulara kategori ayrımıyla yayınlar. Detaylar için Birleşik İsim Alanı bölümüne bakın.

Telemetri Konuları

Metrik değerleri ve cihaz özeti:

v1/{enterprise}/{site}/{area}/{processCell}/{equipmentModule}/{deviceName}/telemetry/{metric}
v1/{enterprise}/{site}/{area}/{processCell}/{equipmentModule}/{deviceName}/telemetry/_summary

Metrik bazlı JSON payload örneği (unit ile):

{
  "ts": "2026-03-02T12:00:00.000Z",
  "value": 12.5,
  "dataType": "Double",
  "unit": "bar",
  "quality": "Good",
  "source": "Proxus"
}

Unit boşsa aynı payload unit alanı olmadan yayınlanır.

_summary mesajında da aynı kural geçerlidir:

  • metrics.<tag>.unit yalnızca unit boş değilse bulunur.
info
SparkplugB Unit Eşlemesi

UNSPayloadFormat = "SparkplugB" olduğunda unit bilgisi metric properties içinde Unit alanına eşlenir. Unit property anahtarı her zaman bulunur; unit tanımlı değilse değeri boş olabilir.

Durum Konuları

Cihaz durumu ve son görülme zamanları (retained):

v1/{enterprise}/{site}/{area}/{processCell}/{equipmentModule}/{deviceName}/state/_status
v1/{enterprise}/{site}/{area}/{processCell}/{equipmentModule}/{deviceName}/state/_lastSeen

Durum mesajları yaşam döngüsünde reason alanı taşıyabilir:

  • Offline (Client disconnected)
  • Offline (Device removed)
  • Timeout (Device timeout)

SparkplugB Desteği

UNSPayloadFormat = "SparkplugB" ise SparkplugB kodlaması kullanılır:

spBv1.0/{GroupId}/DDATA/{EdgeNodeId}/{DeviceId}

Ingest Hata Sözleşmesi

Telemetri ayrıştırma başarısız olursa broker publish'i şu şekilde reddeder:

  • PUBACK reason code: PayloadFormatInvalid
  • Reason string: parser hata detayı

Yaygın nedenler:

  • Geçersiz JSON sözdizimi
  • Telemetry topic'ine JSON olmayan payload gönderilmesi

Runtime Davranış Notları

  • Port fallback: Konfigüre edilen MQTTBrokerPort doluysa broker uygun bir boş portta başlar ve uyarı logu yazar.
  • Topic fallback: Gerekli ISA-95 metadata eksikse UNS publish atlanır.
  • EquipmentModule fallback: Boş veya geçersiz EquipmentModule, stabil topic path için _none olarak normalize edilir.

Sağlık İzleme

MQTT broker, bağlı cihazları izler ve şunları takip eder:

  • Son Görülme (Last Seen): Son mesaj zamanı
  • Bağlantı Durumu: Online/Offline
  • Mesaj Hızı: Dakikadaki mesaj sayısı

Veri göndermeyi kesen cihazlar otomatik olarak offline olarak işaretlenir. Ayrıntı için Sistem Logları bölümüne bakın.


Sonraki Adımlar