Yönetilen MQTT Bulutu

MQTT Topic Tarayıcısı: Canlı Topic Ağaçlarını Keşfetme ve Hata Ayıklama

MQTT topic tarayıcıları için uygulamalı bir rehber: gerçekçi bir topic ağacı oluşturun, onu ConnectMQ canlı topic gezgininde keşfedin ve gördüklerinizle adlandırma, retained message ve payload sorunlarını düzeltin.

Gerçek zamanlı güncellenen sensörler, hatlar ve makinelerle canlı hiyerarşik bir topic ağacı gösteren MQTT topic tarayıcısı
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Bir MQTT topic tarayıcısı, bir broker'dan akan her topic'i, her düğümün yanında en son payload ile birlikte canlı ve genişletilebilir bir ağaç olarak gösterir. Bu eğitimde gerçekçi bir topic hiyerarşisi oluşturacak, onu ConnectMQ canlı topic gezgininde ve komut satırında keşfedecek ve adlandırma hatalarını, eski retained message'ları ve bozuk payload'ları saniyeler içinde ortaya çıkaran desenleri öğreneceksiniz.

Bir MQTT Topic Tarayıcısı Ne Yapar?

MQTT'nin yerleşik bir "topic'leri listele" komutu yoktur. Topic'ler oluşturulmaz veya kaydedilmez; yalnızca birisi onlara yayın yaptığı için var olurlar. Bir topic tarayıcısı bunu, # gibi geniş bir joker karaktere (veya factory1/# gibi bir proje köküne) abone olup aldığı topic dizelerinden bir ağaç kurarak aşar. Her eğik çizgi bir seviyeye, her seviye bir klasöre dönüşür ve en son payload yaprakta gösterilir.

Bu basit fikir şaşırtıcı derecede güçlüdür. mosquitto_sub'dan gelen düz bir mesaj akışı, bir düzineden fazla cihazınız olduğunda okunması zor hâle gelir. Bir ağaç ise size bir bakışta şunları söyler:

  • Hangi dalların var olduğunu ve hangilerinin olmaması gerektiğini.
  • Hangi yaprakların şu anda güncellendiğini ve hangilerinin saatler önce durduğunu.
  • Hangi değerlerin retained olduğunu, yani yeni bir abonenin onları hemen alacağını.
  • Payload'ların ne kadar büyük ve ne kadar düzgün biçimlendirilmiş olduğunu.

Topic yapısı sizin için yeniyse, başlamadan önce bir MQTT broker'ın topic'ler ve aboneliklerle ne yaptığını anlamak faydalı olur.

Keşfetmek İçin Bir Topic Ağacı Oluşturun

Göz atmak için trafiğe ihtiyacınız var. Aşağıdaki betik, broker.connectmq.com adresindeki ücretsiz herkese açık MQTT broker'ına küçük bir fabrika hiyerarşisi yayınlar. Tarayıcıda bulabilmeniz için bilerek üç yaygın hata içerir. Client'ı pip install "paho-mqtt>=2.0" ile kurun.

import json
import random
import time
import uuid

import paho.mqtt.client as mqtt

RUN_ID = uuid.uuid4().hex[:6]
ROOT = f"connectmq/demo/{RUN_ID}"

client = mqtt.Client(
    mqtt.CallbackAPIVersion.VERSION2,
    client_id=f"tree-gen-{RUN_ID}",
)
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()
print(f"Publishing under {ROOT}/  (subscribe to {ROOT}/#)")

# Retained cihaz meta verileri
for line in ("line1", "line2"):
    for machine in ("cnc1", "cnc2"):
        meta = {"vendor": "demo", "model": "X200", "line": line}
        client.publish(f"{ROOT}/factory1/{line}/{machine}/meta",
                       json.dumps(meta), qos=1, retain=True)

# Hata 1: tutarsız büyük/küçük harf kullanımı paralel bir dal oluşturur
client.publish(f"{ROOT}/factory1/Line1/cnc1/meta", "{}", qos=1, retain=True)
# Hata 2: sondaki eğik çizgi boş bir son seviye oluşturur
client.publish(f"{ROOT}/factory1/line2/cnc2/telemetry/", "42", qos=0)

try:
    while True:
        for line in ("line1", "line2"):
            for machine in ("cnc1", "cnc2"):
                payload = {
                    "spindle_rpm": random.randint(9000, 12000),
                    "temperature": round(random.uniform(35, 60), 1),
                    "ts": int(time.time()),
                }
                client.publish(f"{ROOT}/factory1/{line}/{machine}/telemetry",
                               json.dumps(payload), qos=0)
        # Hata 3: geçerli JSON olmayan bir payload
        client.publish(f"{ROOT}/factory1/line1/cnc2/telemetry",
                       "temp=48.2;rpm=10100", qos=0)
        time.sleep(2)
except KeyboardInterrupt:
    client.loop_stop()
    client.disconnect()

