IoT otomasyonu, boş bir ofiste ışıkları kapatmaktan toprak kuruduğunda bir sulama vanasını açmaya kadar, fiziksel bir mekândaki rutin kararları sensörlere, kurallara ve aktüatörlere bırakmak demektir. Bu rehber size evler, binalar, tarım ve enerji sistemleri için işe yarayan tek bir mimari sunar, MQTT üzerinden çalışan Home Assistant ve Python otomasyonlarını gösterir ve sistemin tamamını nasıl güvenilir ve güvenli tutacağınızı açıklar.
IoT Otomasyonu Nedir ve MQTT Neden Merkezdedir?
Ne kadar karmaşık olursa olsun her otomasyon aynı döngüyü izler: algıla, karar ver, uygula, doğrula. Bir sensör bir şeyi ölçer, bir kural aksiyon gerekip gerekmediğine karar verir, bir aktüatör işi yapar ve bir durum raporu işin gerçekleştiğini doğrular.
Geleneksel otomasyon sistemleri bu döngüyü tek bir tedarikçinin kontrolcüsü içinde kurardı. Bu, bir Zigbee hareket sensörünün bir Wi-Fi rölesini kontrol etmesini ya da bir güneş inverterinin çıkışının bir su ısıtıcısının ne zaman çalışacağına karar vermesini isteyene kadar işe yarar. IoT otomasyonu döngüyü ortak bir mesajlaşma katmanı üzerinden konuşan bağımsız parçalara ayırır ve bu katman neredeyse her zaman MQTT'dir.
MQTT'nin uygun olmasının nedenleri:
- Publish/subscribe cihazları mantıktan ayırır. Bir sensör bir kez yayın yapar; istenen sayıda kural, dashboard ve kayıtçı abone olabilir.
- ESP32 ve ESP8266 gibi mikrodenetleyiciler için yeterince hafiftir ve Tasmota, ESPHome, Zigbee2MQTT, Shelly cihazları ve Home Assistant tarafından yerel olarak desteklenir.
- Retained message'lar, yeniden başlayan bir kural motorunun her cihazın güncel durumunu hemen bilmesini sağlar.
- Last Will mesajları bir cihazın çevrimdışı olduğunu duyurur; böylece otomasyonlar güvenli tarafta kalacak şekilde davranabilir.
Broker sizin için yeniyse önce bir MQTT broker'ın ne yaptığını okuyun, sonra buraya dönün.
Dört Katmanlı IoT Otomasyon Mimarisi
Bir daireyi, 20 katlı bir ofis binasını veya bir serayı otomatikleştiriyor olun, aynı yapı geçerlidir.
| Katman | Rol | Yaygın araçlar |
|---|---|---|
| Cihazlar | Algılama ve uygulama: sensörler, röleler, vanalar, sayaçlar, termostatlar | ESPHome'lu ESP32, Tasmota, Shelly, Zigbee2MQTT ile Zigbee, LoRaWAN node'ları |
| Mesajlaşma | Her şey arasında durum ve komut taşır | Yerel veya bulutta MQTT broker |
| Mantık | Ne yapılacağına karar verir: kurallar, zamanlamalar, senaryolar | Home Assistant, Node-RED, openHAB, Python servisleri |
| Arayüz | Durumu gösterir, insanların müdahale etmesine izin verir | Dashboard'lar, mobil uygulamalar, sesli asistanlar |
Bu katmanları ayrı tutmak sistemi sürdürülebilir kılan şeydir. Topic'ler aynı kaldığı sürece bir Zigbee sensörünü Wi-Fi sensörüyle değiştirebilir veya kuralları Home Assistant'tan Node-RED'e taşıyabilirsiniz; geri kalanını yeniden bağlamanız gerekmez.
Yerel broker mı, bulut broker mı, yoksa ikisi birden mi?
Yerel bir Raspberry Pi üzerindeki broker, internet kesildiğinde otomasyonların çalışmaya devam etmesini sağlar; bu, aydınlatma ve ısıtma için önemlidir. Bulut broker ise cihazlara her yerden erişilebilmesini sağlar, aynı ağda olmayan sahaları (birkaç tarlası olan bir çiftlik, birkaç binası olan bir şirket) birbirine bağlar ve bir broker'ı kendiniz yamalama ve yedekleme işini ortadan kaldırır. Birçok kurulum ikisini birleştirir: zamana duyarlı kurallar yerelde çalışır; izleme, uzaktan kontrol ve çok sahalı koordinasyon ise bir bulut MQTT broker üzerinden yürür. Harici bir MQTT broker ile Home Assistant eğitimi bu kurulumu adım adım anlatır.
Otomasyon İçin Topic Tasarımı
Net topic adları kuralları okunabilir kılar ve cihazlar arasında yanlışlıkla oluşan karışmaları önler. Pratik bir düzen:
<site>/<area>/<device>/<channel>
<site>/<area>/<device>/<channel>/set (commands)
home/livingroom/thermostat/temperature
home/livingroom/thermostat/setpoint/set
office/floor3/zone-b/occupancy
farm/greenhouse1/soil/moisture
farm/greenhouse1/valve/state
energy/house/solar/power
Saatlerce hata ayıklamadan kurtaran pratik kurallar:
- Durum topic'lerini (cihazın bildirdiği) komut topic'lerinden (ondan yapmasını istediğiniz) genellikle bir
/setson ekiyle ayırın. - Dashboard'ların ve kural motorlarının yeniden başlatmadan sonra hemen görmesi için durumu retained olarak yayımlayın.
- Bir cihaz birden fazla değer bildirdiğinde birimler ve zaman damgalarıyla JSON payload'lar kullanın.
- Her cihaza Last Will değeri
offlineolan birstatustopic'i verin.
Akıllı ev MQTT topic yapısı rehberi, grupların ve senaryoların nasıl ele alınacağı dahil daha derine iner.
Ortama Göre IoT Otomasyonu
Mimari sabit kalır, ancak her ortamın kendi öncelikleri vardır.
Evler
Ev otomasyonu en olgun alandır. Mantık katmanı genellikle Home Assistant'tır ve MQTT birçok ekosistemden cihazları birbirine bağlar: Zigbee2MQTT üzerinden Zigbee sensörleri, Tasmota yüklenmiş Wi-Fi prizler ve ESPHome ile geliştirilmiş özel ESP32 kartları. Tipik otomasyonlar varlığa dayalı aydınlatma, ısıtma programları, su kaçağı uyarıları ve bildirimlerdir. Yaygın bir tuzak, ışık anahtarı gibi çevrimdışı çalışması gereken şeyler için buluta güvenmektir; bunları yerelde tutun.
Ticari binalar
Bina otomasyonu genellikle çok sayıda bölgede HVAC, aydınlatma, doluluk ve hava kalitesine odaklanır. Mevcut sistemler BACnet, KNX veya Modbus konuşur ve gateway'ler bunları MQTT'ye çevirir; böylece yeni uygulamalar bina yönetim sistemine dokunmadan verileri kullanabilir. Mimari için MQTT ile bina otomasyonu, gateway adımı için BACnet'ten MQTT'ye yazılarını okuyun. Boş odaları tespit etmek kolay olduğu için doluluk tabanlı HVAC ve aydınlatma klasik hızlı kazanımlardır.
Çiftlikler ve seralar
Tarımsal otomasyon uzun mesafeler, zorlu koşullar ve pille çalışan sensörlerle uğraşır. Toprak nemi, hava sıcaklığı, nem ve su seviyeleri sulamayı, havalandırmayı ve gölgelendirmeyi yönlendirir. Sahada LoRaWAN yaygındır; The Things Network gibi ağ sunucuları uplink'leri MQTT üzerinden iletir. Bu konu The Things Network ve MQTT yazısında ele alınıyor. Tarlalar ve seralar nadiren yerel bir ağı paylaştığı için burada bulut broker özellikle kullanışlıdır. Ayrıntılar akıllı tarım IoT rehberinde ve sera otomasyonu eğitiminde yer alıyor.
Enerji
Enerji otomasyonu üretim, depolama ve tüketimi dengeler: güneş üretimi yüksekken su ısıtıcısını çalıştırmak, bir elektrikli aracı düşük tarifede şarj etmek veya kritik olmayan yükleri devreden çıkarmak. İnverterler, bataryalar ve akıllı sayaçlar genellikle küçük köprülerin MQTT'ye yayımladığı Modbus veya yerel API'ler sunar. Somut uygulamalar için MQTT ile ev enerji izleme ve güneş inverteri izleme yazılarına bakın.
Uygulamalı: Toprak Nemine Dayalı Bir Sulama Otomasyonu
Eksiksiz bir algıla-karar ver-uygula döngüsü kuralım. Bir cihaz toprak nemini yayımlar, Home Assistant ne zaman sulama yapılacağına karar verir ve bir vana durumunu bildirir. Gerçek donanımı bağlamadan önce her şeyi broker.connectmq.com'un ücretsiz public alanında test edebilirsiniz. connectmq/demo/k7x2p9 gibi benzersiz bir önek seçin ve aşağıda her yerde onu kullanın; public alan herkes tarafından okunabilir, bu yüzden oraya yalnızca test verisi konmalıdır.
Adım 1: Sensörü ve vanayı komut satırından simüle edin
Retained bir nem okuması yayımlayın:
mosquitto_pub -h broker.connectmq.com -p 1883 -i soil-k7x2p9 \
-t "connectmq/demo/k7x2p9/greenhouse1/soil" -r \
-m '{"moisture": 42.5, "tempC": 19.8}'
İkinci bir terminalde önekin altındaki her şeyi izleyin:
mosquitto_sub -h broker.connectmq.com -p 1883 -i watch-k7x2p9 \
-t "connectmq/demo/k7x2p9/#" -v
Adım 2: Varlıkları Home Assistant'ta tanımlayın
Home Assistant'ta MQTT entegrasyonunu ekleyin (Ayarlar, Cihazlar ve servisler, Entegrasyon ekle, MQTT); broker olarak broker.connectmq.com, port olarak 1883 ve test için benzersiz bir client ID kullanın. Ardından sensörü ve vanayı configuration.yaml içinde tanımlayın:
mqtt:
sensor:
- name: "Greenhouse Soil Moisture"
unique_id: greenhouse1_soil_moisture
state_topic: "connectmq/demo/k7x2p9/greenhouse1/soil"
unit_of_measurement: "%"
value_template: "{{ value_json.moisture }}"
switch:
- name: "Greenhouse Valve"
unique_id: greenhouse1_valve
command_topic: "connectmq/demo/k7x2p9/greenhouse1/valve/set"
state_topic: "connectmq/demo/k7x2p9/greenhouse1/valve/state"
payload_on: "ON"
payload_off: "OFF"
retain: false
Adım 3: Otomasyon kuralını yazın
automation:
- alias: "Irrigate greenhouse when soil is dry"
mode: single
triggers:
- trigger: numeric_state
entity_id: sensor.greenhouse_soil_moisture
below: 30
for: "00:05:00"
conditions:
- condition: time
after: "06:00:00"
before: "20:00:00"
actions:
- action: switch.turn_on
target:
entity_id: switch.greenhouse_valve
- delay: "00:10:00"
- action: switch.turn_off
target:
entity_id: switch.greenhouse_valve
for ifadesi sensör gürültüsünden kaynaklanan kısa düşüşleri yok sayar, zaman koşulu gece sulamayı önler ve sabit gecikme, nem okuması gelmeyi bıraksa bile vananın kapanmasını garanti eder. 25 nem değerini yayımlayın ve beş dakika boyunca öyle bırakın; mosquitto_sub pencerenizde valve/set topic'inde ON'un, on dakika sonra da OFF'un göründüğünü göreceksiniz. Gerçek bir vana kontrolcüsü valve/set topic'ine abone olur ve gerçek konumunu valve/state topic'ine yayımlar.
Home Assistant olmadan aynı kural
Her sahada Home Assistant çalışmaz. Node-RED (bkz. Node-RED MQTT eğitimi) veya küçük bir Python servisi aynı mantığı barındırabilir. Bu sürüm paho-mqtt 2.x kullanır ve vananın eşik etrafında sürekli açılıp kapanmaması için histerezis ekler:
import json
import threading
import uuid
import paho.mqtt.client as mqtt
PREFIX = "connectmq/demo/k7x2p9/greenhouse1"
DRY, WET, MAX_RUN_S = 30.0, 45.0, 600
valve_on = False
timer = None
def set_valve(client, on):
global valve_on, timer
valve_on = on
client.publish(f"{PREFIX}/valve/set", "ON" if on else "OFF", qos=1)
if timer:
timer.cancel()
if on: # güvenlik: asla MAX_RUN_S süresinden uzun çalıştırma
timer = threading.Timer(MAX_RUN_S, set_valve, args=(client, False))
timer.start()
print("valve", "ON" if on else "OFF")
def on_connect(client, userdata, flags, reason_code, properties):
client.subscribe(f"{PREFIX}/soil", qos=1)
def on_message(client, userdata, msg):
moisture = json.loads(msg.payload)["moisture"]
if not valve_on and moisture < DRY:
set_valve(client, True)
elif valve_on and moisture > WET:
set_valve(client, False)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"irrigation-{uuid.uuid4().hex[:8]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()
IoT Otomasyonu Tasarım Kontrol Listesi
Önemli bir şeyi bir otomasyona emanet etmeden önce bu listeyi kullanın:
- Güvenli tarafta kalın (fail safe). Kural motoru, broker veya sensör ortadan kaybolursa her aktüatörün ne yapması gerektiğine karar verin. Vanalar kapanır, ısıtıcılar kapanır, kapılar kilitli kalır.
- Debounce ve histerezis. Gürültünün hızlı açılıp kapanmaya neden olmaması için zaman pencereleri veya ayrı açma ve kapama eşikleri kullanın.
- Durumu doğrulayın. Bir cihaza
/setüzerinden komut verin, ancak dashboard'ları ve takip eden kuralları cihazın bildirdiğistateüzerinden yürütün. - Çevrimdışı cihazları ele alın. Last Will
statustopic'lerine abone olun ve kritik bir sensör sessizleştiğinde uyarı verin. - Manuel müdahaleyi koruyun. İnsanlar otomasyonu yerinde geçersiz kılabilmeli ve kurallar buna saygı göstermelidir.
- QoS'u bilinçli seçin. Komutlar ve alarmlar için QoS 1, sık okumalar için QoS 0. MQTT QoS seviyeleri yazısı nedenini açıklar.
- Güvenceye alın. TLS ve cihaz veya gateway başına benzersiz kimlik bilgileri kullanın ve bir broker'ı asla kimlik doğrulama olmadan açığa çıkarmayın. MQTT güvenliği en iyi uygulamaları kontrol listesi doğrudan uygulanır.
- Kararları kaydedin. Kuralın ne yaptığını ve nedenini bir log topic'ine yayımlayın; böylece "ısıtıcı gece üçte neden açıldı?" sorusunda hata ayıklayabilirsiniz.
Otomasyonları Zaman İçinde Test Etmek ve Bakımını Yapmak
İlk gün çalışan bir otomasyon aylar sonra sessizce bozulabilir: bir sensörün pili biter, bir firmware güncellemesi bir varlığın adını değiştirir ya da bir cihaz yeni bir IP adresi alır ve bir daha bağlanmaz. Otomasyonlara bağımlı olduğunuz diğer tüm yazılımlar gibi davranın.
İşe kuralları gerçek aktüatörlere dokunmadan önce simüle edilmiş mesajlarla test ederek başlayın. Komut satırından sahte bir düşük nem değeri veya sahte bir doluluk olayı yayımlamak, bir kuralın tetiklenip tetiklenmediğini görmenin en hızlı yoludur ve hiçbir maliyeti yoktur. Güncellemelerden sonra tekrarlayabilmek için her önemli kural için bu test mesajlarının kısa bir listesini tutun.
Ardından yalnızca çıktıların değil, girdilerin de sağlığını izleyin. Bir sıcaklık sensörüne dayanan bir ısıtma kuralı, ancak o sensörün son raporu kadar iyidir. Her kritik cihazın son yayınından bu yana geçen süreyi takip edin ve birkaç raporlama aralığını aştığında uyarı verin. Last Will içeren retained status topic'leri bunu kolaylaştırır, çünkü çöken bir cihaz kendini duyurur.
Son olarak otomasyonları yılda birkaç kez gözden geçirin. Kimsenin oluşturduğunu hatırlamadığı kuralları kaldırın, eşiklerin hâlâ mevsime veya ürüne uyup uymadığını kontrol edin ve manuel müdahalelerin hâlâ çalıştığını doğrulayın. Küçük ve iyi anlaşılmış bir kural kümesi, kimsenin güvenmediği büyük bir kümeden daha değerlidir.
Yaygın Tuzaklar
- Birçok araca dağılmış kurallar. Mantığın bir kısmı bir prizin firmware'inde, bir kısmı Home Assistant'ta, bir kısmı Node-RED'de yaşıyorsa kimse davranışı öngöremez. Birincil bir kural motoru seçin.
- Retained komutlar. Bir komut topic'indeki retained bir
ON, cihaz her yeniden bağlandığında onu tekrar açar. Komutları değil, durumu retain edin. - Paylaşılan client ID'ler. Aynı ID'ye sahip iki client birbirini bir döngü içinde broker'dan atar. Her ID'yi benzersiz yapın.
- Yalnızca buluta dayalı kritik yollar. Güvenlikle ilgili ve konfor açısından kritik kuralları yerelde tutun, bulutu izleme ve uzaktan erişim için kullanın.
- Protokol seçimini göz ardı etmek. Matter, Zigbee ve Wi-Fi'nin her birinin ödünleşimleri vardır; Matter ve MQTT karşılaştırması bunların nasıl bir arada var olabileceğini açıklar.
ConnectMQ ile IoT Otomasyonunu Sahalar Arasında Ölçeklendirmek
Birden fazla konumunuz olduğu anda veya modeminizde port açmadan uzaktan erişime ihtiyaç duyduğunuzda, barındırılan bir broker en basit merkez hâline gelir. ConnectMQ, her sahaya 8883 portunda TLS veya tarayıcı dashboard'ları için 8084 portunda güvenli WebSocket üzerinden aynı uç noktayı verir; böylece farklı yerlerdeki Home Assistant kurulumları, Node-RED akışları, gateway'ler ve cihazlar tek bir broker'da buluşur. Portalın canlı topic gezgini cihazların gerçekte ne yayımladığını kontrol etmenize yardımcı olur; uyarı loguyla birlikte eşik tabanlı uyarı kuralları ise bir okuma bir limiti aştığında sizi uyarabilir. Otomasyon mantığının kendisi ise sıradan MQTT client'ları olarak bağlanan Home Assistant, Node-RED veya kendi servisinizde kalır.
Ücretsiz Serverless plan 25 bağlantıya kadar destekler; bu, tipik bir evi veya küçük bir serayı rahatlıkla kapsar. Daha büyük binalar ve çok sahalı dağıtımlar 1.000 bağlantıya kadar sunan ücretli Serverless plana veya dedicated bir kümeye geçebilir. Seçenekleri yönetilen MQTT broker genel bakışında karşılaştırın.
ConnectMQ ile Başlayın
Otomasyonlarınızın prototipini public MQTT test broker'ında oluşturun, ardından gerçek cihazlar devreye girdiğinde özel bir broker'a geçin. app.connectmq.com adresinde kredi kartı gerektirmeyen ücretsiz Serverless planla kaydolun, bir broker oluşturun ve üretilen kullanıcı adını, parolayı ve client ID'yi Home Assistant'a, Node-RED'e veya cihazlarınıza kopyalayın. Portu TLS ile 8883'e çevirin; kurallarınız değişmeden çalışmaya devam eder.
Sık Sorulan Sorular
IoT otomasyonu için Home Assistant gerekli mi?
Hayır. Home Assistant evler için en yaygın mantık katmanıdır, ancak aynı MQTT broker'a bağlı Node-RED, openHAB veya küçük bir Python ya da Node.js servisi aynı kuralları çalıştırabilir. Hangisini seçerseniz seçin broker ve topic'ler aynı kalır.
Otomasyon broker'ım yerelde mi yoksa bulutta mı olmalı?
Zamana duyarlı ve güvenlikle ilgili kuralları internet kesintilerinde de çalışmaları için yerelde çalıştırın. Uzaktan erişim, çok sahalı kurulumlar ve izleme için bir bulut broker kullanın veya yerel kurallar ile bulut görünürlüğünü birleştirin.
ConnectMQ otomasyon kurallarımı çalıştırır mı?
Hayır. ConnectMQ mesajlaşma merkezidir ve izleme için eşik tabanlı uyarı kuralları sunar; ancak otomasyon mantığı broker'a MQTT client'ı olarak bağlanan Home Assistant, Node-RED veya kendi servisleriniz gibi araçlarda çalışır.
Cihazım neden her yeniden bağlandığında açılıyor?
Muhtemelen komutu retain bayrağıyla yayımladınız. Broker retained message'ları saklar ve her yeni aboneye teslim eder; bu yüzden durum topic'lerini retain edin, ama komut topic'lerini asla.
IoT otomasyonunu donanım olmadan test edebilir miyim?
Evet. Benzersiz bir client ID ve topic öneki kullanarak broker.connectmq.com üzerinde mosquitto_pub ile sensörleri simüle edin ve gerçek cihazları bağlamadan önce ortaya çıkan komutları mosquitto_sub ile izleyin.



