Same Voice text does not execute internal voice HAS

Hi,

I have had this issue for a while. Sometimes when my voice to text (STT) is translated (using faster-whisper) correctly. The internal HAS voice text processing is not executed, instead the LLM is. Below setting timer for the same text does not execute the first attempt. Any idea why?

Where the one below, same text, works fine:

The timers are on each voice device, not in HA. AFAIK, there are no built in intents to handle timer entities within HA.

The really weird thing is, if there is a timer instantiated on one of your voice devices, you can use the Assist text tool to run all the intents that modify it i.e HassCancelAllTimers, HassCancelTimer, HassIncreaseTimer, HassDecreaseTimer, HassPauseTimer, HassUnpauseTimer, HassTimerStatus.

@Didgeridrew Thxs for the reply, but what you saying is not entirely true. Below is a detail explanation of how the timers work, I still don't know why timers fail for the exact same syntax, except for the period.

When everything works perfectly using the native Home Assistant intent engine, the architecture relies heavily on the Voice PE’s internal hardware for the actual ticking clock. Here is the step-by-step flow:

1. Audio Capture & Streaming

You trigger the wake word (e.g., "Ok Nabu") and say, "Set a timer for six minutes." The Voice PE’s microphone captures your voice and immediately begins streaming the raw audio data over your network to your Home Assistant server.

2. Speech-to-Text (STT)

Home Assistant receives the audio stream and hands it to your configured Speech-to-Text engine (in my case, Faster-Whisper running locally). Faster-Whisper transcribes the audio into a raw text string.

3. Intent Recognition (The Local Engine)

Home Assistant takes that text string and runs it through its internal conversation agent. The strict local grammar rules successfully matches text to the built-in timer intent.

4. The Handoff (HA to Voice PE)

This is the critical step. Because the local engine knows this request originated from the Voice PE (a recognized satellite device), Home Assistant does not create a standard timer entity in its core database. Instead, Home Assistant sends a command down the ESPHome/Wyoming API back to the Voice PE that essentially says: "Start your internal timer for 360 seconds." ### 5. On-Device Countdown (The ESP32 takes over) Once the Voice PE receives that command, Home Assistant’s job is completely finished. The ESP32 microchip inside the Voice PE assumes full control.

  • It tracks the seconds internally.
  • It visually updates the LED ring on the device to show the progress of the countdown.

6. Local Alarm & Dismissal

When the ESP32’s internal clock hits zero, the Voice PE plays the alarm chime using its own hardware. The device will continue to ring until you physically press the button on the Voice PE or issue a local stop command.

Why the Architecture works this way (and why it is frustrating)

Because steps 5 and 6 happen entirely on the ESP32 chip, this architecture creates an "ephemeral" timer. This is why:

  • No Dashboard Visibility: You cannot view the timer counting down on your phone or wall tablet, because Home Assistant Core isn't tracking it—the Voice PE is.
  • No Cross-Device Control: You cannot ask the bedroom speaker to cancel the kitchen's Voice PE timer.
  • Data Loss on Reboot: If the Voice PE loses power or reboots during the 6 minutes, the timer disappears forever.

To get around this and force timers to live centrally in Home Assistant (so you can see them on dashboards), users often have to rely on complex workarounds, custom YAML templates, or community firmware mods like the "Voice Assistant Persistent Timers" project.

Did you just chatgpt this up? Because it isnt accurate

Timers are part of the Intent component here. These are exposed to Assist wrapped the IntentTool class. They are implemented within HA, but only exposed for input devices that have registered themselves able to handle timer events

See the roadmap entry on this here

I just set a timer, and rebooted my Voice PE. The timer still went off.

Thxs for the reply. I did use Gemini to help debug my original issue. It seems mostly accurate. Issue is still not resolved.

You said, "Timers are part of the Intent component." Ok, but they still have an intent, HasStartTimer. Its part of the internal Intent, right? Once that intent is trigger, it sends the timer to the device (Voice PE).

For the " No Dashboard Visibility, this is for the future, roadmap, right? Not current functionality. I'm using release 2026.5, timer is not visible to Dashboard, right?

The only item you mentioned that may not be accurate is the reboot of the Voice PE loses the timer. When I rebooted the Voice PE, the display timer in the ring disappeared. I assume the timer was gone. I tried again, it seems like the timer is still active.

It seems mostly accurate. Issue is still not resolved.

Except that it isn't, and it's going to lead you astray on resolving your issue I've linked you source code references, and even the roadmap linked clearly states they are maintained by the Intent integration.

You said, "Timers are part of the Intent component." Ok, but they still have an intent, HasStartTimer. Its part of the internal Intent, right? Once that intent is trigger, it sends the timer to the device (Voice PE).

It receives update to the timer, but does not maintain the timer. There is absolutely zero reliance on the internal timer of the voice satellite here... it's just receiving events on the timer from Home Assistant.

For the " No Dashboard Visibility, this is for the future, roadmap, right? Not current functionality. I'm using release 2026.5, timer is not visible to Dashboard, right?

It very clearly states where timers are maintained, right now.

The only item you mentioned that may not be accurate is the reboot of the Voice PE loses the timer. When I rebooted the Voice PE, the display timer in the ring disappeared. I assume the timer was gone. I tried again, it seems like the timer is still active.

From when the timer was created, you rebooted the Voice PE, and the next timer event is the timer expiration and the Voice PE then emits its alarm. When the Voice PE reboots, its lost track of the timer that HA still controls.

Blindly trusting AI is and regurgitating it is sending you down the wrong path, and you arent going to solve your issue that way. There are people discussing the same issue as you are having - the "local agent" being ignored by HA over on their github here.

OK, Thxs for the info!!!

I stand corrected. I guess either things changed or were miss spoken. In the previous HA release info sessions, I remember they said that timers were local to the Voice PE. They really are not local, they are maintained by the Intent integration.

Thxs again,
Kevin