Betik her döngüde dört mesaj artı bozuk olanı yayınlar; bu da onu herkese açık broker'ın client başına saniyede 10 mesaj limitinin rahatça altında tutar. Çalışır durumda bırakın ve yazdırılan kökü not edin.

Ağacı ConnectMQ Topic Gezgininde Keşfedin

Kendi broker'ınızda, ConnectMQ portalındaki canlı topic gezgini yerleşik topic tarayıcısıdır. Takip etmek için portalda ücretsiz bir broker oluşturun, ardından yukarıdaki betiği TLS ile 8883 portuna geçirip portalın oluşturduğu kimlik bilgilerini (YOUR_USERNAME, YOUR_PASSWORD, YOUR_CLIENT_ID) ekleyerek ona yönlendirin. Bunun yerine herkese açık broker'a hızlıca göz atmak için, WebSocket destekleyen herhangi bir MQTT gezgini wss://broker.connectmq.com:8084/mqtt adresine bağlanıp connectmq/demo/<run-id>/# kökünüze abone olabilir.

Mesajlar geldikçe ağacı yukarıdan aşağıya gezin:

  1. Kökü genişletin. factory1'i ve altında line1, line2 ile beklenmedik bir Line1 görmelisiniz. Topic'ler büyük/küçük harfe duyarlıdır; bu yüzden Line1, line1/#'e abone olan hiçbir abonenin asla almayacağı ayrı bir daldır.
  2. line2/cnc2'yi açın. telemetry altında adı boş bir alt öğe vardır. Bu, sondaki eğik çizgidir: telemetry/, telemetry'den bir seviye daha fazladır ve .../cnc2/telemetry aboneliği onunla eşleşmez.
  3. line1/cnc2/telemetry'yi açın. Değer JSON ile temp=48.2;rpm=10100 arasında gidip gelir. JSON ayrıştıran herhangi bir tüketici her iki mesajdan birinde hata fırlatır.
  4. meta yapraklarına bakın. Retained bayrağını taşırlar. Bağlantıyı kesip yeniden bağlanın; bunlar hemen görünürken telemetri yalnızca bir sonraki mesaj geldiğinde görünür.

ConnectMQ portalı ayrıca ISA-95 seviyelerine (enterprise, site, area, line, cell) göre düzenlenmiş bir cihaz görünümü sunar. Topic'leriniz bir Unified Namespace düzenini izliyorsa, bu görünüm aynı verileri ham dizeler yerine tesis hiyerarşisine göre gruplar; bu da yanlış yerleştirilmiş cihazları göze batırır. Sparkplug B ve Unified Namespace yazımız bu yapıyı açıklar.

Komut Satırından Topic'lere Göz Atın

Grafik bir tarayıcı her zaman elinizin altında olmayabilir. -v bayrağıyla mosquitto_sub her payload'dan önce topic'i yazdırır ve birkaç ek bayrak onu hafif bir tarayıcıya dönüştürür:

# Kökünüzün altındaki her topic, topic adlarıyla
mosquitto_sub -h broker.connectmq.com -p 1883 -i browse-$RANDOM \
  -t 'connectmq/demo/RUN_ID/#' -v

# Yalnızca retained message'lar: bağlan, retained olanları yazdır, 3 sn sonra çık
mosquitto_sub -h broker.connectmq.com -p 1883 -i retained-$RANDOM \
  -t 'connectmq/demo/RUN_ID/#' -v --retained-only -W 3

# 30 saniyede görülen benzersiz topic adları
timeout 30 mosquitto_sub -h broker.connectmq.com -p 1883 -i list-$RANDOM \
  -t 'connectmq/demo/RUN_ID/#' -F '%t' | sort -u

RUN_ID'yi betiğin yazdırdığı değerle değiştirin. Son komut, MQTT'de "topic'leri listele"ye en yakın şeydir ve beklediğiniz topic'leri gerçekte var olan topic'lerle karşılaştırmanın hızlı bir yoludur. Daha fazla tarif mosquitto_pub ve mosquitto_sub örnekleri yazımızda.

Bir Topic Tarayıcısının Ortaya Çıkardığı Hata Ayıklama Desenleri

Bir ağacı okumaya alıştığınızda, topic sorunlarının çoğu az sayıda desene girer.

