IoT & Gömülü Sistemler

Raspberry Pi ile Akıllı Ev Otomasyon Sistemi

Fatih Algül
12.03.2026 13 görüntülenme

Giriş: Neden Raspberry Pi ile Ev Otomasyonu?

Akıllı ev sistemleri son yıllarda hızla yaygınlaşsa da, hazır çözümler genellikle pahalı, kapalı ekosistemlere bağımlı ve özelleştirme imkânı sınırlı oluyor. Raspberry Pi, düşük maliyeti, geniş topluluk desteği ve esnek yapısıyla kendi akıllı ev otomasyon sisteminizi sıfırdan kurmanıza olanak tanır. Bu yazıda, Raspberry Pi üzerinde çalışan kapsamlı bir ev otomasyon sistemi kurmayı adım adım inceleyeceğiz.

Gerekli Donanımlar

Projeye başlamadan önce aşağıdaki donanımlara ihtiyacınız olacak:

  • Raspberry Pi 4 Model B (4GB RAM) — Ana kontrol ünitesi olarak görev yapacak
  • 32GB veya 64GB microSD kart — İşletim sistemi ve veritabanı için
  • DHT22 sıcaklık ve nem sensörü — Ortam koşullarını izlemek için
  • Röle modülü (4 kanallı) — Aydınlatma ve cihaz kontrolü için
  • PIR hareket sensörü (HC-SR501) — Hareket algılama için
  • MQ-2 gaz sensörü — Güvenlik amaçlı gaz kaçağı tespiti için
  • USB kamera veya Pi Camera modülü — Güvenlik kamerası olarak
  • Breadboard ve jumper kablolar — Prototipleme için

Sistem Mimarisi

Otomasyon sistemimiz üç ana katmandan oluşacak:

  1. Sensör Katmanı: GPIO pinlerine bağlı sensörler aracılığıyla veri toplama
  2. İşleme Katmanı: Python tabanlı otomasyon mantığı ve MQTT mesajlaşma
  3. Arayüz Katmanı: Home Assistant veya özel web arayüzü ile kontrol ve izleme

Adım 1: Raspberry Pi OS Kurulumu ve Temel Yapılandırma

Raspberry Pi Imager aracını kullanarak microSD karta Raspberry Pi OS Lite (64-bit) sürümünü yazın. Masaüstü ortamına ihtiyacımız olmayacağı için Lite sürümü yeterli ve daha performanslı olacaktır.

İlk açılıştan sonra temel güncellemeleri yapın:

sudo apt update && sudo apt upgrade -y sudo apt install python3-pip python3-venv git mosquitto mosquitto-clients -y

GPIO erişimi için gerekli Python kütüphanelerini kurun:

python3 -m venv ~/ev-otomasyon source ~/ev-otomasyon/bin/activate pip install RPi.GPIO Adafruit-DHT paho-mqtt flask

Adım 2: MQTT Broker Kurulumu

MQTT (Message Queuing Telemetry Transport), IoT cihazları arasında hafif ve verimli mesajlaşma sağlayan bir protokoldür. Mosquitto'yu MQTT broker olarak kullanacağız.

Mosquitto yapılandırma dosyasını düzenleyin:

sudo nano /etc/mosquitto/mosquitto.conf

Aşağıdaki satırları ekleyin:

listener 1883 allow_anonymous false password_file /etc/mosquitto/passwd

Kullanıcı oluşturun ve servisi yeniden başlatın:

sudo mosquitto_passwd -c /etc/mosquitto/passwd ev_admin sudo systemctl restart mosquitto sudo systemctl enable mosquitto

Adım 3: Sensör Okuma Modülü

Sensörlerden veri okuyup MQTT üzerinden yayınlayan Python modülünü oluşturalım:

