Tüm Home Assistant Ses Komutlarını Özel Bir Ajan'a Yönlendirin

Her sesli komutun kendi ajanınıza gitmesini istiyorsunuz. Bu, yerel bir LLM veya MCP desteğine sahip bir asistan olabilir.

Home Assistant 2026.5 ve daha yeni sürümlerde, bunu yapmanın standart yolu başarısız oluyor.

Bir otomasyonda yalın bir wildcard (joker karakter) kullanırsanız, HTTP 500 hatası alırsınız. Bu hata, sistemin var olmayan bir listeyi araması nedeniyle oluşur.

Hatadan kaçınsanız bile, yerleşik komutlar sorgularınızı ele geçirecektir. Eğer "Bir sonraki alçak gelgit ne zaman?" diye sorarsanız, Home Assistant bunun yerine bir sonraki şarkıyı çalmaya çalışabilir.

İşte her iki sorunu da nasıl düzelteceğiniz.

Sorunlar

  1. MissingListError: Bir otomasyonda {text} kullandığınızda, Home Assistant "text" adında kayıtlı bir liste bekler. Otomasyonlarda liste tanımlayamadığınız için sistem çöker.

  2. Intent Hijacking (Niyet Ele Geçirme): "turn on" veya "play next" gibi yerleşik komutlar, özel ajanınıza fırsat tanımadan kelimelerinizle eşleşir.

Çözüm

Tümünü yakalama (catch-all) mantığını otomasyonlardan çıkarıp özel cümlelere (custom sentences) taşımanız gerekir. Bu, gerçek bir wildcard tanımlamanıza olanak tanır ve komutunuzun ilk önce yüklenmesini sağlar.

Adım 1: Özel bir cümle oluşturun

custom_sentences klasörünüzde bir dosya oluşturun. Bu, gerçek bir wildcard listesi kaydeder.

language: "en"
intents:
  NaturaliQuery:
    data:
      - sentences:
          - "{text}"
lists:
  text:
    wildcard: true

Adım 2: Bir intent_script kullanın

Bir otomasyon yerine, configuration.yaml dosyanızda bir intent_script kullanın. Bu, yanıtı işler ve ses hattının (voice pipeline) sorunsuz çalışmasını sağlar.

intent_script:
  NaturaliQuery:
    speech:
      text: "One moment."
    action:
      - action: mqtt.publish
        data:
          topic: my/agent/ask
          payload: '{"text": "{{ text }}"}'

Neden bu işe yarar

• Wildcard listesi HTTP 500 hatasını durdurur. • Özel cümleler, yerleşik intent'lerden önce yüklenir. Ajanınız komutu ilk önce yakalar. • intent_script kullanmak, birçok donanım uydu cihazında (hardware satellites) ses kilitlenmelerini (voice deadlocks) önler.

Not: Tam bir wildcard, "turn on the lights" dahil her şeyi yakalayacaktır. Yerel kontrolü korumak istiyorsanız, özel cümlenize bir ön ek kelime ekleyin; böylece yalnızca istediğinizde tetiklenir.

Source: https://dev.to/clarkbw--/route-all-home-assistant-voice-to-a-custom-agent-with-a-wildcard-sentence-4iee

İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi