Homebridge MQTT entegrasyonu, HomeKit'in kendisi MQTT hakkında hiçbir şey bilmese de kendi yaptığınız sensörleri, röleleri ve lambaları Apple Home uygulamasından ve Siri'den kontrol etmenizi sağlar. Bu eğitimde mqttthing eklentisini kuracak, bir sıcaklık sensörü, bir anahtar, kısılabilir bir lamba ve bir kontak sensörü için topic'leri HomeKit karakteristiklerine eşleyecek, JSON payload'larını işleyecek ve kurulumu özel bir TLS broker'ına taşıyacaksınız.
Homebridge MQTT ile Nasıl Konuşur?
Homebridge, HomeKit aksesuarlarını taklit eden bir Node.js sunucusudur. Asıl cihaz mantığını eklentiler sağlar. En yaygın kullanılan MQTT eklentisi olan homebridge-mqttthing, bir aksesuarı JSON ile tanımlamanıza ve her HomeKit karakteristiğini bir MQTT topic'ine eşlemenize olanak tanır: Homebridge'in mevcut değer için abone olduğu bir get topic'i ve bir kutucuğa dokunduğunuzda veya Siri'ye sorduğunuzda yayın yaptığı bir set topic'i.
Apple Home / Siri
|
(HomeKit, LAN)
|
Homebridge -- homebridge-mqttthing
|
(MQTT over TLS)
|
MQTT broker <--> ESP32, Tasmota, Zigbee2MQTT, scripts
Cihazlar yalnızca broker ile konuştuğundan başka bir ağda veya başka bir konumda bulunabilirler. Homebridge'in yalnızca broker'a dışa doğru erişime ihtiyacı vardır. Önce bu kalıbın arka planını öğrenmek isterseniz, bir MQTT broker'ının ne yaptığı hakkındaki yazı publish ve subscribe kavramlarını sade bir dille açıklar.
mqttthing Eklentisini Kurma
Homebridge UI kullanıyorsanız (resmi imajlarda varsayılan), Plugins bölümünü açın, mqttthing arayın ve Homebridge Mqttthing eklentisini kurun. Bir Homebridge sunucusunda komut satırından:
sudo npm install -g homebridge-mqttthing
sudo hb-service restart
Aksesuarlar config.json içindeki accessories dizisinde tanımlanır. UI, eklenti için form tabanlı bir düzenleyici içerir, ancak öğrenmek için ham JSON daha anlaşılırdır; bu yüzden aşağıdaki örnekler onu kullanıyor. Bunları Config > JSON Config bölümüne yapıştırabilirsiniz.
İlk Homebridge MQTT Aksesuarı: Sıcaklık Sensörü
Her şeyin gerçekleşmesini izleyebilmek için herkese açık test broker'ıyla başlayın. Paylaşılan herkese açık alanda topic'lerinizi ayrı tutmak için rastgele bir dize seçin (burada h3m8x2).
{
"accessory": "mqttthing",
"type": "temperatureSensor",
"name": "Greenhouse Temperature",
"url": "mqtt://broker.connectmq.com:1883",
"mqttOptions": { "clientId": "hb-gh-temp-h3m8x2" },
"topics": {
"getCurrentTemperature": "connectmq/demo/h3m8x2/greenhouse/temperature"
},
"logMqtt": true
}
Kaydedin, Homebridge'i yeniden başlatın ve ardından bir okuma yayınlayın:
mosquitto_pub -h broker.connectmq.com -p 1883 -i sim-h3m8x2 \
-t 'connectmq/demo/h3m8x2/greenhouse/temperature' -m '23.5' -r
Apple Home'daki kutucuk bir saniye içinde güncellenir. -r bayrağı mesajı retained yapar; böylece Homebridge yeniden başlatıldıktan sonra kutucuk bir sonraki okumaya kadar "No Response" göstermek yerine son değeri hemen alır.
Komutlu Anahtarlar ve Lambalar
Kontrol edilebilir aksesuarlar hem bir get hem de bir set topic'ine ihtiyaç duyar. Komutlar ve onaylanmış durum için ayrı topic'ler kullanmak iyi bir uygulamadır: Homebridge isteği yayınlar, cihaz uygular ve cihaz gerçek durumunu geri yayınlar.
{
"accessory": "mqttthing",
"type": "switch",
"name": "Vent Fan",
"url": "mqtt://broker.connectmq.com:1883",
"mqttOptions": { "clientId": "hb-fan-h3m8x2" },
"topics": {
"getOn": "connectmq/demo/h3m8x2/greenhouse/fan/state",
"setOn": "connectmq/demo/h3m8x2/greenhouse/fan/set"
},
"onValue": "ON",
"offValue": "OFF"
}
Kısılabilir bir lamba, bir parlaklık karakteristiği ekler:
{
"accessory": "mqttthing",
"type": "lightbulb",
"name": "Grow Light",
"url": "mqtt://broker.connectmq.com:1883",
"mqttOptions": { "clientId": "hb-light-h3m8x2" },
"topics": {
"getOn": "connectmq/demo/h3m8x2/greenhouse/light/state",
"setOn": "connectmq/demo/h3m8x2/greenhouse/light/set",
"getBrightness": "connectmq/demo/h3m8x2/greenhouse/light/brightness",
"setBrightness": "connectmq/demo/h3m8x2/greenhouse/light/brightness/set"
},
"onValue": "ON",
"offValue": "OFF"
}
Kutucuklara dokunurken Homebridge'in ne gönderdiğini izleyin:
mosquitto_sub -h broker.connectmq.com -p 1883 -i mon-h3m8x2 \
-t 'connectmq/demo/h3m8x2/greenhouse/#' -v
JSON Payload'larını İşleme
Birçok cihaz, değer başına bir topic yerine birden fazla değer içeren tek bir JSON belgesi yayınlar. mqttthing, apply fonksiyonu içeren bir topic nesnesini kabul eder; bu, message alan ve kullanılacak değeri döndüren kısa bir JavaScript gövdesidir.
{
"accessory": "mqttthing",
"type": "contactSensor",
"name": "Greenhouse Door",
"url": "mqtt://broker.connectmq.com:1883",
"mqttOptions": { "clientId": "hb-door-h3m8x2" },
"topics": {
"getContactSensorState": {
"topic": "connectmq/demo/h3m8x2/greenhouse/telemetry",
"apply": "return JSON.parse(message).door === 'open' ? 1 : 0;"
}
}
}
HomeKit'in kontak sensörü algılandı (kapalı) için 0, algılanmadı (açık) için 1 kullanır; fonksiyonun open değerini 1'e eşlemesinin nedeni budur. Aynı teknik, bir komutu JSON'a sarmak için set topic'lerinde de çalışır; örneğin "apply": "return JSON.stringify({state: message});".
Yaygın Cihaz Türlerini Eşleme
HomeKit türü (type) |
Temel topic'ler | Tipik payload |
|---|---|---|
temperatureSensor |
getCurrentTemperature |
23.5 |
humiditySensor |
getCurrentRelativeHumidity |
64 |
switch / outlet |
getOn, setOn |
onValue ve offValue ile ON / OFF |
lightbulb |
getOn, setOn, getBrightness, setBrightness |
ON, 0-100 |
contactSensor |
getContactSensorState |
0 kapalı, 1 açık |
motionSensor |
getMotionDetected |
true / false |
leakSensor |
getLeakDetected |
0 / 1 |
Eklenti garaj kapıları, termostatlar, fanlar ve panjurlar dahil çok daha fazla türü destekler. Her birinin kendi karakteristik adları vardır; eklentinin README dosyası hepsini listeler.
Bağlantı Sayısı ve Client ID'ler
Her mqttthing aksesuarı kendi MQTT bağlantısını açar. Dolayısıyla on aksesuar, broker üzerinde her biri benzersiz bir client ID gerektiren on istemci demektir. Bunun iki sonucu vardır:
- Her aksesuara
mqttOptionsiçinde kendiclientIddeğerini verin. Yinelenen ID'ler broker'ın önceki oturumu kesmesine neden olur ve aksesuarlar yanıt veren ile vermeyen arasında gidip gelir. - Bağlantıları planınıza göre sayın. ConnectMQ'nun ücretsiz Serverless planı 25 eşzamanlı bağlantıya kadar izin verir; bu da Homebridge ve makul sayıda cihazı karşılar. Daha büyük kurulumlar 1.000 bağlantıya kadar sunan ücretli Serverless planına sığar.
Tek bir bağlantı üzerinde çok sayıda aksesuara ihtiyacınız varsa, broker bağlantısını Home Assistant veya Node-RED'in yönetmesine ve HomeKit'i onların kendi HomeKit köprüleri üzerinden sunmasına izin vermeyi düşünün.
Üretim: TLS ve Kimlik Bilgileri
Herkese açık test alanındaki her şey, topic'i tahmin eden herkes tarafından okunabilir ve biri set topic'lerinize de yayın yapabilir. Gerçek ekipmanı kontrol etmeden önce özel bir broker oluşturun ve her aksesuarı TLS'ye geçirin:
{
"accessory": "mqttthing",
"type": "switch",
"name": "Vent Fan",
"url": "mqtts://broker.connectmq.com:8883",
"username": "YOUR_USERNAME",
"password": "YOUR_PASSWORD",
"mqttOptions": { "clientId": "YOUR_CLIENT_ID" },
"topics": {
"getOn": "site1/greenhouse/fan/state",
"setOn": "site1/greenhouse/fan/set"
},
"onValue": "ON",
"offValue": "OFF"
}
Node.js, ConnectMQ'nun kullandığı Let's Encrypt zincirine kutudan çıktığı haliyle güvenir; bu nedenle CA dosyası gerekmez. ConnectMQ'da client ID'ler portalda verilen kimlik bilgilerine bağlıdır; bu yüzden birden fazla bağlantıya ihtiyacınız olduğunda her aksesuar grubu için bir kimlik bilgisi seti tanımlayın ve hangi ID'nin nereye ait olduğunu takip edin.
mqttthing'i Child Bridge Olarak Çalıştırma
Homebridge bir eklentiyi child bridge olarak çalıştırabilir: kendi HomeKit eşleştirmesine sahip ayrı bir süreç. Bunu mqttthing için etkinleştirmenin (eklenti ayarlarında, Bridge Settings) iki pratik faydası vardır. Bir çökme veya hatalı bir aksesuar tanımı artık diğer tüm eklentileri çökertmez ve topic'leri düzenledikten sonra child bridge'i yeniden başlatmak tüm Homebridge'i yeniden başlatmaktan daha hızlıdır. Child bridge'i Home uygulamasında bir kez eşleştirirsiniz; ona daha sonra eklenen aksesuarlar otomatik olarak görünür.
Her cihazdan offline last will ile retained bir erişilebilirlik topic'i yayınlamak da faydalıdır. mqttthing bunu onlineValue ve offlineValue ile birlikte getOnline topic'i üzerinden kullanabilir; böylece Apple Home, eski bir değer göstermek yerine cihaz gerçekten çevrimdışıyken onu yanıt vermiyor olarak gösterir.
Homebridge MQTT Sorun Giderme
- Aksesuar No Response gösteriyor. Homebridge başladığından beri
gettopic'ine hiç değer gelmemiş. Cihazlardan retained durum yayınlayın veyalogMqtt: trueile topic'te yazım hatası olup olmadığını kontrol edin. - Kutucuk kendiliğinden geri dönüyor. Cihaz yeni durumunu
gettopic'inde yayınlamıyor ya daonValueile eşleşmeyen bir değer yayınlıyor. - Günlükte sürekli yeniden bağlanma mesajları. Yinelenen client ID'ler veya yanlış kimlik bilgileri. Homebridge günlüğünde
Connection refusedifadesini ve nedenini arayın. - Siri cihazın yanıt vermediğini söylüyor ama uygulama çalışıyor. Genellikle MQTT değil, bir HomeKit ev merkezi (Apple TV veya HomePod) sorunudur; merkezin LAN üzerinden Homebridge'e ulaşabildiğini kontrol edin.
Sonraki Adımlar
Homebridge size Apple tarafını sağlar; cihazların yine de mantıklı topic'ler yayınlaması gerekir. ESPHome MQTT rehberi durum yayınlayan ve komut kabul eden sensörlerin nasıl yapılacağını gösterir, akıllı ev MQTT topic yapısı yazısı ise yönetilebilir kalan topic'ler tasarlamanıza yardımcı olur. Home Assistant, Homebridge ile yan yana çalışıyorsa harici MQTT broker ile Home Assistant yazısına bakın. Cihazları ve mantığı birleştirmenin daha geniş bağlamı için IoT otomasyon rehberini okuyun; uzaktan erişim için barındırılan bir MQTT broker'ının neden Homebridge Pi'sindeki bir broker'dan daha iyi olduğunu anlamak için oradaki seçenekleri karşılaştırın.
Homebridge'i ConnectMQ'ya Bağlayın
ConnectMQ, Homebridge'e her ağdan erişilebilen özel ve TLS ile korunan bir broker ile aksesuarlarınızı yapılandırırken hata ayıklayabileceğiniz canlı bir topic gezgini sunar. app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun ve üretilen kimlik bilgilerini mqttthing aksesuarlarınıza yapıştırın.
Sık Sorulan Sorular
HomeKit MQTT'yi yerel olarak destekler mi?
Hayır. HomeKit kendi aksesuar protokolünü kullanır; bu nedenle ikisi arasında çeviri yapmak için MQTT eklentili Homebridge gibi bir köprüye ihtiyacınız vardır.
Evden uzaktayken Homebridge MQTT cihazlarını kontrol edebilir miyim?
Evet, her zamanki gibi bir HomeKit ev merkezi aracılığıyla. Cihazlar bir bulut broker'ıyla konuştuğu için Homebridge'den farklı bir konumda bile olabilirler.
Sensörlerim yeniden başlatmadan sonra neden No Response gösteriyor?
Homebridge henüz bir değer almamıştır. Durum mesajlarını retain bayrağıyla yayınlayın; böylece broker, Homebridge abone olur olmaz son değeri iletir.
mqttthing tek Homebridge MQTT eklentisi mi?
Hayır, ama en genel amaçlı olanıdır. Diğer eklentiler Zigbee2MQTT veya Tasmota gibi belirli ekosistemleri hedefler ve yalnızca o cihazları kullanıyorsanız daha basit olabilir.



