Yönetilen MQTT Bulutu

MQTT Prototipten Canlı Ortama: Adım Adım Bir Geçiş Yolu

Herkese açık bir broker üzerindeki prototip fikri kanıtlar. Bu rehber onu kimlik bilgileri, TLS, topic namespace tasarımı, varlık takibi ve izleme adımlarından geçirerek gerçek kullanıcılara hazır hale getirir.

Breadboard üzerindeki bir sensörün güvenlik, topic ve izleme aşamalarından geçerek bir bulut broker'a ulaştığı MQTT prototipten canlı ortama geçiş illüstrasyonu
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 projesini prototipten canlı ortama taşımak, büyük ölçüde bir demonun göz ardı edebileceği boşlukları kapatmakla ilgilidir: kim bağlanabilir, veriyi kim okuyabilir, topic'ler nasıl düzenlenir ve bir şey bozulduğunda bunu nasıl öğrenirsiniz. Bu rehber, tipik bir hobi projesini herkese açık test broker'ından, düzenli bir namespace'e ve temel izlemeye sahip, TLS korumalı özel bir broker'a, en az yeniden çalışmaya yol açacak sırayla taşır.

Başlangıç Noktası: Çalışan Bir Prototip

Çoğu MQTT projesi aynı şekilde başlar. Bir sensör veya bir ESP32, herkese açık bir MQTT test broker'ına JSON yayınlar, bir dizüstü bilgisayar mosquitto_sub ya da bir Node-RED akışı çalıştırır ve veri görünür. Tipik bir prototip şöyledir:

mosquitto_pub -h broker.connectmq.com -p 1883 -i proto-dev-x9f3 \
  -t "connectmq/demo/x9f3/temp" -m '{"c":22.1}'

Bu, başlamak için gayet iyi bir yoldur. Ama beş nedenle canlı ortam değildir:

  1. Kimlik doğrulama yok. Herkes bağlanabilir; broker.connectmq.com'un herkese açık alanını herkes okuyabilir.
  2. Şifreleme yok. Port 1883 kimlik bilgilerini ve payload'ları düz metin olarak gönderir.
  3. Plansız topic'ler. Topic ağacı kendiliğinden büyümüştür ve birkaç cihazdan fazlasını kaldıramaz.
  4. Varlık bilgisi yok. Çevrimdışı bir cihazı sessiz bir cihazdan ayırt edemezsiniz.
  5. Görünürlük yok. Veri durduğunda bunu bir grafiğin düz göründüğünü fark ederek öğrenirsiniz.

Aşağıdaki adımlar bu boşlukları sırayla kapatır.

Adım 1: Özel Kimlik Bilgilerine Geçin

app.connectmq.com'da bir hesap oluşturun, bir plan seçin, bir broker oluşturun ve üretilen kullanıcı adını, parolayı ve client ID'yi kopyalayın. Ücretsiz Serverless planı 25 bağlantıya kadar bir pilot için yeterlidir; ücretli Serverless planı bunu 1.000'e çıkarır ve QoS 2, 1 MB mesajlar ve shared subscription ekler.

İki kural, geçişin geri kalanını zahmetsiz hale getirir:

  • Cihaz veya servis başına bir kimlik bilgisi seti. Client ID'ler üretilen kimlik bilgilerine bağlıdır; bu yüzden bir seti iki cihaz arasında paylaşmak, cihazların birbirinin bağlantısını koparmasına yol açar.
  • Kimlik bilgilerini kaynak kontrolünün dışında tutun. Bunları ortam değişkenlerinden, git'ten hariç tutulan bir secrets dosyasından ya da fabrikadaki bir provisioning adımından yükleyin.
# .env (bu dosyayı asla commit etmeyin)
MQTT_HOST=broker.connectmq.com
MQTT_PORT=8883
MQTT_USERNAME=YOUR_USERNAME
MQTT_PASSWORD=YOUR_PASSWORD
MQTT_CLIENT_ID=YOUR_CLIENT_ID

Adım 2: TLS'i Her Yerde Açın

Canlı ortam trafiği cihazlar için 8883 portunda TLS, tarayıcılar için ise /mqtt yoluyla 8084 portunda Secure WebSocket kullanmalıdır. ConnectMQ bir Let's Encrypt sertifikası kullanır; bu yüzden çoğu işletim sistemi ve dil çalışma ortamı ona zaten güvenir. Mikrodenetleyicilerde genellikle ISRG Root X1 sertifikasını gömersiniz; ESP32 MQTT SSL rehberimiz ayrıntıları gösterir.

Aşağıda, prototip publisher'ın paho-mqtt 2.x ile Python'da canlı ortam için yeniden yazılmış hali var. Kimlik bilgilerini ortamdan okur, MQTT 5 ile TLS üzerinden bağlanır, broker'ın beklenmedik bağlantı kopmalarını duyurabilmesi için bir Last Will ayarlar ve retained bir online durumu yayınlar.

