openHAB MQTT binding, openHAB'yi herhangi bir MQTT broker'a iki katmanda bağlar: bağlantıyı tutan bir broker Thing (host, port, TLS ve kimlik bilgilerini içeren bir bridge) ve onun altında, kanalları tek tek topic'leri openHAB Item'larına eşleyen bir veya daha fazla Generic MQTT Thing. Binding'i kurun, broker'ı ekleyin, her değer için bir kanalı olan bir Thing oluşturun, Item'ları bağlayın; bu topic'lerdeki her mesaj Item'larınızı günceller, arayüzden veya kurallardan gelen komutlar da geri yayınlanır.
Bu eğitim hem arayüz hem de metin dosyası yapılandırmasını adım adım anlatıyor, JSON payload'ların nasıl ayrıştırılacağını ve her adımın komut satırından nasıl doğrulanacağını gösteriyor.
Ön koşullar
- MQTT Binding kurulu openHAB 4.x veya üstü (Settings → Add-on Store → Bindings → MQTT).
- Cihazlarınız JSON gönderiyorsa (çoğu gönderir) JSONPath Transformation eklentisi.
- Bir broker. openHAB broker içermez; Mosquitto'yu yerelde çalıştırın veya barındırılan bir broker kullanın. Örnekler 8883 portunda TLS ile
broker.connectmq.comvetestmqtt/openhab/...altındaki test topic'lerini kullanıyor.
Adım 1: broker bridge Thing'i
Arayüzde Settings → Things → + → MQTT Binding → MQTT Broker yolunu izleyin ve şunları doldurun:
| Parametre | Değer | Notlar |
|---|---|---|
| Broker Hostname/IP | broker.connectmq.com | mqtt:// öneki olmadan |
| Broker Port | 8883 | TLS olmadan 1883 |
| Secure Connection | açık | Portla eşleşmeli |
| Protocol | TCP | WebSockets de mevcut |
| MQTT Version | V5 | V3, 3.1.1 anlamına gelir |
| Client ID | openhab-home | Broker üzerinde benzersiz |
| Username / Password | broker kimlik bilgileriniz | |
| Keep Alive | 60 | Saniye |
Broker'ınız otomatik yenilenen genel bir sertifika kullanıyorsa sertifika ve public key pinning'i kapalı bırakın: pinning gördüğü ilk sertifikayı saklar ve broker sertifikayı değiştirdiğinde başarısız olur. TLS tarafında sorun gidermeniz gerekirse bkz. TLS bağlantısını test etme.
Broker Thing birkaç saniye içinde ONLINE olmalıdır. OFFLINE - COMMUNICATION_ERROR gösteriyorsa, durum ayrıntısında nedeni yazar; genellikle port/TLS uyumsuzluğu veya yanlış kimlik bilgileridir.
Ayrıca bir Last Will (lwtTopic, lwtMessage) ile birth ve shutdown mesajları yapılandırabilirsiniz; böylece diğer sistemler openHAB'nin bağlı olup olmadığını bilir. Bir dashboard veya Node-RED buna bağlıysa kullanışlıdır.
Adım 2: bir Generic MQTT Thing ve kanalları
Bir Generic MQTT Thing ekleyin, bridge olarak broker'ı seçin ve Channels sekmesinden kanal ekleyin. Her kanalın bir türü ve en azından bir state topic'i vardır:
| Kanal türü | Item türü | Tipik payload'lar |
|---|---|---|
Text value (string) | String | Herhangi bir metin |
Number value (number) | Number (birimli) | 21.5 |
Percentage value (dimmer) | Dimmer | 0–100 |
On/Off switch (switch) | Switch | ON/OFF (ayarlanabilir) |
Open/Close contact (contact) | Contact | OPEN/CLOSED |
Color value (color) | Color | r,g,b veya h,s,b |
Rollershutter (rollershutter) | Rollershutter | UP/DOWN/STOP, yüzde |
| Date/Time, Location, Image | DateTime, Location, Image | ISO tarih, lat,lon, ikili veri |
Trigger (trigger) | — (yalnızca kurallar) | Buton olayları |
Önemli kanal parametreleri:
- State Topic: openHAB buraya abone olur ve Item'ı günceller.
- Command Topic: Item bir komut aldığında openHAB buraya yayınlar. State topic'ten farklı bir topic kullanın (ör.
.../set); aksi halde kendi komutlarınız durum güncellemesi olarak geri gelir. - Incoming Value Transformations: örneğin
JSONPATH:$.temperature. - Outgoing Value Format: komutları JSON'a sarmak için
%sveya{"state":"%s"}gibi bir format dizesi. - Retained: komutları retained mesaj olarak yayınlar; açmadan önce retained mesajlar yazısını okuyun.
- Custom On/Open Value ve Custom Off/Closed Value:
1/0veyatrue/falsegibi cihaz payload'larını eşler. - Is Command (
postCommand): gelen değerleri durum güncellemesi yerine komut olarak ele alır; böylece diğer binding'leri ve kuralları tetiklerler.
Aynı yapılandırma metin dosyalarıyla
Sürüm kontrolü için broker'ı ve Thing'leri bir .things dosyasında tanımlayın:
Bridge mqtt:broker:connectmq "ConnectMQ broker" [
host="broker.connectmq.com", port=8883, secure=true,
certificatepin=false, publickeypin=false,
protocol="TCP", mqttVersion="V5",
clientID="openhab-home", username="username", password="password",
keepAlive=60, qos=1
] {
Thing topic livingroom "Living room" [
availabilityTopic="testmqtt/openhab/livingroom/status",
payloadAvailable="online", payloadNotAvailable="offline"
] {
Channels:
Type number : temperature "Temperature" [
stateTopic="testmqtt/openhab/livingroom/sensor",
transformationPattern="JSONPATH:$.temperature", unit="°C" ]
Type number : humidity "Humidity" [
stateTopic="testmqtt/openhab/livingroom/sensor",
transformationPattern="JSONPATH:$.humidity", unit="%" ]
Type switch : lamp "Lamp" [
stateTopic="testmqtt/openhab/livingroom/lamp/state",
commandTopic="testmqtt/openhab/livingroom/lamp/set",
on="ON", off="OFF" ]
Type trigger : button "Wall button" [
stateTopic="testmqtt/openhab/livingroom/button" ]
}
}Kanal UID'si mqtt:topic:connectmq:livingroom:<kanal> şeklindedir. Item'ları buna bağlayın:
Number:Temperature LivingRoom_Temperature "Temperature [%.1f %unit%]" { channel="mqtt:topic:connectmq:livingroom:temperature" }
Number:Dimensionless LivingRoom_Humidity "Humidity [%.0f %%]" { channel="mqtt:topic:connectmq:livingroom:humidity" }
Switch LivingRoom_Lamp "Lamp" { channel="mqtt:topic:connectmq:livingroom:lamp" }İki kanal tek bir state topic'i paylaşıyor ve farklı JSON alanlarını çıkarıyor; çoklu sensörlü cihazlar için olağan desen budur. availabilityTopic, cihazın Last Will mesajı tetiklendiğinde Thing'i OFFLINE olarak işaretler.
Kurallardan yayın yapma
Broker Thing, bildirimler veya Thing'i olmayan cihazlarla konuşmak için kullanışlı bir publishMQTT aksiyonu sunar:
rule "Publish lamp changes as an event"
when
Item LivingRoom_Lamp changed
then
val mqtt = getActions("mqtt", "mqtt:broker:connectmq")
mqtt.publishMQTT("testmqtt/openhab/events/lamp", newState.toString, false)
end
rule "Wall button pressed"
when
Channel "mqtt:topic:connectmq:livingroom:button" triggered
then
LivingRoom_Lamp.sendCommand(if (LivingRoom_Lamp.state == ON) OFF else ON)
endGenel dinleyiciler için broker Thing'in kendisine bir Publish trigger kanalı ekleyin: state topic'i wildcard kabul eder (testmqtt/openhab/+/event) ve kurallar olay olarak topic#payload alır.
Her adımı test edin
Gelen yön: sahte bir sensör ölçümü yayınlayın ve Item'ların değiştiğini izleyin:
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" \
-t 'testmqtt/openhab/livingroom/sensor' -m '{"temperature": 21.5, "humidity": 48}'
mosquitto_pub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" \
-t 'testmqtt/openhab/livingroom/status' -m online -revents.log (Linux paketlerinde /var/log/openhab/events.log) Item 'LivingRoom_Temperature' changed from NULL to 21.5 °C satırını göstermelidir.
Giden yön: command topic'e abone olun ve switch'i arayüzden veya openHAB konsolundan değiştirin:
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-u "$MQTT_USER" -P "$MQTT_PASS" -t 'testmqtt/openhab/#' -v
# başka bir shell'de: openhab-cli console, ardından
openhab> openhab:send LivingRoom_Lamp ONtestmqtt/openhab/livingroom/lamp/set ON görmelisiniz. Tarayıcıyı tercih ediyorsanız online MQTT istemcisi iki yön için de aynı şekilde çalışır.
openHAB'nin MQTT trafiğini tarayıcıda izleyin
Hiçbir şey olmuyorsa, konsolda log:set DEBUG org.openhab.binding.mqtt ve log:set DEBUG org.openhab.core.io.transport.mqtt ile log seviyesini yükseltin. Tipik bulgular: Item farklı bir kanal UID'sine bağlı, JSONPath eşleşmiyor (değer NULL kalır ve bir dönüşüm uyarısı loglanır) ya da topic bir karakter farklı; kontrol etmek için ikisini de topic matcher aracına yapıştırın.
Otomatik keşif: Homie ve Home Assistant
Binding iki keşif kuralını da anlar. Kendini Homie kuralıyla veya Home Assistant MQTT discovery ile duyuran cihazlar (Tasmota, ESPHome, discovery açık Zigbee2MQTT) openHAB Inbox'ında kanalları hazır olarak görünür. Bu yazma işini azaltır; ancak topic adları üzerinde tam kontrol istediğinizde özel firmware'ler ve Shelly veya Zigbee2MQTT gibi cihazlar için Generic Thing'ler en öngörülebilir seçenek olmaya devam eder. Hangisini seçerseniz seçin, tutarlı bir akıllı ev topic tasarımı kanal yapılandırmasını kısa tutar.
İki katman yerine oturduğunda openHAB MQTT binding basittir: bağlantı başına bir broker Thing, değer başına bir kanalı olan Generic MQTT Thing'ler ve kanallara bağlı Item'lar. Tek bir kanalla başlayın, mosquitto_pub ve events.log ile doğrulayın, ardından evin geri kalanını ekleyin.
Sıkça sorulan sorular
openHAB bir MQTT broker içeriyor mu?
Hayır. Güncel openHAB sürümleri yalnızca bir istemci olan MQTT binding'i içerir. Aynı makinede Mosquitto gibi ayrı bir broker'a veya ağ üzerinden erişilebilen yönetilen bir broker'a ihtiyacınız var.
openHAB MQTT broker Thing'im neden OFFLINE?
Durum ayrıntısı genellikle nedenini söyler: yanlış host veya port, şifresiz bir portta TLS açık olması (ya da tersi), hatalı kimlik bilgileri veya zaten kullanılan bir client ID. Kesin hatayı görmek için org.openhab.binding.mqtt ve org.openhab.core.io.transport.mqtt için DEBUG log'u açın.
openHAB'de bir JSON payload'dan tek bir değeri nasıl okurum?
JSONPath Transformation eklentisini kurun ve kanalın gelen dönüşümünü JSONPATH:$.temperature (veya ihtiyacınız olan yol) olarak ayarlayın. Birden fazla kanal aynı state topic'i paylaşıp her biri farklı bir alanı çıkarabilir.



