Bir Google Cloud IoT Core alternatifi arıyorsanız ya kapanış nedeniyle ortada kalan bir cihaz filosunu taşıyorsunuz ya da Google Cloud üzerinde yerel bir cihaz ağ geçidi olmadan yeni bir proje tasarlıyorsunuz. Bu rehber IoT Core'un ne yaptığını açıklıyor, gerçekçi alternatifleri tarafsız biçimde karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud servislerine akmaya devam ederken cihazları yönetilen bir MQTT broker'a taşıma sürecini adım adım anlatıyor.
Google Cloud IoT Core'a Ne Oldu?
Google, 2022'de Cloud IoT Core'un sonlandırılacağını duyurdu ve servis 16 Ağustos 2023'te kullanımdan kaldırıldı. Bu tarihten sonra cihazlar artık servisin MQTT ve HTTP köprülerine bağlanamadı. Google doğrudan bir halef çıkarmadı; bunun yerine müşterileri iş ortağı çözümlerine ve genel Google Cloud servisleri üzerine inşa etmeye yönlendirdi. Pub/Sub, Dataflow ve BigQuery gibi diğer Google Cloud ürünleri bundan etkilenmedi ve IoT verileri için yaygın hedefler olmaya devam ediyor.
IoT Core üç işlevi bir araya getiriyordu ve her birinin bir karşılığa ihtiyacı var:
- Cihaz bağlantısı: 8883 (ve 443) portunda
mqtt.googleapis.comadresindeki bir MQTT endpoint'i. - Cihaz kaydı ve kimlik doğrulama:
projects/PROJECT/locations/REGION/registries/REGISTRY/devices/DEVICEbiçimindeki uzun client ID'lerle tanımlanan, cihaz başına bir özel anahtarla imzalanıp MQTT parolası olarak gönderilen bir JWT ile kimliği doğrulanan cihazlar. - Veri yönlendirme:
/devices/DEVICE_ID/eventstopic'ine yayınlanan telemetri Pub/Sub topic'lerine iletiliyordu; yapılandırma ve komutlar/devices/DEVICE_ID/configve/devices/DEVICE_ID/commands/#üzerinden aşağı iniyor, cihaz durumu ise/devices/DEVICE_ID/stateüzerinden yukarı çıkıyordu.
Google Cloud IoT Core Alternatifi Seçeneklerinin Karşılaştırması
Tek bir doğru cevap yok. En iyi alternatif, IoT Core özelliklerini ne kadar derinlemesine kullandığınıza ve verilerinizin nerede bulunmasını istediğinize bağlıdır.
| Seçenek | Ne elde edersiniz | Ne zaman uygun | Ödünler |
|---|---|---|---|
| Yönetilen MQTT broker (ConnectMQ gibi) | Standart MQTT endpoint'i, kimlik bilgileri, konsol | Sade, taşınabilir MQTT istiyor ve işlemeyi Google Cloud'da tutmak istiyorsanız | Pub/Sub'a küçük bir iletim servisi eklersiniz |
| Başka bir hyperscaler IoT servisi (AWS IoT Core, Azure IoT Hub veya Event Grid MQTT) | Cihaz kaydı, kurallar, o bulutla derin entegrasyon | İşlemeyi o buluta taşımaya hazırsanız | Tescilli topic kuralları ve bulutlar arası veri aktarımı |
| Kapanış sırasında önerilen iş ortağı platformları | Bazı durumlarda IoT Core uyumlu API'ler | Cihazlarda en az değişikliği istiyorsanız | Bağımlı olacağınız sağlayıcıya özgü bir API daha |
| GKE veya Compute Engine üzerinde kendi barındırdığınız broker | Tam kontrol, açık kaynak seçenekler | Operasyon kapasiteniz varsa | Yamalar, ölçekleme, sertifikalar ve nöbet sizin sorumluluğunuzda |
| IoT uygulama platformları | Dashboard'lar, cihaz yönetimi, kurallar | Yalnızca taşıma katmanı değil, eksiksiz bir uygulama katmanı gerekiyorsa | Daha ağır, çoğu zaman daha kuralcı |
Her seçenek meşrudur. Hyperscaler IoT servisleri zengin kural motorları ve entegrasyon sunar; iş ortağı platformları firmware değişikliklerini azaltabilir; kendi barındırmanız maksimum kontrol sağlar. Yönetilen bir MQTT broker ise ortada konumlanır: standart protokol, minimum bağımlılık (lock-in) ve çalıştırılacak sunucu yok; bunun bedeli, Google Cloud'a iletimi kendiniz kurmanızdır. Hyperscaler servislerinin daha geniş bir karşılaştırması için AWS IoT Core alternatifi rehberimize bakın.
IoT Core Kavramlarını Standart MQTT'ye Eşleme
Standart bir broker'a geçmek büyük ölçüde bir çeviri işidir:
| IoT Core kavramı | ConnectMQ'daki standart MQTT karşılığı |
|---|---|
mqtt.googleapis.com:8883 |
broker.connectmq.com:8883 (TLS) veya güvenli WebSocket için 8084 |
| Uzun registry client ID'si | Portaldan verilen client ID |
| Cihaz anahtarıyla imzalanmış JWT | Kimlik bilgisi seti başına verilen kullanıcı adı ve parola |
/devices/ID/events |
Kendi hiyerarşiniz, ör. fleet/site1/ID/telemetry |
/devices/ID/state |
Retained topic, ör. fleet/site1/ID/state |
/devices/ID/config |
Cihazın abone olduğu retained topic, ör. fleet/site1/ID/config |
/devices/ID/commands/# |
QoS 1 ve idempotent payload'lara sahip komut topic'i |
| Pub/Sub yönlendirmesi | Pub/Sub'a ileten bir abone servisi |
| Registry meta verileri | Kendi envanter veritabanınız veya retained meta veri topic'leri |
Topic düzenini artık siz tasarlıyorsunuz. IoT Core'un kullandığı baştaki eğik çizgiyi kaldırın, çünkü boş bir ilk seviye ekler; imalat alanında çalışıyorsanız ISA-95 tarzı bir hiyerarşi düşünün.
Adım Adım: Cihazları Yönetilen Bir MQTT Broker'a Taşıyın
1. Broker'ı Hazırlayın
app.connectmq.com adresinden kaydolun, zirve bağlantı sayınıza uygun bir plan seçin, bir broker oluşturun ve kimlik bilgilerini oluşturun. Ücretsiz Serverless plan (en fazla 25 bağlantı, QoS 1'e kadar) firmware'i ve iletim servisini doğrulamak için yeterlidir; Serverless Paid ise en fazla 1.000 bağlantı ve QoS 2'yi destekler.
2. Cihaz Firmware'ini Güncelleyin
JWT üretimini ve IoT Core client ID'sini verilen kullanıcı adı, parola ve client ID ile değiştirin, host'u değiştirin ve topic adlarını güncelleyin. TLS'i 8883 portunda tutun; ConnectMQ bir Let's Encrypt sertifikası kullandığından güven deponuz (trust store) Google'ın kök sertifikaları yerine ISRG Root X1 sertifikasını içermelidir. IoT Core cihazlarında sıklıkla yeniden bağlanma hatalarına yol açan JWT yenileme mantığını kaldırın. Cihazlarınız ESP32 tabanlıysa ESP32 MQTT eğitimi eksiksiz bir TLS istemcisi gösteriyor.
3. Telemetriyi Pub/Sub'a İletin
ConnectMQ bulut veri köprüleri içermez; bu nedenle veriler Pub/Sub'a sıradan bir MQTT istemcisi olarak bağlanan küçük bir iletim servisi aracılığıyla ulaşır. Bunu topic'e yayın yapma izni olan bir servis hesabıyla Cloud Run, GKE veya bir VM üzerinde çalıştırın. Kurulum için pip install "paho-mqtt>=2.0" google-cloud-pubsub komutunu kullanın.
import os
import ssl
import paho.mqtt.client as mqtt
from google.cloud import pubsub_v1
PROJECT = os.environ["GCP_PROJECT"]
PUBSUB_TOPIC = os.environ.get("PUBSUB_TOPIC", "device-telemetry")
MQTT_FILTER = os.environ.get("MQTT_FILTER", "fleet/+/+/telemetry")
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(PROJECT, PUBSUB_TOPIC)
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected:", reason_code)
client.subscribe(MQTT_FILTER, qos=1)
def on_message(client, userdata, msg):
device_id = msg.topic.split("/")[2]
future = publisher.publish(
topic_path,
msg.payload,
mqtt_topic=msg.topic,
device_id=device_id,
)
future.add_done_callback(
lambda f: f.exception() and print("Pub/Sub publish failed:", f.exception())
)
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id=os.environ["MQTT_CLIENT_ID"],
protocol=mqtt.MQTTv5,
)
client.username_pw_set(os.environ["MQTT_USERNAME"], os.environ["MQTT_PASSWORD"])
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.on_connect = on_connect
client.on_message = on_message
client.reconnect_delay_set(min_delay=1, max_delay=60)
client.connect("broker.connectmq.com", 8883, keepalive=60)
client.loop_forever()
MQTT_USERNAME, MQTT_PASSWORD ve MQTT_CLIENT_ID değişkenlerini portaldaki değerlere (YOUR_USERNAME, YOUR_PASSWORD, YOUR_CLIENT_ID) ayarlayın; tercihen bunları Secret Manager'dan alın. device_id gibi attribute'lar, tıpkı IoT Core'un cihaz attribute'ları eklemesi gibi, alt akıştaki abonelerin ve Dataflow işlerinin payload'ı ayrıştırmadan filtreleme yapmasını sağlar. Resmi Pub/Sub istemci kütüphanesi dokümantasyonu yüksek hacimler için toplu gönderim (batching) ve akış kontrolünü ele alıyor. Ölçeklemek için $share/forwarders/fleet/+/+/telemetry gibi bir MQTT 5 shared subscription ile birden fazla instance çalıştırın; bu özellik Serverless Paid ve üzerinde mevcuttur.
4. Yapılandırma ve Komutları Değiştirin
IoT Core'un config mesajları doğal olarak retained MQTT mesajlarına karşılık gelir: her cihazın yapılandırmasını kendi config topic'ine retained olarak yayınlayın; cihaz bunu her bağlandığında alır. Komutlar ise QoS 1 bir komut topic'ine karşılık gelir. MQTT broker kesintisi atlatma rehberimizde anlatıldığı gibi komutları benzersiz bir ID ve bir son geçerlilik süresiyle idempotent hale getirin.
5. Dalgalar Halinde Yayına Alın
Önce bir pilot grubu taşıyın, bağlantı durumunu $SYS/broker/connection/{clientId}/state üzerinden ve portalın topic gezgininde izleyin, ardından geri kalanını bölge veya ürün hattı bazında taşıyın. Bazı cihazlar hızlıca güncellenemiyorsa, yerel bir ağ geçidi eski topic'lerini çevirip yeni hiyerarşiye yeniden yayınlayabilir.
Geçiş Öncesi Kontrol Listesi
- Cihazların, firmware sürümlerinin ve kullanılan IoT Core özelliklerinin envanteri.
- Yeni topic hiyerarşisi tasarlandı ve belgelendi.
- Broker planı zirve bağlantı, QoS ve mesaj boyutuna göre boyutlandırıldı.
- Kimlik bilgileri cihaz başına oluşturuldu ve güvenli şekilde saklandı.
- Firmware yeni host, güven deposu, kimlik bilgileri ve topic'ler için güncellendi.
- İletim servisi çalışıyor ve Pub/Sub'da doğrulandı.
- Config ve komut akışları uçtan uca test edildi.
- Pilot grup ve geri dönüş adımlarını içeren yayına alma planı hazır.
Filonuzun bir kısmı zaten yerel bir broker üzerinde çalışıyorsa, Mosquitto'dan bulut MQTT'ye geçiş rehberi bridge kurulumunu ve dalgalar halinde geçişi daha ayrıntılı ele alıyor.
Filonuzu ConnectMQ'ya Taşıyın
app.connectmq.com adresinde kredi kartı gerekmeden Serverless planda ücretsiz bir broker oluşturun ve filoyu taşımadan önce firmware'inizi ve iletim servisinizi doğrulayın. ConnectMQ; standart MQTT 3.1.1 ve 5.0, TLS, WebSocket ve canlı topic gezgini içeren bir portal sunan tam yönetilen bir MQTT servisidir. Dağıtım seçenekleri için bulut MQTT broker rehberini okuyun veya ilk test için ücretsiz herkese açık MQTT broker'ı deneyin.
Sık Sorulan Sorular
Google Cloud IoT Core ne zaman kapandı?
Google, 2022'de sonlandırma kararını duyurduktan sonra Cloud IoT Core'u 16 Ağustos 2023'te kullanımdan kaldırdı. Cihazlar artık servisin endpoint'lerine bağlanamıyor.
Başka bir broker'a geçtikten sonra Pub/Sub ve BigQuery'yi kullanmaya devam edebilir miyim?
Evet. Bu servisler etkilenmedi. Küçük bir abone servisi MQTT mesajlarını broker'dan Pub/Sub'a iletir ve mevcut veri hatlarınız oradan devam eder.
Yeni bir MQTT broker'da JWT kimlik doğrulamasına ihtiyacım var mı?
Şart değil. ConnectMQ dahil çoğu yönetilen broker, TLS üzerinden cihaz başına kullanıcı adı ve parola kullanır; bu da JWT yenileme mantığını firmware'den çıkarır.
IoT Core cihaz yapılandırmasının en yakın karşılığı nedir?
Retained MQTT mesajları. Her cihazın yapılandırmasını kendi config topic'ine retained olarak yayınlayın; cihaz her bağlandığında en güncel sürümü alır.



