From 79c7cf59ee5685a4c9fff229ba405a918d4ab758 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 21 Nov 2024 11:07:56 +0100 Subject: [PATCH] =?UTF-8?q?Add=20warning=20for=20muted=20voice=20assistant?= =?UTF-8?q?=20or=20when=20not=20heard=20wakeword=20in=201=E2=80=A6=20(#229?= =?UTF-8?q?34)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add warning for muted voice assistant or when not heard wakeword in 15 secs --- .../voice-assistant-setup-dialog.ts | 30 ++++----------- .../voice-assistant-setup-step-wake-word.ts | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 23 deletions(-) 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}