import Adafruit_DHT import RPi.GPIO as GPIO import paho.mqtt.client as mqtt import json import time # GPIO ayarları GPIO.setmode(GPIO.BCM) DHT_PIN = 4 PIR_PIN = 17 GAS_PIN = 27 ROLE_PINS = [5, 6, 13, 19] GPIO.setup(PIR_PIN, GPIO.IN) GPIO.setup(GAS_PIN, GPIO.IN) for pin in ROLE_PINS: GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, GPIO.HIGH) # Röleleri kapalı başlat # MQTT bağlantısı client = mqtt.Client(client_id="sensor_hub") client.username_pw_set("ev_admin", "sifreniz") client.connect("localhost", 1883, 60) def sicaklik_nem_oku(): nem, sicaklik = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, DHT_PIN) if nem is not None and sicaklik is not None: veri = { "sicaklik": round(sicaklik, 1), "nem": round(nem, 1), "zaman": time.strftime("%Y-%m-%d %H:%M:%S") } client.publish("ev/ortam/sicaklik_nem", json.dumps(veri)) return veri return None def hareket_kontrol(): if GPIO.input(PIR_PIN): client.publish("ev/guvenlik/hareket", json.dumps({ "durum": "hareket_algilandi", "zaman": time.strftime("%Y-%m-%d %H:%M:%S") })) return True return False def gaz_kontrol(): if GPIO.input(GAS_PIN) == 0: client.publish("ev/guvenlik/gaz", json.dumps({ "durum": "gaz_algilandi", "zaman": time.strftime("%Y-%m-%d %H:%M:%S") })) return True return False def role_kontrol(kanal, durum): if 0 <= kanal < len(ROLE_PINS): GPIO.output(ROLE_PINS[kanal], GPIO.LOW if durum else GPIO.HIGH) client.publish(f"ev/cihaz/role_{kanal}", json.dumps({ "kanal": kanal, "durum": "acik" if durum else "kapali" })) # Ana döngü try: while True: sicaklik_nem_oku() hareket_kontrol() gaz_kontrol() time.sleep(2) except KeyboardInterrupt: GPIO.cleanup()

Adım 4: Otomasyon Kuralları Motoru

Sensör verilerine göre otomatik aksiyon alan bir kural motoru yazalım. Bu modül MQTT mesajlarını dinleyerek belirli koşullar gerçekleştiğinde otomatik tepki verir:

import paho.mqtt.client as mqtt import json import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') KURALLAR = { "sicaklik_yuksek": {"esik": 28.0, "aksiyon": "klimayi_ac"}, "sicaklik_dusuk": {"esik": 18.0, "aksiyon": "isiticiyi_ac"}, "nem_yuksek": {"esik": 70.0, "aksiyon": "havalandirmayi_ac"}, } def mesaj_geldi(client, userdata, msg): veri = json.loads(msg.payload.decode()) konu = msg.topic if konu == "ev/ortam/sicaklik_nem": sicaklik = veri["sicaklik"] nem = veri["nem"] if sicaklik > KURALLAR["sicaklik_yuksek"]["esik"]: logging.info(f"Sıcaklık yüksek: {sicaklik}°C — Klima açılıyor") client.publish("ev/komut/role", json.dumps({"kanal": 0, "durum": True})) elif sicaklik < KURALLAR["sicaklik_dusuk"]["esik"]: logging.info(f"Sıcaklık düşük: {sicaklik}°C — Isıtıcı açılıyor") client.publish("ev/komut/role", json.dumps({"kanal": 1, "durum": True})) if nem > KURALLAR["nem_yuksek"]["esik"]: logging.info(f"Nem yüksek: {nem}% — Havalandırma açılıyor") client.publish("ev/komut/role", json.dumps({"kanal": 2, "durum": True})) elif konu == "ev/guvenlik/gaz": logging.warning("GAZ ALARMI! Tüm cihazlar kapatılıyor.") for kanal in range(4): client.publish("ev/komut/role", json.dumps({"kanal": kanal, "durum": False})) client.publish("ev/bildirim/acil", json.dumps({ "mesaj": "Gaz kaçağı algılandı! Tüm cihazlar kapatıldı." })) client = mqtt.Client(client_id="kural_motoru") client.username_pw_set("ev_admin", "sifreniz") client.on_message = mesaj_geldi client.connect("localhost", 1883, 60) client.subscribe("ev/#") client.loop_forever()

Adım 5: Web Arayüzü ile Kontrol Paneli

Flask kullanarak basit ama işlevsel bir web kontrol paneli oluşturalım:

