Yönetilen MQTT Bulutu

Azure IoT Hub Alternatifi: Tam Bir MQTT 3.1.1/5.0 Broker'a Geçiş

Azure IoT Hub, MQTT'yi cihazdan buluta bir yapıda konuşur. Herhangi istemciler arasında publish/subscribe'a ihtiyacınız varsa tam bir MQTT broker daha uygun olabilir. Modellerin nasıl farklılaştığını ve aşamalı olarak nasıl taşınacağınızı burada bulabilirsiniz.

Cihazdan buluta mesajlaşmayı tam bir publish/subscribe MQTT broker ile karşılaştıran Azure IoT Hub alternatifi 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

Projeniz cihazdan buluta bir gateway yerine cihazlar, uygulamalar ve servisler arasında gerçek publish/subscribe gerektiriyorsa bir Azure IoT Hub alternatifini değerlendirmeye değer. Bu makale, IoT Hub'ın cihaz odaklı MQTT desteğinin tam bir MQTT 3.1.1/5.0 broker'dan nasıl farklılaştığını, her iki tarafta nelerin değerlendirilmesi gerektiğini ve filonuzu süreç boyunca çalışır halde tutan, standart bir broker'a aşamalı taşıma yolunu açıklıyor.

Azure IoT Hub Ne İçin Tasarlanmıştır

Azure IoT Hub, Azure'da cihazları bağlamak, yönetmek ve onlarla iletişim kurmak için yönetilen bir hizmettir. Güçlü yanları filo odaklıdır: bir cihaz kimlik kaydı, device twin'ler, direct method'lar, buluttan cihaza mesajlar ve telemetrinin diğer Azure hizmetlerine yönlendirilmesi. Cihazlar SAS token ya da X.509 sertifikası ile kimlik doğrulayarak MQTT, AMQP veya HTTPS kullanabilir.

IoT Hub ile MQTT kullandığınızda onun cihaz modeli içinde çalışırsınız. Cihazlar telemetriyi devices/{device_id}/messages/events/ gibi cihaza özgü bir topic'e yayınlar ve mesajları devices/{device_id}/messages/devicebound/# üzerinden alır. Twin güncellemeleri ve direct method'ların kendi ayrılmış topic'leri vardır. Hizmet, rastgele istemciler arasında mesaj aktaran bir broker değil, her cihazın karşı tarafıdır.

Bu, cihaz yönetimi ve buluta veri alımı için bilinçli bir tasarımdır. Yalnızca genel amaçlı bir MQTT broker ile aynı şey değildir. Microsoft, Azure Event Grid'de publish/subscribe senaryolarını hedefleyen bir MQTT broker yeteneği de sunar; Azure içinde kalmak istiyorsanız bunu değerlendirmeye değer. Her hizmetin kesin yetenekleri için Microsoft'un güncel dokümantasyonunu kontrol edin.

Cihaz Odaklı MQTT vs Tam Bir MQTT Broker

Özellik Cihaz odaklı (IoT Hub tarzı) Tam MQTT broker (ör. ConnectMQ)
Topic ad alanı Sabit, cihaz başına ayrılmış topic'ler Kendi hiyerarşiniz, ör. tesis/alan/hat/cihaz
Cihazdan cihaza mesajlaşma Bulut arka ucu üzerinden Herhangi istemciler arasında doğrudan publish/subscribe
Cihazlar arası joker karakterli abonelikler Modelin parçası değil; arka uç servisleri yönlendirilmiş veriyi okur Topic ağacınız genelinde + ve #
Tarayıcı ve uygulama istemcileri Genellikle bir arka uç API'si üzerinden Doğrudan Secure WebSocket (8084, path /mqtt)
Retained message'lar ve MQTT 5 özellikleri Güncel desteği kontrol edin Retained message'lar, session expiry, topic alias, message expiry, response topic
Cihaz yönetimi Twin'ler, direct method'lar, kayıt Kendi durum topic'leriniz ve envanteriniz
Bulut yönlendirme Azure hizmetlerine yerleşik yönlendirmeler Node-RED veya Telegraf gibi harici MQTT istemcileri

Cihaz yönetimi ve Azure entegrasyonu en önemli olduğunda sol sütun kazanır. Her yerde standart MQTT semantiği istediğinizde sağ sütun kazanır.

Tam Bir MQTT Broker'ın Daha Uygun Olduğunun İşaretleri

  • Dashboard'lar ve uygulamalar canlı veriye doğrudan ihtiyaç duyuyor. Tam bir broker ile bir tarayıcı uygulaması, arka uç aktarıcısı olmadan Secure WebSocket üzerinden abone olur.
  • Cihazlar ya da makineler birbiriyle konuşuyor. Bir kontrolcünün bir sensörün topic'ine abone olması MQTT'de doğaldır, cihazdan buluta bir modelde ise zahmetlidir.
  • Bir Unified Namespace inşa ediyorsunuz. Bir ISA-95 topic hiyerarşisi, topic ağacının sahibi olduğunuz bir broker gerektirir. Bkz. MQTT Sparkplug B ve Unified Namespace.
  • Taşınabilir firmware istiyorsunuz. Standart topic'ler ve standart kimlik doğrulama, cihazları herhangi bir buluttan bağımsız kılar.
  • Sistemleriniz birden fazla buluta ya da şirket içi sahaya yayılıyor.

IoT Hub Kavramlarını Standart MQTT'ye Eşlemek

IoT Hub kavramı Standart MQTT karşılığı
Cihazdan buluta telemetri site1/area1/line1/dev42/telemetry topic'ine yayın
Buluttan cihaza mesaj Cihaz site1/area1/line1/dev42/cmd topic'ine abone olur
Device twin raporlanan özellikleri .../dev42/state/reported üzerinde retained message
Device twin istenen özellikleri .../dev42/state/desired üzerinde retained message
Direct method Response topic ve correlation data kullanan MQTT 5 istek/yanıt
Bağlantı durumu olayları ConnectMQ'da $SYS/broker/connection/{clientId}/state
Mesaj yönlendirme Harici abone, Node-RED akışı ya da Telegraf ajanı

MQTT 5'in response topic özelliği, direct method'ların yerini almak için özellikle faydalıdır: çağıran taraf bir response topic ile bir istek yayınlar ve cihaz yanıtını oraya yayınlar.

IoT Hub'dan Ayrıldığınızda Üstlendikleriniz

Adil bir karşılaştırma, sizin tarafınıza geçen işi de içerir. IoT Hub bir cihaz kaydını, twin depolamayı, method çağırmayı ve yönlendirmeyi bir arada sunar. Sade bir broker ile bu desenlerin sahibi siz olursunuz:

  • Cihaz envanteri. Cihazların, kimlik bilgilerinin ve firmware sürümlerinin listesini kendi sisteminizde tutun.
  • Durum kuralları. Raporlanan ve istenen durum payload'larının yapısında uzlaşın ve her firmware ekibinin aynı kuralları izlemesi için bunları belgeleyin.
  • Komut güvenliği. Komut topic'lerine kimlerin yayın yapabileceğini tanımlayın ve her komutu uygulamadan önce cihazda doğrulayın.
  • Veri yönlendirme. Veriyi depolama ve analitiğe taşıyan aboneleri ya da akışları çalıştırın ve izleyin.

Birçok ekip için bunlar küçük ve iyi bilinen görevlerdir. Diğerleri için, özellikle karmaşık provisioning süreçleriyle çok büyük filolar yönetenler için, bir platformun yerleşik cihaz yönetimini korumaya değer. Kendi filo boyutunuzu ve ekibinizi göz önünde bulundurarak karar verin.

Örnek: Taşıma Sonrası Cihaz Kodu

İşte PubSubClient kullanarak telemetri yayınlayan ve sizin tanımladığınız topic'lerde komutları dinleyen, ConnectMQ'ya TLS üzerinden bağlanan bir ESP32 sketch'i:

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>

const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";
const char* MQTT_HOST = "broker.connectmq.com";
const int   MQTT_PORT = 8883;
const char* MQTT_USER = "YOUR_USERNAME";
const char* MQTT_PASS = "YOUR_PASSWORD";
const char* CLIENT_ID = "YOUR_CLIENT_ID";

const char* TOPIC_TELEMETRY = "site1/area1/line1/dev42/telemetry";
const char* TOPIC_CMD       = "site1/area1/line1/dev42/cmd";

WiFiClientSecure net;
PubSubClient mqtt(net);

void onMessage(char* topic, byte* payload, unsigned int length) {
  String msg;
  for (unsigned int i = 0; i < length; i++) msg += (char)payload[i];
  Serial.printf("Command on %s: %s\n", topic, msg.c_str());
}

