home-assistant/core · info · DuplicateWakeUpDetectedError
duplicate_wake_up_detected
duplicate_wake_up_detected
Error message
Duplicate wake-up detected for {wake_up_phrase} What it means
DuplicateWakeUpDetectedError raised inside PipelineRun.wake_word_detection when the same wake word phrase is detected again within WAKE_WORD_COOLDOWN seconds of the last detection (tracked per-phrase in hass.data[DATA_LAST_WAKE_UP] using time.monotonic). It is a normal, informational control-flow signal that suppresses echo/double-trigger, not a fault.
Source
Thrown at homeassistant/components/assist_pipeline/pipeline.py:815
) from src_error
_LOGGER.debug("wake-word-detection result %s", result)
if result is None:
wake_word_output: dict[str, Any] = {}
else:
# Avoid duplicate detections by checking cooldown
last_wake_up = self.hass.data[DATA_LAST_WAKE_UP].get(
result.wake_word_phrase
)
if last_wake_up is not None:
sec_since_last_wake_up = time.monotonic() - last_wake_up
if sec_since_last_wake_up < WAKE_WORD_COOLDOWN:
_LOGGER.debug(
"Duplicate wake word detection occurred for %s",
result.wake_word_phrase,
)
raise DuplicateWakeUpDetectedError(result.wake_word_phrase)
# Record last wake up time to block duplicate detections
self.hass.data[DATA_LAST_WAKE_UP][result.wake_word_phrase] = (
time.monotonic()
)
if result.queued_audio:
# Add audio that was pending at detection.
#
# Because detection occurs *after* the wake word was actually
# spoken, we need to make sure pending audio is forwarded to
# speech-to-text so the user does not have to pause before
# speaking the voice command.
audio_chunks_for_stt.extend(
EnhancedAudioChunk(
audio=chunk_ts[0],
timestamp_ms=chunk_ts[1],
speech_probability=None,View on GitHub (pinned to 58a3fdb3ea)
Solutions
- Treat it as expected: catch DuplicateWakeUpDetectedError and simply drop the run (the standard pipeline already does this).
- Lower mic gain or wake word sensitivity if false double-detections are frequent.
- Keep the wake word out of TTS responses/media to avoid self-triggering.
- Do not shorten the cooldown below your TTS tail length if you customize it.
Example fix
# before
result = await run.wake_word_detection(stream, chunks) # may raise unhandled
# after
from homeassistant.components.assist_pipeline.pipeline import DuplicateWakeUpDetectedError
try:
result = await run.wake_word_detection(stream, chunks)
except DuplicateWakeUpDetectedError:
return # ignore echo within cooldown Defensive patterns
Strategy: fallback
Validate before calling
import time
last = hass.data[DATA_LAST_WAKE_UP].get(phrase)
if last is not None and (time.monotonic() - last) < WAKE_WORD_COOLDOWN:
return # skip run, duplicate within cooldown Try / catch
Catch DuplicateWakeUpDetectedError explicitly (before generic WakeWordDetectionError handlers) and abort the run quietly - it is informational, not a failure.
Prevention
- Tune mic gain / detection sensitivity to reduce echo double-triggers.
- Avoid speaking the wake phrase in TTS announcements.
- Respect the built-in cooldown window rather than retrying immediately.
When it happens
Trigger: The detector fires twice for one utterance (echoing mic, sensitive model threshold), or the user says the wake word again within the cooldown window; the phrase's last wake-up timestamp is newer than WAKE_WORD_COOLDOWN, so the run aborts before starting STT.
Common situations: Speaker playing TTS that contains the wake phrase re-triggering detection; loud environments causing repeated detections; aggressive sensitivity settings on the wake word model.
Related errors
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/57fa7f5c9b225c4b.
Report an issue: GitHub.