from flask import Flask, render_template_string, jsonify, request import paho.mqtt.client as mqtt import json app = Flask(__name__) son_veriler = {"sicaklik": 0, "nem": 0, "hareket": False, "gaz": False} mqtt_client = mqtt.Client(client_id="web_arayuz") mqtt_client.username_pw_set("ev_admin", "sifreniz") def mqtt_mesaj(client, userdata, msg): veri = json.loads(msg.payload.decode()) if msg.topic == "ev/ortam/sicaklik_nem": son_veriler["sicaklik"] = veri["sicaklik"] son_veriler["nem"] = veri["nem"] mqtt_client.on_message = mqtt_mesaj mqtt_client.connect("localhost", 1883, 60) mqtt_client.subscribe("ev/#") mqtt_client.loop_start() @app.route("/") def anasayfa(): return render_template_string(ARAYUZ_HTML) @app.route("/api/durum") def durum(): return jsonify(son_veriler) @app.route("/api/role", methods=["POST"]) def role_kontrol(): veri = request.json mqtt_client.publish("ev/komut/role", json.dumps(veri)) return jsonify({"sonuc": "basarili"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)

Bu arayüze aynı ağdaki herhangi bir cihazdan http://raspberrypi_ip:5000 adresinden erişebilirsiniz.

Adım 6: Servislerin Otomatik Başlatılması

Raspberry Pi her açıldığında otomasyon sisteminin otomatik başlaması için systemd servisleri oluşturun:

# /etc/systemd/system/ev-sensor.service [Unit] Description=Ev Otomasyon Sensör Servisi After=mosquitto.service [Service] Type=simple User=pi WorkingDirectory=/home/pi ExecStart=/home/pi/ev-otomasyon/bin/python /home/pi/sensor_oku.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

Servisleri etkinleştirmek için:

sudo systemctl daemon-reload sudo systemctl enable ev-sensor.service sudo systemctl start ev-sensor.service

Güvenlik Önerileri

Ev otomasyon sisteminizi dış tehditlere karşı korumak için şu önlemleri mutlaka alın:

  • MQTT şifreleme: TLS/SSL sertifikaları kullanarak MQTT trafiğini şifreleyin
  • Güvenlik duvarı: ufw ile yalnızca gerekli portları açın (sudo ufw allow 5000/tcp)
  • SSH anahtar tabanlı kimlik doğrulama: Parola ile SSH erişimini devre dışı bırakın
  • Düzenli güncellemeler: Sistem ve paketleri düzenli olarak güncelleyin
  • Ağ izolasyonu: IoT cihazlarını ayrı bir VLAN'a taşıyarak ana ağınızdan izole edin
  • Varsayılan parolaları değiştirin: Raspberry Pi ve MQTT broker için güçlü, benzersiz parolalar kullanın

Home Assistant Entegrasyonu

Daha gelişmiş bir arayüz ve otomasyon için Home Assistant kurulumu yapabilirsiniz. MQTT entegrasyonu sayesinde yukarıdaki sensör altyapınızı doğrudan Home Assistant ile kullanabilirsiniz:

# Home Assistant configuration.yaml mqtt: broker: localhost port: 1883 username: ev_admin password: sifreniz sensor: - platform: mqtt name: "Ev Sıcaklığı" state_topic: "ev/ortam/sicaklik_nem" value_template: "{{ value_json.sicaklik }}" unit_of_measurement: "°C" - platform: mqtt name: "Ev Nemi" state_topic: "ev/ortam/sicaklik_nem" value_template: "{{ value_json.nem }}" unit_of_measurement: "%"

İleri Seviye Geliştirmeler

Temel sisteminizi kurduktan sonra şu geliştirmeleri değerlendirebilirsiniz:

  • Zigbee/Z-Wave desteği: USB dongle ile kablosuz akıllı cihaz kontrolü
  • Sesli kontrol: Özel bir wake-word motoru ile sesli komut desteği
  • Makine öğrenmesi: Kullanım alışkanlıklarınızı öğrenen otomasyon kuralları
  • Enerji izleme: PZEM-004T modülü ile elektrik tüketimi takibi
  • Telegram/bildirim entegrasyonu: Kritik olaylarda anlık bildirim gönderimi
  • InfluxDB + Grafana: Sensör verilerinin uzun vadeli saklanması ve görselleştirilmesi

Sonuç

Raspberry Pi ile kuracağınız ev otomasyon sistemi, ticari çözümlere kıyasla çok daha esnek, özelleştirilebilir ve uygun maliyetli bir alternatif sunar. MQTT tabanlı mimari sayesinde sisteminize yeni sensörler ve cihazlar eklemek son derece kolaydır. Güvenlik önlemlerini ihmal etmeden, adım adım ilerleyerek evinizi gerçek anlamda "akıllı" bir hale getirebilirsiniz. Unutmayın: en iyi otomasyon sistemi, sizin ihtiyaçlarınıza göre şekillenen sistemdir.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç