ਸਾਰੇ Home Assistant ਵੌਇਸ ਕਮਾਂਡਾਂ ਨੂੰ ਇੱਕ ਕਸਟਮ ਏਜੰਟ ਵੱਲ ਰੂਟ ਕਰੋ
ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ ਕਿ ਹਰ ਵੌਇਸ ਕਮਾਂਡ ਤੁਹਾਡੇ ਆਪਣੇ ਏਜੰਟ ਕੋਲ ਜਾਵੇ। ਸ਼ਾਇਦ ਇਹ ਇੱਕ ਲੋਕਲ LLM ਹੋਵੇ ਜਾਂ MCP ਸਪੋਰਟ ਵਾਲਾ ਕੋਈ ਅਸਿਸਟੈਂਟ ਹੋਵੇ।
Home Assistant 2026.5 ਅਤੇ ਇਸ ਤੋਂ ਨਵੇਂ ਵਰਜ਼ਨਾਂ ਵਿੱਚ, ਇਸ ਨੂੰ ਕਰਨ ਦਾ ਮਿਆਰੀ ਤਰੀਕਾ ਅਸਫਲ ਰਹਿੰਦਾ ਹੈ।
ਜੇਕਰ ਤੁਸੀਂ ਕਿਸੇ automation ਵਿੱਚ ਸਿੱਧਾ wildcard ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ HTTP 500 error ਮਿਲਦਾ ਹੈ। ਇਹ error ਇਸ ਲਈ ਆਉਂਦਾ ਹੈ ਕਿਉਂਕਿ ਸਿਸਟਮ ਅਜਿਹੀ ਲਿਸਟ ਲੱਭਦਾ ਹੈ ਜੋ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।
ਭਾਵੇਂ ਤੁਸੀਂ error ਤੋਂ ਬਚ ਵੀ ਜਾਓ, ਫਿਰ ਵੀ built-in commands ਤੁਹਾਡੀਆਂ queries ਨੂੰ ਹਾਈਜੈਕ (hijack) ਕਰ ਲੈਣਗੀਆਂ। ਜੇਕਰ ਤੁਸੀਂ ਪੁੱਛਦੇ ਹੋ "When is the next low tide," ਤਾਂ Home Assistant ਇਸ ਦੀ ਬਜਾਏ ਅਗਲਾ ਗੀਤ ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦਾ ਹੈ।
ਇੱਥੇ ਦੋਵਾਂ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨ ਦਾ ਤਰੀਕਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
ਸਮੱਸਿਆਵਾਂ
MissingListError: ਜਦੋਂ ਤੁਸੀਂ ਕਿਸੇ automation ਵਿੱਚ {text} ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ Home Assistant "text" ਨਾਮ ਦੀ ਇੱਕ ਰਜਿਸਟਰਡ ਲਿਸਟ ਦੀ ਉਮੀਦ ਕਰਦਾ ਹੈ। ਕਿਉਂਕਿ ਤੁਸੀਂ automations ਵਿੱਚ ਲਿਸਟਾਂ ਨੂੰ ਡੈਫਾਈਨ ਨਹੀਂ ਕਰ ਸਕਦੇ, ਇਸ ਲਈ ਸਿਸਟਮ ਕ੍ਰੈਸ਼ ਹੋ ਜਾਂਦਾ ਹੈ।
Intent Hijacking: "turn on" ਜਾਂ "play next" ਵਰਗੀਆਂ built-in commands ਤੁਹਾਡੇ ਕਸਟਮ ਏਜੰਟ ਨੂੰ ਮੌਕਾ ਮਿਲਣ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਤੁਹਾਡੇ ਸ਼ਬਦਾਂ ਨਾਲ ਮੇਲ ਖਾ ਲੈਂਦੀਆਂ ਹਨ।
ਹੱਲ
ਤੁਹਾਨੂੰ catch-all logic ਨੂੰ automations ਤੋਂ ਹਟਾ ਕੇ custom sentences ਵਿੱਚ ਲਿਆਉਣਾ ਪਵੇਗਾ। ਇਹ ਤੁਹਾਨੂੰ ਇੱਕ ਅਸਲੀ wildcard ਡੈਫਾਈਨ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ ਅਤੇ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀ ਕਮਾਂਡ ਪਹਿਲਾਂ ਲੋਡ ਹੋਵੇ।
ਸਟੈਪ 1: ਇੱਕ custom sentence ਬਣਾਓ ਆਪਣੇ custom_sentences ਫੋਲਡਰ ਵਿੱਚ ਇੱਕ ਫਾਈਲ ਬਣਾਓ। ਇਹ ਇੱਕ ਅਸਲੀ wildcard ਲਿਸਟ ਨੂੰ ਰਜਿਸਟਰ ਕਰਦਾ ਹੈ।
language: "en"
intents:
NaturaliQuery:
data:
- sentences:
- "{text}"
lists:
text:
wildcard: true
ਸਟੈਪ 2: ਇੱਕ intent_script ਦੀ ਵਰਤੋਂ ਕਰੋ Automation ਦੀ ਬਜਾਏ, ਆਪਣੇ configuration.yaml ਵਿੱਚ ਇੱਕ intent_script ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਰਿਸਪਾਂਸ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ ਅਤੇ ਵੌਇਸ ਪਾਈਪਲਾਈਨ ਨੂੰ ਸੁਚਾਰੂ ਰੱਖਦਾ ਹੈ।
intent_script:
NaturaliQuery:
speech:
text: "One moment."
action:
- action: mqtt.publish
data:
topic: my/agent/ask
payload: '{"text": "{{ text }}"}'
ਇਹ ਕਿਉਂ ਕੰਮ ਕਰਦਾ ਹੈ
• Wildcard ਲਿਸਟ HTTP 500 error ਨੂੰ ਰੋਕਦੀ ਹੈ। • Custom sentences built-in intents ਤੋਂ ਪਹਿਲਾਂ ਲੋਡ ਹੁੰਦੇ ਹਨ। ਤੁਹਾਡਾ ਏਜੰਟ ਕਮਾਂਡ ਨੂੰ ਪਹਿਲਾਂ ਫੜ ਲੈਂਦਾ ਹੈ। • intent_script ਦੀ ਵਰਤੋਂ ਕਰਨ ਨਾਲ ਕਈ ਹਾਰਡਵੇਅਰ ਸੈਟੇਲਾਈਟਾਂ 'ਤੇ ਵੌਇਸ ਡੈੱਡਲੌਕ (voice deadlocks) ਤੋਂ ਬਚਿਆ ਜਾ ਸਕਦਾ ਹੈ।
ਨੋਟ: ਇੱਕ ਪੂਰਾ wildcard ਸਭ ਕੁਝ ਫੜ ਲਵੇਗਾ, ਜਿਸ ਵਿੱਚ "turn on the lights" ਵੀ ਸ਼ਾਮਲ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ ਨੈਟਿਵ ਕੰਟਰੋਲ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਆਪਣੇ custom sentence ਵਿੱਚ ਇੱਕ ਪ੍ਰੀਫਿਕਸ (prefix) ਸ਼ਬਦ ਜੋੜੋ ਤਾਂ ਜੋ ਇਹ ਉਦੋਂ ਹੀ ਚਾਲੂ ਹੋਵੇ ਜਦੋਂ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ।
Optional learning community: https://t.me/GyaanSetuAi
