IoT Otomasyon

Homebridge MQTT: MQTT Cihazlarını Apple Home'a Taşımak

Homebridge ve mqttthing eklentisiyle MQTT sensörlerini, anahtarlarını ve lambalarını HomeKit aksesuarı olarak sunun; JSON payload'ları, TLS kimlik bilgileri ve mantıklı bir topic düzeniyle.

Bulut broker topic'lerini iPhone'da Apple Home aksesuarlarına dönüştüren Homebridge MQTT köprüsü
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

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:

  1. Her aksesuara mqttOptions içinde kendi clientId değerini verin. Yinelenen ID'ler broker'ın önceki oturumu kesmesine neden olur ve aksesuarlar yanıt veren ile vermeyen arasında gidip gelir.
  2. 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 get topic'ine hiç değer gelmemiş. Cihazlardan retained durum yayınlayın veya logMqtt: true ile topic'te yazım hatası olup olmadığını kontrol edin.
  • Kutucuk kendiliğinden geri dönüyor. Cihaz yeni durumunu get topic'inde yayınlamıyor ya da onValue ile 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 refused ifadesini 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.

İlgili yazılar

Zigbee2MQTT Kurulum Rehberi: Koordinatörden Panoya

Zigbee2MQTT'yi Docker ile kurun, koordinatörü ve MQTT bağlantısını yapılandırın, cihazları eşleştirip yeniden adlandırın, onları MQTT üzerinden kontrol edin ve durumlarını bir panoda görüntüleyin; önce ücretsiz herkese açık bir broker'da test edin.

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