diff --git a/src/data/matter.ts b/src/data/matter.ts
index d6c4de87a0..3872d81c51 100644
--- a/src/data/matter.ts
+++ b/src/data/matter.ts
@@ -2,6 +2,8 @@ import { UnsubscribeFunc } from "home-assistant-js-websocket";
import { navigate } from "../common/navigate";
import { HomeAssistant } from "../types";
import { subscribeDeviceRegistry } from "./device_registry";
+import { isComponentLoaded } from "../common/config/is_component_loaded";
+import { getThreadDataSetTLV, listThreadDataSets } from "./thread";
export enum NetworkType {
THREAD = "thread",
@@ -51,10 +53,30 @@ export interface MatterCommissioningParameters {
export const canCommissionMatterExternal = (hass: HomeAssistant) =>
hass.auth.external?.config.canCommissionMatter;
-export const startExternalCommissioning = (hass: HomeAssistant) =>
- hass.auth.external!.fireMessage({
+export const startExternalCommissioning = async (hass: HomeAssistant) => {
+ if (isComponentLoaded(hass, "thread")) {
+ const datasets = await listThreadDataSets(hass);
+ const preferredDataset = datasets.datasets.find(
+ (dataset) => dataset.preferred
+ );
+ if (preferredDataset) {
+ return hass.auth.external!.fireMessage({
+ type: "matter/commission",
+ payload: {
+ active_operational_dataset: (
+ await getThreadDataSetTLV(hass, preferredDataset.dataset_id)
+ ).tlv,
+ border_agent_id: preferredDataset.preferred_border_agent_id,
+ mac_extended_address: preferredDataset.preferred_extended_address,
+ },
+ });
+ }
+ }
+
+ return hass.auth.external!.fireMessage({
type: "matter/commission",
});
+};
export const redirectOnNewMatterDevice = (
hass: HomeAssistant,
diff --git a/src/external_app/external_messaging.ts b/src/external_app/external_messaging.ts
index 13a0663221..5e18414583 100644
--- a/src/external_app/external_messaging.ts
+++ b/src/external_app/external_messaging.ts
@@ -57,6 +57,11 @@ interface EMOutgoingMessageBarCodeNotify extends EMMessage {
interface EMOutgoingMessageMatterCommission extends EMMessage {
type: "matter/commission";
+ payload?: {
+ mac_extended_address: string | null;
+ border_agent_id: string | null;
+ active_operational_dataset: string | null;
+ };
}
interface EMOutgoingMessageImportThreadCredentials extends EMMessage {
@@ -136,7 +141,7 @@ interface EMOutgoingMessageThreadStoreInPlatformKeychain extends EMMessage {
type: "thread/store_in_platform_keychain";
payload: {
mac_extended_address: string;
- border_agent_id: string | null;
+ border_agent_id: string;
active_operational_dataset: string;
};
}
diff --git a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
index aa4a98a867..23dfce2198 100644
--- a/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
+++ b/src/panels/config/integrations/integration-panels/thread/thread-config-panel.ts
@@ -106,13 +106,11 @@ export class ThreadConfigPanel extends SubscribeMixin(LitElement) {
"ui.panel.config.thread.add_dataset_from_tlv"
)}
- ${!this._otbrInfo
- ? html`