n8n, MQTT ile iki core node üzerinden konuşur: topic'lere abone olup gelen her mesaj için bir workflow başlatan MQTT Trigger ve workflow'un herhangi bir adımından mesaj publish eden MQTT node'u. Broker'ınızın host, port ve giriş bilgileriyle bir MQTT credential'ı ekleyin, bir trigger yerleştirin, workflow'u aktif edin; artık her sensör ölçümü Slack'e, e-postaya, bir veritabanına, bir HTTP API'ye veya tekrar bir cihaza gidebilir.
Bu eğitim iki gerçek workflow kuruyor — bir sıcaklık alarmı ve webhook'tan cihaza bir komut — ve her adımı ikinci bir MQTT istemcisiyle nasıl test edeceğinizi gösteriyor.
n8n bir MQTT sistemine nasıl oturur
n8n bir workflow otomasyon aracıdır, broker değildir. Broker'ınıza sıradan bir MQTT istemcisi olarak bağlanır:
| Rol | n8n parçası | MQTT eylemi |
|---|---|---|
| Cihaz verisine tepki vermek | MQTT Trigger node'u | Bir veya daha fazla topic filtresine SUBSCRIBE |
| Komut veya türetilmiş veri göndermek | MQTT node'u | Bir topic'e PUBLISH |
| Yapıştırıcı | Diğer tüm node'lar (IF, Switch, HTTP Request, Code, Slack…) | — |
Yani MQTT istemcileri hakkında bildiğiniz her şey geçerlidir: her trigger benzersiz bir client ID'ye ihtiyaç duyar, QoS abonelik başına belirlenir ve n8n'in neyi okuyup yazabileceğine broker'ın ACL'leri karar verir. Node-RED kullanıyorsanız model benzerdir; karşılaştırma için Node-RED ve MQTT yazısına bakın. n8n'in gücü, MQTT node'larının yanında duran uzun SaaS entegrasyonu listesidir.
n8n'i yerelde çalıştırın
Denemenin en hızlı yolu resmi Docker imajıdır:
docker volume create n8n_data
docker run -it --rm --name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8nhttp://localhost:5678 adresini açın, owner hesabını oluşturun ve yeni bir workflow başlatın. n8n Cloud da aynı şekilde çalışır; tek fark, broker'ın internetten erişilebilir olması gerektiğidir, çünkü MQTT bağlantısını dizüstü bilgisayarınız değil n8n'in sunucuları açar.
MQTT credential'ını oluşturun
Herhangi bir MQTT node'u ekleyin, Credential to connect with alanını açın ve Create new credential seçin. MQTT credential'ında şu önemli alanlar vardır:
| Alan | TCP testi için değer | TLS için değer |
|---|---|---|
| Protocol | mqtt | mqtts |
| Host | broker.connectmq.com | broker.connectmq.com |
| Port | 1883 | 8883 |
| Username / Password | broker'ınızın kimlik bilgileri | broker'ınızın kimlik bilgileri |
| Client ID | boş bırakın veya benzersiz bir değer verin | aynı |
| Clean Session | açık | açık |
Hızlı bir testin ötesindeki her şey için TLS (8883 üzerinde mqtts) kullanın: credential bir kez kaydedilir ve tüm node'lar tarafından yeniden kullanılır, dolayısıyla parolaları düz metin göndermek için hiçbir neden yoktur. n8n kaydederken bağlantıyı test eder; başarısız olursa hata metni genellikle broker'ın CONNACK reason code'udur. Bunu MQTT reason code aracında arayın.
Workflow 1: sıcaklık alarmı
İlk workflow sensör ölçümlerini dinler ve bir değer eşiği aştığında mesaj gönderir.
Adım 1 — MQTT Trigger. Topics alanını testmqtt/n8n/+/temperature yapın. Alan virgülle ayrılmış bir liste kabul eder ve + ile # wildcard'ları her zamanki gibi çalışır (filtrelerinizi topic matcher ile kontrol edin). Options altında payload'ın bir nesneye dönüşmesi için JSON Parse Body seçeneğini, sonraki adımlarda topic'e ihtiyacınız yoksa Only Message seçeneğini açın. Tek bir workflow birçok cihazı yönetiyorsa topic'i koruyun.
Seçenekler gösterildiği gibiyken bir mesaj şöyle bir item olarak gelir:
{
"topic": "testmqtt/n8n/greenhouse-1/temperature",
"message": { "value": 31.4, "unit": "C", "ts": 1760700000 }
}Adım 2 — IF node'u. Bir koşul ekleyin: {{ $json.message.value }} sayısı 30'dan büyük.
Adım 3 — Bildirim. true dalına bir Slack, Telegram, Discord veya Send Email node'u ekleyin. İşe yarar bir mesaj metni:
🌡 {{ $json.topic.split('/')[2] }} şu an {{ $json.message.value }} °{{ $json.message.unit }}split('/')[2] cihaz ID'sini topic'ten çeker; tutarlı bir yapının işe yaramasının nedeni budur. Bkz. topic tasarımı en iyi uygulamaları.
Aktif etmeden önce test edin
Execute workflow'a (veya trigger üzerindeki Listen for test event'e) tıklayın. Trigger artık bir mesaj bekler. Terminalden ya da online MQTT istemcisinden bir ölçüm publish edin:
mosquitto_pub -h broker.connectmq.com -p 1883 \
-t testmqtt/n8n/greenhouse-1/temperature \
-m '{"value": 31.4, "unit": "C", "ts": 1760700000}'Workflow bir kez çalışır ve her node'daki veriyi inceleyebilirsiniz. false dalının sessiz kaldığını doğrulamak için "value": 22 içeren ikinci bir mesaj publish edin.
Workflow 2: webhook'tan cihaz komutuna
Ters yön de en az o kadar yaygındır: MQTT dünyasının dışındaki bir şey (bir form, bir takvim, bir CRM olayı, başka bir API) bir cihazı açıp kapatmalıdır.
- Webhook node'u, metot
POST, pathlamp. Test URL'sihttp://localhost:5678/webhook-test/lampgibi görünür. - Paylaşılan bir gizli anahtar header'ını kontrol eden bir IF node'u; örneğin
{{ $json.headers['x-api-key'] }}değerinin n8n'de sakladığınız değere eşit olması. İnternetteki herkesin cihazlarınıza publish etmesine izin vermeyin. - Topic değeri
testmqtt/n8n/lamp-1/setolan bir MQTT node'u. Send Input Data'yı kapatın ve Message'ı{{ $json.body.state }}yapın. Seçeneklerde QoS 1 seçin, anlık komutlar için Retain'i kapalı bırakın.
Send Input Data açıkken n8n giriş item'ının tamamını JSON olarak publish eder; iletmek için pratiktir ama ON veya OFF bekleyen bir cihaz için genellikle fazladır.
Komut topic'ini bir terminalde izleyin, webhook'u diğerinde çağırın:
mosquitto_sub -h broker.connectmq.com -p 1883 -t 'testmqtt/n8n/+/set' -vcurl -X POST http://localhost:5678/webhook-test/lamp \
-H 'Content-Type: application/json' \
-H 'x-api-key: change-me' \
-d '{"state": "ON"}'Terminal 1, testmqtt/n8n/lamp-1/set ON yazdırmalıdır. Ters desen için — HTTP endpoint çağıran MQTT mesajları — MQTT'den webhook'a yazısına bakın.
Workflow'u aktif edin
Test çalıştırmaları yalnızca editör dinlerken çalışır. Mesajları kalıcı olarak işlemek için workflow'u kaydedin ve aktif edin (yayınlayın). Bundan sonra n8n aboneliği arka planda açık tutar ve her mesaj, execution listesinde inceleyebileceğiniz bir execution oluşturur.
Trafik gerçek olduğunda iki ayar önem kazanır:
- Execution hacmi. Her mesaj bir execution'dır. Saniyede bir publish eden bir sensör günde 86.400 execution oluşturur; bu da geçmişi doldurur ve CPU harcar. Edge'de toplulaştırın, daha seyrek publish edin veya ham telemetri yerine bir "olaylar" topic'ine abone olun.
- Sıralama. Trigger mesajları varsayılan olarak paralel işler. Sıra önemliyse (aynı cihazın durum değişiklikleri), mesajların birbiri ardına işlenmesi için trigger seçeneklerinde paralel işlemeyi kapatın.
Teslim garantileri ve yeniden başlatmalar
n8n bir istemcidir; dolayısıyla teslim garantileri, broker'ın o abonelik için verdiği garantilerdir:
- n8n yeniden başlarken publish edilen QoS 0 mesajları kaybolur.
- Kalıcı bir session ile QoS 1 (Clean Session kapalı ve sabit bir client ID), n8n kapalıyken broker'ın mesajları kuyruğa almasını ve yeniden bağlanınca teslim etmesini sağlar. Bu yalnızca session tutan bir broker'da çalışır; paylaşımlı test endpoint'i
broker.connectmq.comoffline session saklamaz, bu yüzden bunu kendi özel broker instance'ınızda deneyin. - Retained mesajlar, trigger abone olur olmaz teslim edilir; yani aktif edilen bir workflow, eşleşen her retained topic için bir kez tetiklenebilir. Durum topic'lerinde genellikle istenen budur, alarm topic'lerinde ise sürprizdir; bkz. retained mesajlar.
n8n'i birden fazla worker ile queue mode'da çalıştırıyorsanız trigger'lar yine ana instance'ta yaşar. Aynı aktif MQTT workflow'uyla birden fazla ana instance başlatmayın; aksi halde her mesaj birkaç kez işlenir.
Sorun giderme kontrol listesi
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Credential testi "Not authorized" ile başarısız | Kullanıcı adı/parola yanlış veya kullanıcının CONNECT yetkisi yok | Girişi önce mosquitto_pub/mosquitto_sub ile doğrulayın |
| Trigger bağlanıyor ama hiç tetiklenmiyor | Topic filtresi eşleşmiyor veya ACL aboneliği reddediyor | Online istemciden tam topic'e publish edin; ACL'leri kontrol edin |
İfadeler undefined döndürüyor | JSON Parse Body kapalı, payload string | Seçeneği açın veya bir Code node'unda parse edin |
| Workflow her mesajda iki kez tetikleniyor | İki aktif workflow veya iki n8n instance'ı abone | Kopyaları devre dışı bırakın; tek ana instance kullanın |
| n8n Cloud bağlanamıyor | Broker yalnızca LAN'ınızdan erişilebilir | Public endpoint'i ve TLS'i olan bir broker kullanın |
n8n topic'lerinizi tarayıcıda izleyin
n8n, bir servis yazmadan MQTT mesajlarını workflow'lara dönüştürür: bir trigger, birkaç node ve bir MQTT publish, alarm ve komut senaryolarının çoğunu karşılar. Her workflow'u aktif etmeden önce ikinci bir istemciyle test edin, n8n'e kısıtlı kendi broker kullanıcısını verin ve execution sayısı makul kalsın diye yüksek frekanslı telemetriyi workflow'ların dışında tutun.
Sıkça sorulan sorular
n8n'de yerleşik bir MQTT node'u var mı?
Evet. n8n iki core node ile gelir: bir veya daha fazla topic'e abone olup her mesajda bir workflow başlatan MQTT Trigger ve workflow içinden mesaj publish eden MQTT node'u. İkisi de aynı MQTT credential'ını kullanır.
n8n MQTT Trigger'ım neden sadece test ederken tetikleniyor?
Editördeki 'Listen for test event' yalnızca editör açıkken çalışır. Mesajları kalıcı olarak işlemek için workflow'u aktif etmeniz (yayınlamanız) gerekir. Yalnızca aktif bir workflow MQTT aboneliğini arka planda açık tutar.
n8n JSON MQTT payload'larını otomatik parse edebilir mi?
Evet. MQTT Trigger'da 'JSON Parse Body' seçeneğini açın; message alanı bir nesneye dönüşür ve {{ $json.message.temperature }} gibi ifadeler çalışır. Bu seçenek kapalıyken payload string olarak gelir.