Ağaçta gördüğünüz Anlamı Çözüm
Yalnızca büyük/küçük harfle farklılaşan iki dal Firmware veya yapılandırmada tutarsız adlandırma Küçük harfte standartlaşın ve kod incelemesinde zorunlu kılın
Adı boş bir yaprak Yayın topic'inde sondaki eğik çizgi Yayınlamadan önce sondaki eğik çizgileri kaldırın
Adı boş bir ilk seviye Baştaki eğik çizgi (/factory1/...) Baştaki eğik çizgiyi kaldırın; gereksiz bir seviye ekler
Değeri hiç değişmeyen bir yaprak Cihaz yayını durdurdu veya değer eski retained veri Cihazı kontrol edin; eskimişse retained message'ı temizleyin
Biçimler arasında gidip gelen değerler Tek bir topic'te iki firmware sürümü veya iki yayıncı Payload'u sürümlendirin veya topic'leri ayırın
Adında ID bulunan yüzlerce kardeş yaprak Benzersiz ID'ler hiyerarşide fazla yukarıda ID'leri cihaz seviyesine taşıyın
Çok derin dallar Aşırı yapılandırılmış topic'ler Düzleştirin; herkese açık broker 8 seviyeye izin verir

Eski Retained Message'ları Temizlemek

Retained değerler, yerlerine yenisi gelene kadar broker'da kalır. Bu nedenle hizmetten çıkarılmış bir cihaz her panoda "güncel" bir değer göstermeye devam edebilir. Bir retained message'ı kaldırmak için tam olarak aynı topic'e boş bir retained payload yayınlayın:

mosquitto_pub -h broker.connectmq.com -p 1883 -i clear-$RANDOM \
  -t 'connectmq/demo/RUN_ID/factory1/Line1/cnc1/meta' -r -n

-n bayrağı sıfır uzunlukta bir payload gönderir, -r ise retain bayrağını ayarlar. Topic tarayıcısını yenileyin; Line1 dalı başka alt öğesi kalmadığında kaybolur.

Canlı Ortamda Bir Topic Tarayıcısını Doğru Kullanmak

Yoğun bir canlı ortam broker'ında #'e abone olan bir tarayıcı her mesajı alır; bu da bant genişliğine mal olur ve abonelik veya bağlantı kotalarına takılabilir. Birkaç alışkanlık onu kullanışlı tutar:

  • Sorunuzu yanıtlayan en dar köke abone olun; # yerine factory1/line2/# gibi.
  • Hata ayıklama araçları için ayrı bir kimlik bilgisi kullanın; böylece bir tarayıcı oturumu asla bir cihazın client ID'sini alıp cihazı çevrimdışı bırakmaz.
  • Verinin yanı sıra bağlantı durumunu da kontrol edin. ConnectMQ broker'ınızdaki $SYS/broker/connection/{clientId}/state topic'i belirli bir client'ın bağlı olup olmadığını söyler; bu da "cihaz çevrimdışı" ile "cihaz çevrimiçi ama sessiz" durumlarını birbirinden ayırır.
  • Adlandırma kurallarınızı yazıya dökün ve her firmware sürümünden sonra ağacı bunlarla karşılaştırın.

Editör merkezli iş akışları için ConnectMQ VS Code eklentisi ve ConnectMQ Desktop MQTT explorer, portalın dışında aynı ağaç tarzı gezinmeyi sunar. Yalnızca bir web tarayıcısından test ediyorsanız, online MQTT web client kullanma rehberimiz bununla iyi bir ikili oluşturur; MQTT broker izleme ise bir topic tarayıcısının göstermediği metrikleri ele alır.

Kendi Topic'lerinizi ConnectMQ'da Keşfedin

Kredi kartı gerekmeden app.connectmq.com adresinde Serverless planında ücretsiz bir broker oluşturun. Portal, bu rehberde kullanılan canlı topic gezginini, tarayıcı içi client'ı ve ISA-95 cihaz görünümünü içerir. Tam yönetilen bir MQTT hizmeti olarak ConnectMQ hakkında daha fazla bilgi edinin veya bir bulut MQTT broker seçimine dair kapsamlı rehberi okuyun.

Sık Sorulan Sorular

Bir MQTT broker'daki tüm topic'leri listeleyebilir miyim?

Doğrudan hayır; MQTT'nin bir topic kaydı yoktur. Bir topic tarayıcısı bir joker karaktere abone olur ve mesaj alan topic'leri ve retained topic'leri gösterir; bu da pratikteki karşılığıdır.

Topic tarayıcım var olduğunu bildiğim bir topic'i neden göstermiyor?

Ya abone olduğunuzdan beri ona hiçbir şey yayınlanmamıştır ve retained message tutmuyordur ya da joker karakteriniz onu kapsamıyordur. Büyük/küçük harfi, baştaki veya sondaki eğik çizgileri ve abonelik kökünü kontrol edin.

Canlı ortam broker'ında #'e abone olmak güvenli mi?

Çalışır ama her mesajı alır; bu da ağır olabilir. Sorunuzu yanıtlayan en dar köke abone olun ve ayrı bir hata ayıklama kimlik bilgisi kullanın.

Bir topic'i ağaçtan nasıl silerim?

Topic'ler, onları tutan hiçbir şey kalmadığında kaybolur. O topic'e boş bir retained payload yayınlayarak retained message'ı temizleyin ve onu oluşturan yayıncıyı durdurun.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.