void connectMqtt() {
  while (!mqtt.connected()) {
    Serial.print("Connecting to MQTT... ");
    if (mqtt.connect(CLIENT_ID, MQTT_USER, MQTT_PASS)) {
      Serial.println("connected");
      mqtt.subscribe(TOPIC_CMD, 1);
    } else {
      Serial.printf("failed, state=%d\n", mqtt.state());
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  // Üretimde ISRG Root X1 CA'sını net.setCACert(...) ile sabitleyin
  net.setInsecure();
  mqtt.setServer(MQTT_HOST, MQTT_PORT);
  mqtt.setCallback(onMessage);
}

void loop() {
  if (!mqtt.connected()) connectMqtt();
  mqtt.loop();

  static unsigned long last = 0;
  if (millis() - last > 10000) {
    last = millis();
    char payload[64];
    snprintf(payload, sizeof(payload), "{\"temp\":%.1f}", 20.0 + random(0, 50) / 10.0);
    mqtt.publish(TOPIC_TELEMETRY, payload);
  }
}

setInsecure() yalnızca ilk test içindir. Üretimde cihazın broker'ı doğrulaması için Let's Encrypt kök sertifikasını setCACert() ile yükleyin. ESP32 MQTT eğitimi sertifika yönetimini ayrıntılı olarak ele alıyor.

Aşamalı Bir Taşıma Yolu

  1. Topic ağacını tasarlayın. Kurum/tesis/alan/hat/cihaz gibi bir hiyerarşiye karar verin ve telemetri, durum ve komut topic'lerini ayırın.
  2. Mevcut veriyi köprüleyin. Mevcut IoT Hub tüketicilerinizden (örneğin yerleşik event uç noktasından) okuyup yeni broker'ın topic'lerine yeniden yayınlayan küçük bir servis çalıştırın. Yeni dashboard'lar broker'ı hemen kullanabilir.
  3. Yönlendirmeleri değiştirin. Her Azure yönlendirmesini aynı hedefe yazan harici bir abone, Node-RED akışı ya da Telegraf çıktısı olarak yeniden oluşturun.
  4. Bir pilot grubu taşıyın. Birkaç cihazın firmware'ini ya da gateway yapılandırmasını güncelleyin. Yeniden bağlanma davranışını ve plan sınırlarını kontrol edin; ConnectMQ'da bir kota aşılırsa MQTT 5 istemcileri 0x97 reason code'unu alır.
  5. Dalgalar halinde yaygınlaştırın ve her dalga kararlı hale gelene kadar önceki yapılandırmayı hazır tutun.

Geçiş Sonrası Sorun Giderme

  • Cihaz bağlanıyor, sonra birkaç saniyede bir bağlantısı kopuyor. İki cihaz aynı client ID'yi paylaşıyor. Her cihaza kendi kimlik bilgilerini ve client ID'sini verin.
  • Arka uç servisi veri görmüyor. Abonelik filtresini kontrol edin. site1/+/telemetry filtresi site1/area1/line1/dev42/telemetry ile eşleşmez; site1/# ya da doğru sayıda + seviyesi kullanın.
  • Komutlar iki kez geliyor. QoS 1 ile yinelenen mesajlar tasarım gereği mümkündür. Bir komut kimliği ekleyin ve tekrarları yok sayın. MQTT QoS seviyeleri rehberi nedenini açıklıyor.
  • Yeniden başlatmadan sonra eski durum görünüyor. Retained message'lar değiştirilene ya da temizlenene kadar kalır. Birini temizlemek için boş bir retained payload yayınlayın.

Tam Bir MQTT Broker Deneyin

Herhangi bir cihazı değiştirmeden önce publish/subscribe modelini keşfedebilirsiniz. Kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun, bir test cihazı ve bir tarayıcı istemcisi bağlayın ve mesajları canlı topic gezgininde izleyin. Daha geniş bağlam için buluttaki MQTT broker rehberini okuyun, AWS IoT Core alternatifi makalesiyle karşılaştırın ve bir MQTT broker'ın ne yaptığını gözden geçirin. Daha fazlasını connectmq.com adresinde öğrenin.

Sık Sorulan Sorular

Azure IoT Hub bir MQTT broker mıdır?

IoT Hub cihaz iletişimi için MQTT'yi destekler, ancak ayrılmış topic'lere sahip cihazdan buluta bir model içinde. Rastgele istemciler arasında genel bir publish/subscribe broker olarak tasarlanmamıştır.

Device twin'leri standart MQTT ile nasıl değiştiririm?

Raporlanan ve istenen durum topic'lerinde retained message'lar kullanın. Yeni aboneler bilinen son durumu hemen alır.

Başka bir broker'a geçtikten sonra Azure hizmetlerini kullanmaya devam edebilir miyim?

Evet. Harici bir abone ya da Node-RED akışı, veriyi broker'dan herhangi bir Azure hizmetine normal API'leri üzerinden iletebilir.

Güncel IoT Hub MQTT yeteneklerini nereden kontrol ederim?

Güncel sürüm için desteklenen MQTT özelliklerini ve sınırlarını anlatan Microsoft'un resmi Azure IoT Hub dokümantasyonunu kullanın.

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