Currently, I’m using a single ESP32-S3 as a voice assistant. I’ve enabled it to have two microWakeWords onboard, either of which can be instantly used at any given moment. What I’d like to do is have one microWakeWord use speech to phrase (because its response time is near-instant) and the other microWakeWord to use speech to text (because can handle much more complex requests, even though it’s slower).
But I cannot do this, because there is no exposed identifier of either microWakeWord.
To summarize:
- ESPHome already knows which local wake word fired.
- Home Assistant currently discards that information (or at least doesn’t expose it to the user).
- Exposing the wake-word identifier - or allowing a wake-word-to-pipeline mapping - would enable multiple local wake words to drive different Assist pipelines.
With these identifiers exposed, possibilities start to get interesting. For example, imagine in such a scenario, I’ve now created/trained two similar, but not identical microWakeWords like the following, enabling both on a single ESP32-S3. I could assign them like this:
microWakeWord 1 - “Marvin” (triggers speech to phrase) - “turn on the light”
microWakeWord 2 - “Marvin_think_and” (triggers speech to text) “play the song Tomorrow Never Knows in the living room”
This would not only work really well, but there’s a natural, easily intuitive elegance here, leaving the user with the impression that it’s all Marvin, but that Marvin needs a little more time to think and perform a more complex task…just like a person might.
But for this to happen, identifiers of those microwakewords must be exposed to the user.
*edited for clarity