diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts index 4d7a5d8535..f63d20fb0c 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts @@ -160,20 +160,16 @@ export class HaVoiceAssistantSetupDialog extends LitElement { : this._step === STEP.CHECK ? html`` : this._step === STEP.WAKEWORD ? html`` : this._step === STEP.CHANGE_WAKEWORD @@ -181,11 +177,7 @@ export class HaVoiceAssistantSetupDialog extends LitElement { ` : this._step === STEP.AREA @@ -199,11 +191,7 @@ export class HaVoiceAssistantSetupDialog extends LitElement { ? html`` : this._step === STEP.CLOUD ? html`` : nothing} diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-wake-word.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-wake-word.ts index 442ca54192..614ad78678 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-wake-word.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-wake-word.ts @@ -11,6 +11,8 @@ import { interceptWakeWord } from "../../data/assist_satellite"; import type { HomeAssistant } from "../../types"; import { AssistantSetupStyles } from "./styles"; import { STEP } from "./voice-assistant-setup-dialog"; +import type { EntityRegistryDisplayEntry } from "../../data/entity_registry"; +import { computeDomain } from "../../common/entity/compute_domain"; @customElement("ha-voice-assistant-setup-step-wake-word") export class HaVoiceAssistantSetupStepWakeWord extends LitElement { @@ -21,10 +23,19 @@ export class HaVoiceAssistantSetupStepWakeWord extends LitElement { @property() public assistEntityId?: string; + @property({ attribute: false }) + public deviceEntities?: EntityRegistryDisplayEntry[]; + + @state() public _muteSwitchEntity?: string; + @state() private _detected = false; + @state() private _timedout = false; + private _sub?: Promise; + private _timeout?: number; + disconnectedCallback(): void { super.disconnectedCallback(); this._stopListeningWakeWord(); @@ -35,10 +46,25 @@ export class HaVoiceAssistantSetupStepWakeWord extends LitElement { if (changedProperties.has("assistEntityId")) { this._detected = false; + this._muteSwitchEntity = this.deviceEntities?.find( + (ent) => + computeDomain(ent.entity_id) === "switch" && + ent.entity_id.includes("mute") + )?.entity_id; + if (!this._muteSwitchEntity) { + this._startTimeOut(); + } this._listenWakeWord(); } } + private _startTimeOut() { + this._timeout = window.setTimeout(() => { + this._timeout = undefined; + this._timedout = true; + }, 15000); + } + private _activeWakeWord = memoizeOne( (config: AssistSatelliteConfiguration | undefined) => { if (!config) { @@ -78,6 +104,16 @@ export class HaVoiceAssistantSetupStepWakeWord extends LitElement {

To make sure the wake word works for you.

`} + ${this._timedout + ? html`We have not heard the wake word, is your device muted?` + : this._muteSwitchEntity && + this.hass.states[this._muteSwitchEntity].state === "on" + ? html`Please unmute your device to continue.` + : nothing}