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

  1. Treat it as expected: catch DuplicateWakeUpDetectedError and simply drop the run (the standard pipeline already does this).
  2. Lower mic gain or wake word sensitivity if false double-detections are frequent.
  3. Keep the wake word out of TTS responses/media to avoid self-triggering.
  4. 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

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.