diff --git a/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts b/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts index 1b688c8ce0..fe446391dd 100644 --- a/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts +++ b/src/dialogs/voice-command-dialog/show-ha-voice-command-dialog.ts @@ -1,8 +1,18 @@ import { fireEvent } from "../../common/dom/fire_event"; +import { HomeAssistant } from "../../types"; const loadVoiceCommandDialog = () => import("./ha-voice-command-dialog"); -export const showVoiceCommandDialog = (element: HTMLElement): void => { +export const showVoiceCommandDialog = ( + element: HTMLElement, + hass: HomeAssistant +): void => { + if (hass.auth.external?.config.hasAssist) { + hass.auth.external!.fireMessage({ + type: "assist/show", + }); + return; + } fireEvent(element, "show-dialog", { dialogTag: "ha-voice-command-dialog", dialogImport: loadVoiceCommandDialog, diff --git a/src/external_app/external_messaging.ts b/src/external_app/external_messaging.ts index 3cc58ffcee..5c10155138 100644 --- a/src/external_app/external_messaging.ts +++ b/src/external_app/external_messaging.ts @@ -95,12 +95,21 @@ interface EMOutgoingMessageSidebarShow extends EMMessage { type: "sidebar/show"; } +interface EMOutgoingMessageAssistShow extends EMMessage { + type: "assist/show"; + payload?: { + pipeline_id?: string; + start_listening?: boolean; + }; +} + type EMOutgoingMessageWithoutAnswer = | EMOutgoingMessageHaptic | EMOutgoingMessageConnectionStatus | EMOutgoingMessageAppConfiguration | EMOutgoingMessageTagWrite | EMOutgoingMessageSidebarShow + | EMOutgoingMessageAssistShow | EMOutgoingMessageExoplayerPlayHLS | EMOutgoingMessageExoplayerResize | EMOutgoingMessageExoplayerStop @@ -152,6 +161,7 @@ export interface ExternalConfig { canWriteTag: boolean; hasExoPlayer: boolean; canCommissionMatter: boolean; + hasAssist: boolean; } export class ExternalMessaging { diff --git a/src/panels/lovelace/hui-root.ts b/src/panels/lovelace/hui-root.ts index 288646a280..3017c1ad3d 100644 --- a/src/panels/lovelace/hui-root.ts +++ b/src/panels/lovelace/hui-root.ts @@ -567,7 +567,7 @@ class HUIRoot extends LitElement { if (searchParams.edit === "1") { this.lovelace!.setEditMode(true); } else if (searchParams.conversation === "1") { - showVoiceCommandDialog(this); + showVoiceCommandDialog(this, this.hass); window.history.replaceState( null, "", @@ -793,7 +793,7 @@ class HUIRoot extends LitElement { } private _showVoiceCommandDialog(): void { - showVoiceCommandDialog(this); + showVoiceCommandDialog(this, this.hass); } private _handleEnableEditMode(ev: CustomEvent): void { diff --git a/src/panels/shopping-list/ha-panel-shopping-list.ts b/src/panels/shopping-list/ha-panel-shopping-list.ts index 41d9c63931..94f675a601 100644 --- a/src/panels/shopping-list/ha-panel-shopping-list.ts +++ b/src/panels/shopping-list/ha-panel-shopping-list.ts @@ -76,7 +76,7 @@ class PanelShoppingList extends LitElement { } private _showVoiceCommandDialog(): void { - showVoiceCommandDialog(this); + showVoiceCommandDialog(this, this.hass); } static get styles(): CSSResultGroup {