import json
import os
import time

import paho.mqtt.client as mqtt
from paho.mqtt.properties import Properties
from paho.mqtt.packettypes import PacketTypes

HOST = os.environ["MQTT_HOST"]
PORT = int(os.environ.get("MQTT_PORT", "8883"))
CLIENT_ID = os.environ["MQTT_CLIENT_ID"]
BASE = "acme/site1/greenhouse/zone2/sensor-01"   # canlı ortam namespace'i

def on_connect(client, userdata, flags, reason_code, properties):
    if reason_code.is_failure:
        print("connect failed:", reason_code)
        return
    print("connected")
    client.publish(f"{BASE}/status", "online", qos=1, retain=True)

def on_disconnect(client, userdata, flags, reason_code, properties):
    print("disconnected:", reason_code)

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
                     client_id=CLIENT_ID, protocol=mqtt.MQTTv5)
client.username_pw_set(os.environ["MQTT_USERNAME"], os.environ["MQTT_PASSWORD"])
client.tls_set()
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.reconnect_delay_set(min_delay=1, max_delay=60)
client.on_connect = on_connect
client.on_disconnect = on_disconnect

connect_props = Properties(PacketTypes.CONNECT)
connect_props.SessionExpiryInterval = 3600   # çevrimdışıyken oturumu bir saat tut

client.connect(HOST, PORT, keepalive=60, properties=connect_props)
client.loop_start()

try:
    while True:
        reading = {"ts": int(time.time()), "temp_c": 22.1, "rh": 61}
        client.publish(f"{BASE}/telemetry", json.dumps(reading), qos=1)
        time.sleep(30)
except KeyboardInterrupt:
    client.publish(f"{BASE}/status", "offline", qos=1, retain=True).wait_for_publish()
    client.disconnect()
    client.loop_stop()

Prototiple karşılaştırıldığında ne kadar az şeyin değiştiğine dikkat edin: hostname, port, kimlik bilgileri, TLS ve birkaç özellik. Uçtan uca standart MQTT kullanmanın amacı da budur.

Adım 3: Canlı Ortam İçin Bir Topic Namespace'i Tasarlayın

connectmq/demo/x9f3/temp gibi bir prototip topic'i tek bir sensör için işe yarar. Canlı ortam namespace'i ise hiçbir şeyi yeniden adlandırmadan yeni tesislere, yeni cihaz türlerine ve yeni tüketicilere dayanabilmelidir. İyi bir yapı genelden özele ilerler ve veriyi komutlardan ve durumdan ayırır.

Seviye Örnek Amaç
Organizasyon veya kiracı acme Müşterileri veya iş birimlerini izole eder
Tesis site1 Fiziksel konum
Alan greenhouse Bina, hat veya oda
Birim zone2 Mantıksal cihaz grubu
Cihaz sensor-01 Kalıcı cihaz tanımlayıcısı
Mesaj sınıfı telemetry, status, cmd, cmd/ack Mesajın ne olduğu

İleride sıkıntıdan kurtaran pratik kurallar:

  • Seviyeleri küçük harfle, boşluksuz ve başta eğik çizgi olmadan yazın.
  • Subscriber'ların wildcard ile filtreleyebilmesi için cihaz ID'sini yalnızca payload'a değil, topic'e de koyun.
  • Cihazların dar kapsamlı abone olabilmesi için komutlarda ayrı bir cmd dalı kullanın.
  • Sonradan abone olanların güncel durumu hemen görmesi için durum topic'lerini retained yapın.
  • Derinliği makul tutun; herkese açık broker 8 seviyeye izin verir ve bu her yerde mantıklı bir sınırdır.

Projeniz endüstriyelse, en baştan ISA-95 seviyeleriyle uyum sağlamayı düşünün. Topic'leriniz bu kalıbı izlediğinde ConnectMQ'nun cihazlar görünümü istemcileri ISA-95 seviyelerine göre gruplar. Konut projeleri için akıllı ev MQTT topic yapısı rehberimize bakabilirsiniz.

Adım 4: Cihaz Varlığını Takip Edin

Yukarıdaki kodda olduğu gibi Last Will ile birlikte retained online ve offline durum mesajları, her subscriber'a hangi cihazların bağlı olduğuna dair güvenilir bir görünüm sunar. Broker tarafı durumu $SYS/broker/connection/{clientId}/state üzerinden de izleyebilirsiniz; bu, belirli bir istemcinin bağlantısı koptuğunda bunu bilmesi gereken bir backend servisi için kullanışlıdır.

mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_CLIENT_ID -V mqttv5 \
  -t 'acme/site1/+/+/+/status' -v

Adım 5: İzleme ve Alarmlar Ekleyin

Canlı ortam, sorunları kullanıcılardan önce birinin öğrenmesi demektir. Basit başlayın:

  • Her dağıtımdan sonra verinin aktığını doğrulamak için portal dashboard'unu ve canlı topic gezginini kullanın.
  • Aralık dışına çıkan bir sıcaklık gibi önemli değerler için eşik değeri alarm kuralları oluşturun ve alarm günlüğünü gözden geçirin.
  • Kota ve yetkilendirme sorunlarının teşhis edilebilmesi için her istemcide MQTT 5 reason code'larını loglayın.
  • Uzun süreli depolama veya özel bildirimlere ihtiyacınız varsa, broker'a normal bir MQTT istemcisi olarak bağlanan ve veritabanınıza ya da mesajlaşma aracınıza yazan kendi subscriber'ınızı çalıştırın; örneğin bir Python servisi, Telegraf veya Node-RED.

Daha kapsamlı bir liste için MQTT broker izleme rehberimizi okuyun.

Canlı Ortama Hazırlık Kontrol Listesi

Yayına almadan önce her maddeyi doğrulayın:

  1. Her cihazın ve servisin kendi kimlik bilgileri ve client ID'si var.
  2. Tüm bağlantılar TLS (8883) veya Secure WebSocket (8084) kullanıyor.
  3. Firmware kaynak kontrolünde hiçbir kimlik bilgisi bulunmuyor.
  4. Topic namespace'i belgelenmiş ve bir organizasyon veya kiracı seviyesiyle başlıyor.
  5. Cihazlar Last Will ile retained durum yayınlıyor.
  6. Yeniden bağlanma mantığı jitter'lı exponential backoff kullanıyor.
  7. Payload'lar planın mesaj boyutu limitinin oldukça altında kalıyor.
  8. Komutlar en az QoS 1 kullanıyor ve iki kez alınmaları güvenli.
  9. Kimlik bilgilerini yenileyen firmware güncellemeleri için bir planınız var.
  10. Kritik değerler veya cihaz varlığı değiştiğinde alarmlar bir insana ulaşıyor.

Liste tamamlandığında, MQTT canlı ortam kontrol listesi ve MQTT güvenliği en iyi uygulamaları sıkılaştırma konusunda daha ileri gider.

Canlı Ortam İçin Doğru Planı Seçmek

Bağlantı sayınızı pay bırakarak karşılayan en küçük planla başlayın. 25'ten fazla bağlantıya, QoS 2'ye, daha büyük mesajlara ya da backend tüketicileri için shared subscription'a ihtiyaç duyduğunuzda ücretli Serverless'a geçin. İzole bir cluster istediğinizde Dedicated'ı, broker'ın kendi bulut hesabınızda çalışması gerektiğinde BYOC'yi, kendiniz çalıştırmanız gerektiğinde ise Self Managed Enterprise'ı seçin. Bulut MQTT broker rehberi bu barındırma modellerini daha ayrıntılı karşılaştırır.

Prototipinizi ConnectMQ ile Canlı Ortama Taşıyın

ConnectMQ, prototipinizin zaten konuştuğu standart MQTT üzerinde özel kimlik bilgileri, TLS, MQTT 5 ve canlı topic gezgini ile alarm kurallarına sahip bir portal sunar. app.connectmq.com adresinden kaydolun, kredi kartı gerekmeden ücretsiz Serverless planında bir broker oluşturun ve prototipinizi dakikalar içinde ona yönlendirin. Hiçbir altyapıyı kendiniz çalıştırmak istemiyorsanız, en kısa yol yönetilen bir MQTT broker'dır.

Sık Sorulan Sorular

Canlı ortamda herkese açık broker'ı kullanmaya devam edebilir miyim?

Hayır. broker.connectmq.com'un herkese açık alanını herkes okuyabilir ve istemci başına sıkı limitleri vardır; bu yüzden yalnızca test amaçlıdır. Canlı ortam verisi, kimlik bilgileri ve TLS ile korunan özel bir broker'da olmalıdır.

Canlı ortama geçmek için cihaz kodumu değiştirmem gerekir mi?

Genellikle yalnızca bağlantı ayarları değişir: hostname, port 8883, kimlik bilgileri ve TLS. Yeni bir namespace benimserseniz topic adları da değişir; bunu ölçeklenmeden önce yapmaya değer.

Çok sayıda cihazda kimlik bilgilerini nasıl yönetmeliyim?

Cihaz başına bir kimlik bilgisi seti üretin, bunu ortak bir firmware'e derlemek yerine provisioning sırasında yükleyin ve diğerlerine dokunmadan tek bir cihazı iptal edebilmek için kayıt tutun.

Küçük bir pilot hangi planı kullanmalı?

25'e kadar eşzamanlı bağlantıya sahip bir pilot ücretsiz Serverless planına sığar. Daha fazla bağlantıya, QoS 2'ye veya daha büyük mesajlara ihtiyaç duyduğunuzda ücretli Serverless'a geçin.

İ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.