Zigbee2MQTT ile bir bulut broker kullanmak, ev ağınızda port yönlendirme veya VPN olmadan sensörleri her yerden okumanızı ve Zigbee cihazlarını kontrol etmenizi sağlar. Bu rehberde mevcut bir Zigbee2MQTT kurulumunu 8883 portunda TLS ile korunan bir broker'a yönlendirecek, önce herkese açık bir broker'da test edecek ve ardından günlük kullanım için özel kimlik bilgilerine geçeceksiniz.
Neden Zigbee2MQTT ile Bulut Broker Kullanmalı?
Zigbee2MQTT kurulumlarının çoğu aynı Raspberry Pi üzerindeki bir Mosquitto konteyneriyle konuşur. Bu, evin dışındaki bir şeyin verileri görmesini isteyene kadar iyi çalışır: mobil veri kullanan bir telefon uygulaması, ofisteki bir pano, yazlık gibi ikinci bir konum veya enerji kullanımını kaydeden bir arka uç hizmeti. Yerel bir broker'ı internete açmak; port yönlendirme, dinamik DNS ve sertifikalar demektir ve bunların her biri yeni bir hata kaynağıdır.
Buluttaki bir broker bağlantının yönünü tersine çevirir. Zigbee2MQTT, tıpkı bir tarayıcının bir web sitesini açması gibi broker'a dışarıya doğru bir TLS bağlantısı açar; dolayısıyla modeminizde hiçbir şeyin değişmesi gerekmez. Ardından her yerdeki yetkili client'lar aynı topic'lere abone olabilir. Bu resimde broker'ın oynadığı rolde yeniyseniz bir MQTT broker'ın ne yaptığına dair kısa açıklama iyi bir başlangıçtır.
Ödünleşim açıktır: cihaz durumlarınız artık internetteki bir hizmetten geçer; bu nedenle şifreleme ve özel kimlik bilgileri isteğe bağlı değildir. Bu rehberin geri kalanı bunları varsayılan kabul eder.
Neye İhtiyacınız Var?
- Eşleştirilmiş bir koordinatöre sahip, çalışan bir Zigbee2MQTT kurulumu (1.x veya 2.x). Sıfırdan başlıyorsanız önce Zigbee2MQTT kurulum rehberini izleyin ve ardından buraya dönün.
- Zigbee2MQTT'nin
configuration.yamldosyasına erişim (dataklasöründe veya Home Assistant'taki eklenti yapılandırma sayfasında). - Test için: başka bir şey gerekmez, çünkü herkese açık broker anonim bağlantıları kabul eder.
- Üretim için: kendi kullanıcı adı, parolası ve client ID'si olan bir broker; örneğin portaldan oluşturulan bir ConnectMQ broker'ı.
Adım 1: Herkese Açık Broker'da Test Edin
Kimlik bilgilerine dokunmadan önce Zigbee2MQTT'nin internete erişip TLS üzerinden yayın yapabildiğini kanıtlayın. broker.connectmq.com adresindeki herkese açık MQTT test broker'ı, boş olmayan ve benzersiz herhangi bir client ID ile anonim client'ları kabul eder. Orada yayınlanan her şeyi herkes okuyabilir; bu yüzden rastgele bir topic öneki ve yalnızca zararsız test cihazları kullanın.
configuration.yaml dosyasının mqtt bölümünü düzenleyin:
mqtt:
base_topic: connectmq/demo/z2m-7f3k9q/zigbee2mqtt
server: mqtts://broker.connectmq.com:8883
client_id: z2m-7f3k9q
version: 5
keepalive: 60
reject_unauthorized: true
Bu değerlerle ilgili birkaç not:
mqtts://ve 8883 portu TLS'yi etkinleştirir. Broker, Node.js'in zaten güvendiği bir Let's Encrypt sertifikası kullanır; bu nedenle bircagirdisine ihtiyacınız yoktur.- Rastgele ID'nizi içeren
base_topic, mesajlarınızı diğer herkesinkinden ayrı tutar. Zigbee2MQTT cihazın kolay adını ve/setgibi sonekleri ekler; dolayısıyla buradaki tam topic altı seviye derinliğindedir ve herkese açık broker'ın sekiz seviyelik sınırının içinde kalır. version: 5, MQTT 5'i seçer. Sürüm 4 (MQTT 3.1.1) de çalışır.reject_unauthorized: truevarsayılandır; açık bırakın. Kapatmak her sertifikayı kabul eder ve TLS'nin amacını boşa çıkarır.
Zigbee2MQTT'yi yeniden başlatın ve günlükte Connected to MQTT server benzeri bir satır arayın. Ardından herhangi bir makineden abone olun:
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-i watcher-7f3k9q -t 'connectmq/demo/z2m-7f3k9q/zigbee2mqtt/#' -v
bridge/state, bridge/info, bridge/devices ve her cihaz için bir topic görmelisiniz. Diğer taraftan bir lambayı açıp kapatın:
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-i sender-7f3k9q -t 'connectmq/demo/z2m-7f3k9q/zigbee2mqtt/living_lamp/set' \
-m '{"state":"TOGGLE"}'
Windows veya macOS'ta --capath /etc/ssl/certs yerine ISRG Root X1 içeren bir CA paketini gösteren --cafile kullanın.
Akılda tutulması gereken herkese açık broker sınırları
Herkese açık alan, mesaj başına 64 KB'a ve client başına saniyede 10 mesaja izin verir. Büyük bir Zigbee ağı her ikisine de ulaşabilir: bridge/devices her cihazı tam tanımıyla listeler ve büyük bir mesh'te 64 KB'ı aşabilir; ani bir sensör raporu dalgası da hız sınırını aşabilir. Birkaç cihazlı bir test için bu sorun değildir, ancak gerçek kurulum için özel bir broker'a geçmenin bir nedeni daha budur.
Adım 2: Özel Bir Zigbee2MQTT Bulut Broker'ına Geçin
Test çalıştığında özel bir broker oluşturun. ConnectMQ'da bir plan seçer, bir broker oluşturur ve üretilmiş bir kullanıcı adı, parola ve client ID alırsınız. Client ID'ler verilen kimlik bilgilerine bağlıdır; bu nedenle portaldaki client ID'yi birebir kullanın.
Zigbee2MQTT'nin !secret sözdizimiyle gizli bilgileri ana dosyanın dışında tutun. configuration.yaml dosyasının yanında bir secret.yaml oluşturun:
mqtt_user: YOUR_USERNAME
mqtt_password: YOUR_PASSWORD
mqtt_client_id: YOUR_CLIENT_ID
Ardından ona başvurun:
mqtt:
base_topic: home/zigbee2mqtt
server: mqtts://broker.connectmq.com:8883
user: '!secret mqtt_user'
password: '!secret mqtt_password'
client_id: '!secret mqtt_client_id'
version: 5
keepalive: 60
reject_unauthorized: true
include_device_information: false
frontend:
enabled: true
port: 8080
advanced:
last_seen: ISO_8601
Farklıysa sunucu adresini portalda broker'ınız için gösterilenle değiştirin. Yeniden başlatın ve bağlantıyı hem günlükte hem de Zigbee2MQTT başlar başlamaz home/zigbee2mqtt/bridge/state topic'inin görünmesi gereken portalın canlı topic gezgininde doğrulayın.
last_seen, her cihaz mesajına bir zaman damgası ekler; bu da verilere uzaktan bakarken sessizleşen bir sensörü fark etmeyi çok kolaylaştırır. Bir tüketici ihtiyaç duymadıkça include_device_information ayarını kapalı bırakın, çünkü her bir payload'a bir meta veri bloğu ekler.
Adım 3: Zigbee Cihazlarını Uzaktan Kontrol Edin
Zigbee2MQTT bir bulut broker üzerindeyken kimlik bilgilerine sahip her MQTT client'ı cihazlarınız üzerinde işlem yapabilir. Topic sözleşmesi yerel bir broker'dakiyle aynıdır:
| Amaç | Topic | Örnek payload |
|---|---|---|
| Cihaz durumu (Z2M tarafından yayınlanır) | home/zigbee2mqtt/<friendly_name> |
{"state":"ON","brightness":180} |
| Bir değer ayarlama | home/zigbee2mqtt/<friendly_name>/set |
{"state":"OFF"} |
| Güncel bir değer isteme | home/zigbee2mqtt/<friendly_name>/get |
{"state":""} |
| Köprü çevrimiçi/çevrimdışı | home/zigbee2mqtt/bridge/state |
{"state":"online"} |
| Cihaz listesi | home/zigbee2mqtt/bridge/devices |
JSON dizisi |
| Yeniden adlandırma, katılıma izin verme vb. | home/zigbee2mqtt/bridge/request/... |
JSON isteği |
bridge/state topic'i retained'dır ve Last Will olarak ayarlanmıştır; böylece uzaktaki bir pano "lamba kapalı" ile "Zigbee ağ geçidinin tamamı çevrimdışı" arasındaki farkı anlayabilir. Son cihaz durumuna sonsuza kadar güvenmek yerine arayüzünüzde bunu kullanın.
paho-mqtt 2.x kullanan minimal bir Python uzaktan kontrolcüsü şöyle görünür:
import json
import paho.mqtt.client as mqtt
BASE = "home/zigbee2mqtt"
def on_connect(client, userdata, flags, reason_code, properties):
print("connected:", reason_code)
client.subscribe(f"{BASE}/bridge/state")
client.subscribe(f"{BASE}/living_lamp")
client.publish(f"{BASE}/living_lamp/set", json.dumps({"state": "ON", "brightness": 120}))
def on_message(client, userdata, msg):
print(msg.topic, msg.payload.decode())
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID")
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 8883, keepalive=60)
client.loop_forever()
Bu betiğin kendi client ID'sine ihtiyaç duyduğuna dikkat edin. Onu Zigbee2MQTT ile aynı ID ile çalıştırmak, betik her bağlandığında ağ geçidinin bağlantısını koparır; çünkü bir broker client ID başına yalnızca bir oturuma izin verir. Her uygulamaya kendi kimlik bilgilerini verin.
Home Assistant ve Diğer Tüketiciler
Home Assistant'ın Zigbee cihazlarını keşfetmesini istiyorsanız Zigbee2MQTT'de homeassistant: enabled: true ayarını etkinleştirin ve Home Assistant'ın MQTT entegrasyonunu aynı broker'a ve kimlik bilgilerine yönlendirin. Home Assistant arayüzündeki TLS ayarları dahil adım adım sürüm, Home Assistant'ı harici bir MQTT broker ile kullanma rehberinde yer alır. Discovery mesajları retained'dır; bu nedenle Home Assistant, Zigbee2MQTT'den sonra başlasa bile bunlar ulaşır.
Diğer sistemler de aynı şekilde entegre olur: Node-RED, Telegraf veya küçük bir betik bir MQTT client'ı olarak bağlanır, home/zigbee2mqtt/# topic'ine abone olur ve kullandığınız depolamaya yazar. Broker'ın kendisi yalnızca mesajları yönlendirir; bu da mimariyi basit ve değiştirilebilir tutar.
Sorun Giderme Kontrol Listesi
Connection refused: Not authorized- kullanıcı adını ve parolayı, ayrıcaclient_iddeğerinin bu kimlik bilgileri için verilenle birebir eşleştiğini kontrol edin.- Ağ geçidi birkaç saniyede bir yeniden bağlanıyor - başka bir client aynı client ID'yi kullanıyordur. Betiklerinizi, Node-RED akışlarınızı ve eski konteynerleri tarayın.
self signed certificateveyaunable to verify- TLS trafiğini araya giren bir proxy'nin arkasındasınızdır ya da sistem saati yanlıştır. Her şeyden önce saati düzeltin (ağ zamanı olmayan bir Pi'da yaygındır).- Aboneye hiçbir şey ulaşmıyor -
base_topicdeğerinin her iki tarafta da aynı yazıldığını doğrulayın; MQTT topic'leri büyük/küçük harfe duyarlıdır. - Herkese açık broker'da
bridge/deviceseksik - mesaj muhtemelen herkese açık 64 KB sınırından büyüktür. Daha az cihazla test edin veya Free planın 256 KB'a izin verdiği özel bir broker'a geçin. - Bağlantı sınırına ulaşıldı - her Zigbee2MQTT örneği, pano ve betik bir bağlantı sayılır. Free plan 25'e kadar bağlantıya izin verir.
TLS, kimlik bilgileri ve topic tasarımının daha geniş bir incelemesi için MQTT güvenliği en iyi uygulamaları rehberine bakın.
Zigbee2MQTT için Barındırılan Broker Seçimi
Zigbee2MQTT bir broker'dan fazla bir şey beklemez: MQTT 3.1.1 veya 5, TLS, retained message'lar ve bir Last Will. Uzaktan erişimli bir kurulum için daha önemli olan, broker'ın erişilebilir, şifreli ve diğer kiracılardan yalıtılmış olmasıdır. ConnectMQ gibi yönetilen bir MQTT broker sertifikaları, kesintisiz çalışmayı ve yükseltmeleri üstlenir; böylece Raspberry Pi'nizin yalnızca Zigbee2MQTT'yi çalıştırması yeterli olur. Ücretsiz Serverless broker'lar QoS 0 ve 1 destekler; bu da Zigbee2MQTT'nin varsayılan QoS 0 yayınını hiçbir değişiklik gerektirmeden karşılar. Barındırma seçeneklerine daha geniş bir bakış için bulut MQTT broker rehberini okuyun; aynı broker üzerine kurulan daha fazla otomasyon projesi için IoT otomasyon rehberine göz atın.
Zigbee Ağınızı ConnectMQ'ya Taşıyın
app.connectmq.com adresinde ücretsiz bir Serverless broker oluşturun (kredi kartı gerekmez), üretilen kimlik bilgilerini secret.yaml dosyasına yapıştırın ve Zigbee2MQTT'yi yeniden başlattıktan sonraki bir dakika içinde Zigbee cihazlarınızın canlı topic gezgininde belirdiğini izleyin.
Sık Sorulan Sorular
Zigbee2MQTT bir bulut broker'a TLS ile bağlanabilir mi?
Evet. configuration.yaml dosyasının mqtt bölümünde server değerini mqtts://host:8883 olarak ayarlayın. Let's Encrypt gibi herkesçe güvenilen sertifikalar kullanan broker'lar için ek bir CA dosyası gerekmez.
Zigbee2MQTT için herkese açık bir broker kullanmak güvenli mi?
Yalnızca zararsız cihazlarla yapılan kısa testler için. Herkese açık bir broker'da herkes topic'leri okuyabilir ve onlara yayın yapabilir; bu nedenle bir kapı kilidi veya alarm asla bu şekilde bağlanmamalıdır. Gerçek her şey için özel kimlik bilgileri kullanın.
Hâlâ yerel bir Mosquitto broker'a ihtiyacım var mı?
Hayır. Zigbee2MQTT doğrudan bulut broker'a yayın yapabilir. Bazı kişiler internet kesintisi sırasında da çalışması gereken yalnızca yerel otomasyonlar için yerel bir broker tutar; bu da geçerli bir tasarım tercihidir.
Başka bir uygulama açtığımda Zigbee2MQTT ağ geçidim neden bağlantıyı kesiyor?
Diğer uygulama neredeyse kesinlikle aynı client ID'yi kullanıyordur. Bir broker client ID başına tek bir oturum tutar ve eski bağlantıyı düşürür; bu nedenle her client'a kendi ID'sini ve kimlik bilgilerini verin.



