सभी Home Assistant वॉइस कमांड्स को एक कस्टम एजेंट पर रूट करें

आप चाहते हैं कि हर वॉइस कमांड आपके अपने एजेंट के पास जाए। शायद वह एक लोकल LLM हो या MCP सपोर्ट वाला कोई असिस्टेंट।

Home Assistant 2026.5 और उसके बाद के वर्ज़न में, इसे करने का मानक तरीका विफल हो जाता है।

यदि आप ऑटोमेशन में सीधे वाइल्डकार्ड (wildcard) का उपयोग करते हैं, तो आपको HTTP 500 एरर मिलता है। यह एरर इसलिए आता है क्योंकि सिस्टम ऐसी लिस्ट को खोजता है जो मौजूद ही नहीं है।

यदि आप एरर से बच भी जाते हैं, तो भी बिल्ट-इन कमांड्स आपकी क्वेरीज़ को हाईजैक कर लेंगे। यदि आप पूछते हैं "When is the next low tide," तो Home Assistant इसके बजाय अगला गाना चलाने की कोशिश कर सकता है।

यहाँ इन दोनों समस्याओं को ठीक करने का तरीका बताया गया है।

समस्याएँ

  1. MissingListError: जब आप ऑटोमेशन में {text} का उपयोग करते हैं, तो Home Assistant "text" नाम की एक रजिस्टर्ड लिस्ट की अपेक्षा करता है। चूंकि आप ऑटोमेशन में लिस्ट को परिभाषित (define) नहीं कर सकते, इसलिए सिस्टम क्रैश हो जाता है।

  2. Intent Hijacking: "turn on" या "play next" जैसे बिल्ट-इन कमांड्स आपके कस्टम एजेंट को मौका मिलने से पहले ही आपके शब्दों से मैच हो जाते हैं।

समाधान

आपको 'catch-all' लॉजिक को ऑटोमेशन से हटाकर कस्टम सेंटेंस (custom sentences) में डालना होगा। इससे आप एक वास्तविक वाइल्डकार्ड को परिभाषित कर पाएंगे और यह सुनिश्चित होगा कि आपका कमांड सबसे पहले लोड हो।

स्टेप 1: एक कस्टम सेंटेंस बनाएँ

अपने custom_sentences फोल्डर में एक फाइल बनाएँ। यह एक वास्तविक वाइल्डकार्ड लिस्ट को रजिस्टर करता है।

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

स्टेप 2: intent_script का उपयोग करें

ऑटोमेशन के बजाय, अपने configuration.yaml में intent_script का उपयोग करें। यह रिस्पॉन्स को हैंडल करता है और वॉइस पाइपलाइन को सुचारू रखता है।

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

यह क्यों काम करता है

• वाइल्डकार्ड लिस्ट HTTP 500 एरर को रोकती है। • कस्टम सेंटेंस बिल्ट-इन इंटेंट्स (intents) से पहले लोड होते हैं। आपका एजेंट कमांड को सबसे पहले पकड़ लेता है। • intent_script का उपयोग करने से कई हार्डवेयर सैटेलाइट्स पर वॉइस डेडलॉक (voice deadlocks) की समस्या नहीं होती।

नोट: एक फुल वाइल्डकार्ड "turn on the lights" सहित सब कुछ पकड़ लेगा। यदि आप नेटिव कंट्रोल बनाए रखना चाहते हैं, तो अपने कस्टम सेंटेंस में एक प्रीफ़िक्स शब्द जोड़ें ताकि यह केवल तभी ट्रिगर हो जब आप चाहें।

स्रोत: https://dev.to/clarkbw--/route-all-home-assistant-voice-to-a-custom-agent-with-a-wildcard-sentence-4iee

वैकल्पिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi