Home Assistant’a Kendi Alan Adınızla Güvenli (HTTPS) Uzaktan Erişim: Let’s Encrypt, cPanel ve Cloudflare DDNS Rehberi

Evinizde çalışan Home Assistant akıllı ev otomasyon sisteminize dış ağdan, cep telefonunuzdaki Companion uygulamasıyla ya da web tarayıcınızdan kilit simgeli, uçtan uca şifreli (HTTPS) bir bağlantıyla erişmek istiyorsunuz. Ancak çoğu ev internet aboneliğinde internet servis sağlayıcısı (İSS), modem her yeniden başladığında değişen dinamik bir IP adresi atar ve “SSL sertifikası ile DDNS yapılandırması” ilk bakışta karmaşık görünebilir.

Bu kapsamlı rehberde, sabit IP ücreti ödemeden ve üçüncü taraf bulut tünellerine bağımlı kalmadan kendi alan adınızla güvenli uzaktan erişim altyapısını adım adım kuruyoruz. Rehberin sonunda şu yapıya sahip olacaksınız:

  • https://home.ornekalanadi.com gibi kendi özel alan adınızla çalışan kurumsal düzeyde bir Home Assistant adresi,
  • Ücretsiz ve otomatik olarak yenilenen bir Let’s Encrypt SSL/TLS sertifikası,
  • Modem IP adresiniz değişse bile alan adınızı dakikalar içinde güncelleyen cPanel Dynamic DNS (DDNS) veya Cloudflare DNS mekanizması,
  • Elektrik ve internet kesintilerinden sonra sistemi kendi kendine toparlayıp mobil bildirim gönderen ve sertifika süresini denetleyen iki hazır Home Assistant otomasyonu.

Neden Bu Rehberde DuckDNS Yok? DuckDNS uzun yıllar en popüler ücretsiz DDNS servisiydi ve eski rehberlerin büyük çoğunluğu onu temel alır. Ancak son dönemde yaşanan sık erişim kesintileri, IP güncellemelerinin gecikmesi ve Let’s Encrypt doğrulama zaman aşımları nedeniyle akıllı evinizin uzaktan erişimini DuckDNS’e emanet etmeyi artık önermiyoruz. Bu rehberde kendi alan adınızı kullandığınız, çok daha kararlı ve kontrolü tamamen sizde olan yöntemlere odaklanıyoruz.

Temel Kavramlar: DDNS, SSL ve Port Yönlendirme Nedir?

Uygulama adımlarına geçmeden önce beş temel ağ kavramını netleştirmek, kurulum sırasında veya ileride karşılaşabileceğiniz bağlantı sorunlarını dakikalar içinde teşhis etmenizi sağlar:

  • Dış IP (WAN IP): İnternet servis sağlayıcınızın modeminize verdiği, internetteki “ev adresinizdir”. Standart ev aboneliklerinde bu adres dinamiktir; yani modem kapandığında veya servis sağlayıcı oturumu yenilediğinde değişir.
  • İç IP (LAN IP): Modemin evinizdeki cihazlara dağıttığı 192.168.1.x biçimindeki yerel adreslerdir. Örneğin Raspberry Pi üzerine kurulu işletim sisteminizin veya mini bilgisayarınızın yerel ağda 192.168.1.50 gibi sabit bir iç IP’si bulunur.
  • DDNS (Dinamik DNS): Alan adınızın (ör. home.ornekalanadi.com) her zaman güncel dış IP adresinizi göstermesini sağlayan sistemdir. Evdeki Home Assistant sunucunuz belirli aralıklarla DNS sağlayıcınıza “benim güncel dış IP adresim şu an bu” bilgisini iletir ve A kaydı otomatik güncellenir.
  • SSL / HTTPS Sertifikası: Tarayıcıdaki kilit simgesidir. Cihazınız ile Home Assistant arasındaki veri trafiğinin şifrelendiğini ve gerçekten kendi sunucunuza bağlandığınızı kanıtlar. Let’s Encrypt bu sertifikaları ücretsiz üretir; sertifikalar 90 gün geçerlidir ve kalan süre 30 günün altına düştüğünde eklenti tarafından otomatik yenilenir.
  • Port Yönlendirme (Port Forwarding): İnternetten modeminize gelen bir bağlantı isteğini evinizdeki doğru cihaza aktaran kuraldır. Bunu “modemin 443 numaralı kapısına gelen ziyaretçiyi içerideki Home Assistant’ın 8123 numaralı kapısına yönlendir” komutu gibi düşünebilirsiniz.

Sistem Mimarisi ve Bağlantı Akışı

[Mobil Cihaz / Dış Ağ (Mobil Veri)]
        │  İstek: https://home.ornekalanadi.com (Port 443)
        ▼
[DNS Sunucusu: home.ornekalanadi.com ──► 85.x.x.x]  ◄── (DDNS kaydı güncel tutar)
        │
        ▼
[Ev Modemi (WAN IP: 85.x.x.x)]
        │  Port Yönlendirme: Dış 443 ──► İç 192.168.1.50:8123
        │  Port Yönlendirme: Dış 80  ──► İç 192.168.1.50:80 (Let's Encrypt HTTP doğrulaması)
        ▼
[Home Assistant (192.168.1.50:8123)]
        └── Let's Encrypt SSL Sertifikası (/ssl/fullchain.pem & privkey.pem)

Başlamadan Önce CGNAT (Carrier-Grade NAT) Kontrolü

Bu adımı kesinlikle atlamayın; port yönlendirme tabanlı tüm uzaktan erişim yöntemlerinin çalışıp çalışmayacağını CGNAT durumu belirler. Bazı internet servis sağlayıcıları, IPv4 adresi kısıtlılığı ve maliyet nedeniyle birden fazla aboneye aynı dış IP adresini paylaştırır. CGNAT arkasındaysanız modeminizde port açsanız bile dış dünyadan gelen paketler modeminize ulaşamaz.

  1. Modem arayüzünüze (genellikle 192.168.1.1) giriş yapın ve WAN / İnternet Durumu sayfasındaki IPv4 adresini not edin.
  2. Aynı ağa bağlı bir bilgisayardan veya telefondan api.ipify.org adresine girerek internette görünen dış IP adresinizi kontrol edin.
  3. İki adresi karşılaştırın:
    • İki adres birebir aynıysa: Gerçek (public) bir dış IP adresiniz var demektir; rehberdeki adımlara doğrudan devam edebilirsiniz.
    • Modemdeki WAN IP adresi 100.64.x.x ile 100.127.x.x aralığındaysa veya iki adres birbirinden farklıysa: CGNAT havuzundasınız demektir.

CGNAT Arkasındaysanız Çözüm Nedir? İnternet sağlayıcınızın müşteri hizmetlerini arayarak CGNAT havuzundan çıkarılmayı veya statik/dinamik gerçek IP tanımlanmasını talep edebilirsiniz. Eğer sağlayıcınız bunu sunmuyorsa port yönlendirme gerektirmeyen Home Assistant Link (Nabu Casa) veya Cloudflare Tunnel (cloudflared) çözümlerini tercih etmeniz gerekir.

Alan Adı ve DDNS Seçenekleri Karşılaştırması

Bu yapı için iki bileşene ihtiyacınız var: kendinize ait bir alan adı (domain) ve bu alan adının DNS A kaydını otomatik güncelleyebilen bir DDNS servisi.

Kendi Alan Adınızla DDNS Sunan Servisler

ServisMaliyetGüncelleme YöntemiKimler İçin Uygun?
cPanel Dynamic DNSMevcut hosting paketinize dahilcPanel’in ürettiği özel webcall URL’sini curl ile çağırmakHalihazırda cPanel tabanlı bir web hosting paketi kullananlar
Cloudflare DNSÜcretsizHome Assistant resmi Cloudflare entegrasyonu veya APIAlan adının nameserver kayıtlarını Cloudflare’e taşıyabilenler (en popüler ücretsiz çözüm)
deSEC (desec.io)Ücretsiz (Kâr amacı gütmeyen)Standart dynDNS güncelleme protokolü / HTTPS isteğiGizlilik ve veri güvenliğine öncelik veren Avrupa merkezli yapı arayanlar
FreeDNS (afraid.org)Ücretsiz (Temel paket)Özel güncelleme URL’si / curlKendi alan adını hızlıca basit bir URL ile güncellemek isteyenler
Dynu DNSÜcretsiz (Temel paket)Güncelleme URL’si veya REST APIAlternatif ücretsiz DDNS sağlayıcısı arayanlar

Ücretsiz Alan Adı Seçenekleri ve Freenom Uyarısı

Henüz bir alan adınız yoksa ve ücretsiz alternatifleri değerlendirmek istiyorsanız şu iki servis öne çıkmaktadır:

  • DigitalPlat FreeDomain: .us.kg, .dpdns.org, .qzz.io, .xx.kg ve .qd.je uzantılı ücretsiz alan adları sağlar. Hesap başına 1 alan adı tanımlanabilir ve kendi ad sunucularınızı (nameserver) girmenize izin verdiği için Cloudflare ile tam uyumlu çalışır.
  • EU.org: 1996 yılından bu yana ücretsiz alt alan adı (ör. adiniz.eu.org) sağlayan köklü ve kâr amacı gütmeyen bir kuruluştur. Başvurular manuel onaylandığı için aktifleşmesi birkaç gün sürebilir.

Önemli Uyarı: Eski rehberlerde sıkça önerilen Freenom (.tk, .ml, .ga, .cf, .gq) uzantıları artık yeni kayıt almamaktadır ve Cloudflare API’si ile Home Assistant Cloudflare entegrasyonu bu uzantıları desteklememektedir. Uzun vadeli kararlılık için yıllık birkaç dolara standart bir .com, .net veya .com.tr alan adı tescil etmeniz en sağlıklı yaklaşımdır.

Yöntem A: cPanel Dynamic DNS Kurulumu

Bir web siteniz varsa ve hosting panelinizde cPanel kullanıyorsanız, ek hiçbir servise üye olmadan doğrudan cPanel’in yerleşik Dynamic DNS özelliğini kullanabilirsiniz.

cPanel Üzerinde DDNS Alt Alan Adı Oluşturma

  1. cPanel’e giriş yapın ve Domains (Alan Adları) sekmesi altındaki Dynamic DNS simgesine tıklayın (bu simge görünmüyorsa hosting sağlayıcınızdan aktif etmelerini isteyebilirsiniz).
  2. Create (Oluştur) düğmesine tıklayın.
  3. Dynamic DNS Domain alanına alt alan adınızı yazın (ör. home) ve açılır menüden ana alan adınızı seçin (sonuç: home.ornekalanadi.com).
  4. Açıklama kısmına Home Assistant yazıp Create düğmesiyle kaydedin.
  5. cPanel size aşağıdaki formatta benzersiz bir webcall URL’si üretecektir:
https://ornekalanadi.com/cpanelwebcall/abcdefghijklmnopqrstuvwxyzabcdef

Güvenlik Notu: Bu URL bir parola niteliğindedir; adresi bilen herhangi biri alt alan adınızın IP yönlendirmesini değiştirebilir. Bu adresi kimseyle paylaşmayın. Yanlışlıkla ifşa olursa cPanel üzerinden Action > Recreate URL seçeneğiyle eski bağlantıyı geçersiz kılıp yeni bir anahtar üretebilirsiniz.

Home Assistant’a DDNS Güncelleme Komutunu Tanıtma

Home Assistant’ın bu gizli adresi periyodik olarak çağırabilmesi için bir shell_command tanımlayacağız. Gizli webcall adresini doğrudan yapılandırma dosyasına yazmak yerine secrets.yaml içinde saklıyoruz.

File Editor veya Studio Code Server eklentisiyle secrets.yaml dosyanızı açıp şu satırı ekleyin:

# secrets.yaml — bu dosyayı asla herkese açık paylaşmayın
cpanel_ddns_komut: "curl -s https://ornekalanadi.com/cpanelwebcall/abcdefghijklmnopqrstuvwxyzabcdef"

Ardından configuration.yaml dosyanıza aşağıdaki bloğu ekleyin:

# configuration.yaml
shell_command:
  update_ddns: !secret cpanel_ddns_komut

Dosyayı kaydettikten sonra Geliştirici Araçları > YAML > YAML yapılandırmasını kontrol et adımıyla sözdizimini doğrulayın ve Home Assistant’ı yeniden başlatın. Yeniden başlatma sonrasında Geliştirici Araçları > Eylemler (Actions) sekmesinden shell_command.update_ddns servisini çağırarak cPanel ekranında IP adresinizin güncellendiğini hemen test edebilirsiniz.

Yöntem B: Cloudflare ile Ücretsiz DDNS Kurulumu

cPanel hosting kullanmıyorsanız en güçlü ücretsiz alternatif Home Assistant’ın resmi Cloudflare entegrasyonudur.

Alan Adını Cloudflare’e Bağlama ve A Kaydı Ekleme

  1. Cloudflare üzerinde ücretsiz bir hesap açın, Add a site diyerek alan adınızı ekleyin ve Free planı seçin.
  2. Cloudflare’in size verdiği iki nameserver adresini, alan adınızı satın aldığınız firmanın paneline girerek ad sunucularınızı güncelleyin.
  3. Cloudflare DNS sekmesinde yeni bir A kaydı oluşturun:
    • Name: home
    • IPv4 address: Mevcut dış IP adresiniz
    • Proxy status: DNS only (Gri Bulut). Turuncu bulut (Proxy) açık bırakılırsa özel portlara erişimde veya SSL doğrulamasında yönlendirme döngüsü (ERR_TOO_MANY_REDIRECTS) ve bağlantı hataları yaşanabilir.

Cloudflare API Token ve Entegrasyon Ayarları

  1. Cloudflare’de sağ üstteki profil menüsünden My Profile > API Tokens > Create Token sayfasına gidin ve Edit zone DNS şablonunu seçin.
  2. Permissions bölümünde hem Zone > Zone > Read hem de Zone > DNS > Edit izinlerinin ekli olduğundan emin olun.
  3. Zone Resources kısmında Include > Specific zone > ornekalanadi.com seçip token’ı üretin ve kopyalayın.
  4. Home Assistant’ta Ayarlar > Cihazlar ve Hizmetler > Entegrasyon Ekle > Cloudflare yolunu izleyin; API anahtarınızı yapıştırıp home alt alan adını seçin.

Resmi entegrasyon IP adresinizi varsayılan olarak saatte bir günceller. Kesintilerden sonra daha hızlı tepki vermesi için aşağıdaki otomasyonla her 10 dakikada bir ve sistem açılışında güncelleme tetikleyebilirsiniz:

alias: "DDNS: Cloudflare IP Güncelle"
description: >-
  Home Assistant açıldığında ve her 10 dakikada bir Cloudflare üzerindeki
  A kaydını güncel dış IP adresiyle günceller.
triggers:
  - trigger: homeassistant
    event: start
  - trigger: time_pattern
    minutes: /10
conditions: []
actions:
  - action: cloudflare.update_records
    data: {}
mode: single

Modemde Port Yönlendirme: Hangi Portlar ve Neden Açılmalı?

Kurulumların en sık takıldığı aşama modem üzerindeki port yönlendirme kurallarıdır. Öncelikle Home Assistant’ın çalıştığı cihazın yerel ağdaki IP adresinin (ör. 192.168.1.50) zamanla değişmemesi için modeminizin DHCP Statik IP Rezervasyonu menüsünden MAC adresini sabitleyin veya Home Assistant’ta Ayarlar > Sistem > Ağ altından IPv4 adresini Statik olarak ayarlayın.

Dış Port (WAN)İç IP (LAN)İç Port (LAN)ProtokolKullanım AmacıZorunluluk Durumu
80192.168.1.5080TCPLet’s Encrypt HTTP-01 doğrulaması. İlk sertifika alımında ve her 60-90 günlük yenilemede doğrulama sunucuları bu porttan bağlanır.HTTP doğrulaması (cPanel DDNS vb.) kullanıyorsanız ZORUNLU. Cloudflare DNS doğrulamasında gerekmez.
443192.168.1.508123TCPDış ağdan standart HTTPS erişimi. Tarayıcı veya uygulamada sonuna port yazmadan doğrudan https://home.ornekalanadi.com ile bağlanmanızı sağlar.Uzaktan erişim için kesinlikle önerilir.
(Alternatif) 8123192.168.1.508123TCP443 yerine tercih edilirse bağlantı adresi https://home.ornekalanadi.com:8123 şeklinde kullanılır.Yalnızca 443 kuralı tanımlanmadıysa.

Port Yönlendirmede Kritik Kurallar

  • 80 Portu “Bir Kere Açılıp Kapatılacak” Bir Port Değildir: HTTP doğrulaması kullanıyorsanız sertifika her yenilendiğinde Let’s Encrypt sunucuları 80 portunu tekrar kontrol eder. Kuralı silerseniz sistem ilk 90 gün çalışır ancak ilk yenilemede sertifika süresi dolar ve mobil uygulamanız kilitlenir.
  • 80 Portu Güvenlik Açığı Oluşturmaz mı? 80 portundan Home Assistant arayüzüne erişilmez. Bu portu yalnızca Let’s Encrypt eklentisi, doğrulama yaptığı birkaç saniye boyunca geçici mini web sunucusu için açar ve işlem biter bitmez kapatır; diğer zamanlarda port üzerinde dinleyen hiçbir servis yoktur.
  • Modem Uzaktan Yönetim Çakışması: Modeminizin kendi “Uzaktan Web Yönetimi (Remote Management)” özelliği 80 veya 443 portunu kullanıyorsa mutlaka devre dışı bırakın veya farklı bir porta taşıyın.
  • Asla Açılmaması Gereken Portlar: SSH (22), MQTT (1883), Samba veya veritabanı portlarını kesinlikle internete açmayın; ESP32 tabanlı akıllı ev sensörleriniz ve yerel MQTT trafiğiniz yalnızca ev içi LAN üzerinde kalmalıdır.

Let’s Encrypt Eklentisinin Kurulumu ve Yapılandırılması

  1. Home Assistant’ta Ayarlar > Eklentiler > Eklenti Mağazası menüsüne girin.
  2. Resmi Let’s Encrypt eklentisini bulup Yükle düğmesine basın.
  3. Yapılandırma tamamlanana kadar Başlangıçta başlat (Start on boot) seçeneğini kapalı tutun.

HTTP Doğrulaması ile Yapılandırma (cPanel ve Genel DDNS İçin)

Eklentinin Yapılandırma sekmesinde sağ üstteki üç nokta menüsünden YAML olarak düzenle seçeneğine tıklayın ve aşağıdaki ayarları girin:

domains:
  - home.ornekalanadi.com
email: eposta@ornek.com
keyfile: privkey.pem
certfile: fullchain.pem
challenge: http

Aynı sayfanın altındaki Ağ (Network) bölümünde 80/tcp karşısında 80 yazdığından emin olun ve kaydedin.

DNS Doğrulaması ile Yapılandırma (Cloudflare Kullanıcıları İçin – 80 Portu Gerekmez)

Alan adınızı Cloudflare üzerinde yönetiyorsanız 80 portunu hiç açmadan doğrudan DNS-01 doğrulaması kullanabilirsiniz:

domains:
  - home.ornekalanadi.com
email: eposta@ornek.com
keyfile: privkey.pem
certfile: fullchain.pem
challenge: dns
dns:
  provider: dns-cloudflare
  cloudflare_api_token: BURAYA_CLOUDFLARE_API_TOKENINIZ

Eklentiyi Başlatma ve Sertifika Üretimini Doğrulama

Eklentinin Bilgi sekmesinden Başlat düğmesine basın ve Günlük (Log) sekmesini izleyin. Doğrulama başarılı olduğunda şu çıktıyı göreceksiniz:

Successfully received certificate.
Certificate is saved at: /data/letsencrypt/live/home.ornekalanadi.com/fullchain.pem

Sertifika alındıktan birkaç saniye sonra eklentinin kendiliğinden durması tamamen normaldir. Let’s Encrypt eklentisi arka planda sürekli çalışan bir daemon değildir; tetiklendiğinde sertifika süresini kontrol eder, süresi yaklaşmışsa yeniler ve kapanır.

Home Assistant’ı HTTPS Moduna Geçirmek

Üretilen sertifika dosyaları artık /ssl/ dizininde hazırdır. configuration.yaml dosyanızı açın ve aşağıdaki http: bloğunu ekleyin:

http:
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem
  ip_ban_enabled: true
  login_attempts_threshold: 5

YAML kontrolünü yapıp Home Assistant’ı yeniden başlattıktan sonra Ayarlar > Sistem > Ağ menüs에서 İnternet (Harici) URL alanına https://home.ornekalanadi.com adresini tanımlayın.

Önemli Değişiklik: Bu adımdan itibaren şifresiz http://192.168.1.50:8123 adresi artık yanıt vermez; Home Assistant yalnızca HTTPS bağlantılarını kabul eder. Yerel IP üzerinden https://192.168.1.50:8123 ile girdiğinizde tarayıcının sertifika uyarısı vermesi normaldir çünkü SSL sertifikası IP adresine değil alan adına (home.ornekalanadi.com) düzenlenmiştir. Hem mobil uygulamada hem tarayıcıda her zaman alan adınızı kullanın.

Otomasyon 1: Elektrik Kesintisi Takibi ve Otomatik DDNS Kurtarma

Evde elektrik kesilip geldiğinde genellikle iki sorun aynı anda yaşanır: Modem yeni bir dış IP adresi alır ve Home Assistant cihazı (ör. Raspberry Pi) fiber/VDSL modemden daha hızlı açıldığı için ilk açılış anında henüz internet bağlantısı yoktur. Sahada aktif kullandığımız bu otomasyon dört görevi tek çatı altında çözer:

  1. Nabız Kaydı: Her dakika input_datetime.son_nabiz yardımcısına güncel zaman damgasını yazar.
  2. Kesinti Tespiti ve Gecikmeli Kurtarma: Sistem açıldığında son nabız ile mevcut zaman arasındaki fark 2 dakikadan (120 sn) fazlaysa kesinti olduğunu algılar; modemin internete bağlanması için 1 dakika bekler, ardından DDNS’i günceller, güncel dış IP adresiyle telefonunuza bildirim gönderir ve Let’s Encrypt eklentisini tetikler.
  3. Periyodik Güncelleme: Her 10 dakikada bir DDNS kaydını tazeler.
  4. Canlı Test Modu: Gerçek kesinti beklemeden elektrik_kesintisi_test olayıyla bildirim akışını test etmenizi sağlar.

Ön Hazırlık: Yardımcı (Helper) ve Dış IP Sensörü

İlk olarak Ayarlar > Cihazlar ve Hizmetler > Yardımcılar > Yardımcı Oluştur > Tarih ve/veya saat adımlarını izleyerek Son Nabız adında, hem tarih hem saat içeren (input_datetime.son_nabiz) bir yardımcı oluşturun. Ardından bildirim mesajında güncel dış IP adresinizi görmek için configuration.yaml dosyasına şu REST sensörünü ekleyin:

sensor:
  - platform: rest
    name: Dis IP Adresi
    resource: https://api.ipify.org?format=json
    value_template: "{{ value_json.ip }}"
    scan_interval: 600

Elektrik Kesintisi ve DDNS Otomasyon YAML Kodu

alias: "Elektrik Kesintisi Takibi ve DDNS"
description: >-
  Her dakika nabız kaydeder. Açılışta 2 dakikadan uzun kesinti tespit ederse
  bildirim gönderir, DDNS'i günceller ve Let's Encrypt eklentisini çalıştırır.
  Ayrıca her 10 dakikada bir DDNS'i günceller.
triggers:
  - trigger: time_pattern
    minutes: /1
    id: nabiz_guncelle
  - trigger: homeassistant
    event: start
    id: sistem_baslangic
  - trigger: time_pattern
    minutes: /10
    id: dns_guncelle
  - trigger: event
    event_type: elektrik_kesintisi_test
    id: elektrik_kesintisi_test
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id: nabiz_guncelle
        sequence:
          - action: input_datetime.set_datetime
            target:
              entity_id: input_datetime.son_nabiz
            data:
              timestamp: "{{ now().timestamp() }}"

      - conditions:
          - condition: trigger
            id: sistem_baslangic
          - condition: template
            value_template: >
              {{ states('input_datetime.son_nabiz') not in
                 ['unknown', 'unavailable', 'none', ''] }}
        sequence:
          - variables:
              kesinti_saniye: >
                {{ (now().timestamp() -
                    as_timestamp(states('input_datetime.son_nabiz'), 0)) | int }}
              kesinti_dakika: >
                {{ ((now().timestamp() -
                    as_timestamp(states('input_datetime.son_nabiz'), 0)) / 60)
                   | round(1) }}
          - condition: template
            value_template: "{{ kesinti_saniye > 120 }}"
          - action: input_datetime.set_datetime
            target:
              entity_id: input_datetime.son_nabiz
            data:
              timestamp: "{{ now().timestamp() }}"
          - delay:
              minutes: 1
          - action: shell_command.update_ddns
            data: {}
          - variables:
              dis_ip: >
                {% set ip = states('sensor.dis_ip_adresi') %}
                {% if ip not in ['unknown', 'unavailable', 'none', ''] %}{{ ip }}{% else %}Bilinmiyor{% endif %}
          - action: notify.mobile_app_telefonum
            data:
              title: "Muhtemel Elektrik Kesintisi"
              message: >
                Yeniden başlama algılandı. Sistem yaklaşık {{ kesinti_dakika }}
                dakika kapalı kaldı. Güncel IP adresi: {{ dis_ip }}.
                DDNS güncellendi, sertifika kontrolü başlatıldı.
          - action: hassio.addon_start
            data:
              addon: core_letsencrypt

      - conditions:
          - condition: trigger
            id: elektrik_kesintisi_test
        sequence:
          - variables:
              test_kesinti_saniye: 900
              test_kesinti_dakika: "{{ (900 / 60) | round(1) }}"
              dis_ip: >
                {% set ip = states('sensor.dis_ip_adresi') %}
                {% if ip not in ['unknown', 'unavailable', 'none', ''] %}{{ ip }}{% else %}Bilinmiyor{% endif %}
          - action: notify.mobile_app_telefonum
            data:
              title: "TEST - Muhtemel Elektrik Kesintisi"
              message: >
                Elektrik kesintisi testi başarıyla çalıştı. Simüle edilen kesinti:
                {{ test_kesinti_dakika }} dakika ({{ test_kesinti_saniye }} saniye).
                IP adresi: {{ dis_ip }}. Test sırasında DDNS ve Let's Encrypt
                çalıştırılmadı.

      - conditions:
          - condition: trigger
            id: dns_guncelle
        sequence:
          - action: shell_command.update_ddns
            data: {}
mode: single
max_exceeded: silent

Otomasyon 2: Günlük SSL Sertifika Kontrolü ve Otomatik Yeniden Başlatma

Çoğu kullanıcının gözden kaçırdığı kritik bir teknik detay vardır: Let’s Encrypt eklentisi sertifikayı diskte yenilese bile, Home Assistant yeniden başlatılana kadar bellekteki (RAM) eski sertifikayı sunmaya devam eder.

Bunu tam otomatik hale getirmek için önce Ayarlar > Cihazlar ve Hizmetler > Entegrasyon Ekle > Certificate Expiry entegrasyonunu kurup alan adınızı (home.ornekalanadi.com, port 443 veya 8123) ekleyin. Ardından oluşan sensör adını (ör. sensor.sertifika_bitis) aşağıdaki otomasyonda kullanarak her gece 04:00’te sertifikayı kontrol ettirebilir ve yenilendiğinde Home Assistant’ın kendisini otomatik yeniden başlatmasını sağlayabilirsiniz:

alias: "SSL: Günlük Sertifika Kontrolü"
description: >-
  Her gün Let's Encrypt eklentisini çalıştırır. Yenilenmiş sertifikayı
  devreye almak için gerekirse Home Assistant'ı yeniden başlatır ve
  yenileme başarısızsa uyarı gönderir.
triggers:
  - trigger: time
    at: "04:00:00"
conditions: []
actions:
  - action: hassio.addon_start
    data:
      addon: core_letsencrypt
  - delay:
      minutes: 3
  - action: homeassistant.update_entity
    target:
      entity_id: sensor.sertifika_bitis
  - delay:
      seconds: 30
  - variables:
      kalan_gun: >
        {% set bitis = states('sensor.sertifika_bitis') %}
        {% if bitis in ['unknown', 'unavailable', 'none', ''] %}-1
        {% else %}{{ ((as_timestamp(bitis) - now().timestamp()) / 86400) | int }}{% endif %}
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ kalan_gun | int < 0 }}"
        sequence:
          - action: notify.mobile_app_telefonum
            data:
              title: "SSL Kontrolü: Sertifika okunamadı"
              message: >
                Sertifika bitiş tarihi okunamadı. Alan adınızın ve port
                yönlendirmenizin çalıştığını kontrol edin.
      - conditions:
          - condition: template
            value_template: "{{ kalan_gun | int < 14 }}"
        sequence:
          - action: notify.mobile_app_telefonum
            data:
              title: "SSL UYARISI: Sertifika yenilenemiyor"
              message: >
                Sertifikanın bitmesine {{ kalan_gun }} gün kaldı ve hâlâ
                yenilenmedi. Let's Encrypt eklentisinin günlüğüne bakın;
                en sık neden modemde 80 portunun yönlendirilmemiş olmasıdır.
          - action: homeassistant.restart
      - conditions:
          - condition: template
            value_template: "{{ kalan_gun | int < 29 }}"
        sequence:
          - action: notify.mobile_app_telefonum
            data:
              title: "SSL: Sertifika yenilendi"
              message: >
                Kullanılan sertifikanın bitmesine {{ kalan_gun }} gün kalmıştı.
                Yeni sertifikayı devreye almak için Home Assistant yeniden
                başlatılıyor.
          - action: homeassistant.restart
mode: single

Gerçek Bir Vaka Analizi: 80 Portu Yüzünden Açılmayan Android Uygulaması

İlk kurulumdan yaklaşık üç ay sonra Home Assistant Android Companion uygulaması aniden bağlantıyı kesti ve ekranda şu hata belirdi:

“SSL anlaşması gerçekleştirilemedi, lütfen sertifikanızın geçerli olduğundan emin olun.”

Let’s Encrypt eklentisinin günlük (Log) kayıtları incelendiğinde ise şu hata satırı görüldü:

Timeout during connect (likely firewall problem)

Kök Neden ve Çözüm Adımları: İlk kurulumda açılan 80 portu yönlendirmesi daha sonra modem sıfırlanırken silinmişti. Let’s Encrypt 90 günlük sürenin sonunda HTTP-01 doğrulaması için 80 portundan sunucuya ulaşamayınca sertifikayı yenileyemedi. Sorunu gidermek için:

  1. Modemde Dış 80 ──► İç 192.168.1.50:80 (TCP) kuralı kalıcı olarak yeniden tanımlandı.
  2. Let’s Encrypt eklentisi başlatıldı ve günlükte Successfully received certificate mesajı görüldü.
  3. Yeni sertifikanın RAM’e yüklenmesi için tarayıcıdan (gelişmiş güvenlik uyarısı geçilerek) girilip Home Assistant yeniden başlatıldı.
  4. Android uygulamasında Uygulama Bilgileri > Depolama > Önbelleği Temizle yapılarak eski geçersiz TLS oturum önbelleği sıfırlandı ve bağlantı anında normale döndü.

Sık Karşılaşılan Hatalar, NAT Loopback ve Çözüm Tablosu

Belirti / Hata MesajıOlası Kök NedenÇözüm Yöntemi
Günlükte Timeout during connectModemde 80 portu yönlendirilmemiş, iç IP değişmiş veya hat CGNAT arkasındaModem WAN IP’sini CGNAT için kontrol edin; 80 portunun Home Assistant sabit iç IP’sine yönlendirildiğini doğrulayın.
Günlükte Connection refusedModem uzaktan yönetim arayüzü veya NGINX gibi başka bir eklenti 80 portunu işgal ediyorModemin uzaktan web yönetimini kapatın; 80 portunu kullanan diğer eklentileri yenileme sırasında durdurun.
Dış ağdan (mobil veri) açılıyor, ev Wi-Fi ağında açılmıyorModem NAT Loopback (Hairpin NAT) özelliğini desteklemiyorModem ayarlarında NAT Loopback özelliğini açın veya AdGuard Home / Pi-hole üzerinde DNS Yeniden Yazma (DNS Rewrite) kuralı ekleyerek home.ornekalanadi.com adresini ev içinde doğrudan 192.168.1.50 IP’sine yönlendirin (bu durumda iç/dış port aynı, ör. 8123 olmalıdır).
Sertifika yenilendi ancak uygulama hâlâ hata veriyorHome Assistant yeniden başlatılmadı veya Android TLS önbelleği takılı kaldıHome Assistant’ı yeniden başlatın ve telefon uygulamasını zorla durdurup önbelleğini temizleyin.
Günlükte cp: can't create '/ssl//ssl/privkey.pem'Eklenti yapılandırmasında dosya adı yerine tam klasör yolu yazılmışkeyfile ve certfile satırlarına yalnızca privkey.pem ve fullchain.pem yazın; başında /ssl/ olmasın.

Kaynaklar ve Referanslar

Bu makale hazırlanırken aşağıdaki kaynaklardan ve orijinal teknik dökümantasyonlardan faydalanılmıştır:

Yukarı Çık