ZwaveJS: Handle S2 inclusion via Inclusion Controller (#23100)

This commit is contained in:
Petar Petrov 2024-12-06 11:32:45 +02:00 committed by GitHub
parent af049274d9
commit e02736b4e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 40 additions and 1 deletions

View File

@ -398,6 +398,11 @@ export interface ZWaveJSRemovedNode {
label: string;
}
export interface ZWaveJSS2InclusionValidateDskAndEnterPinMessage {
event: "validate dsk and enter pin";
dsk: string;
}
export const enum NodeStatus {
Unknown,
Asleep,
@ -808,6 +813,21 @@ export const subscribeZwaveNodeStatistics = (
}
);
export const subscribeS2Inclusion = (
hass: HomeAssistant,
entry_id: string,
callbackFunction: (
message: ZWaveJSS2InclusionValidateDskAndEnterPinMessage
) => void
): Promise<UnsubscribeFunc> =>
hass.connection.subscribeMessage(
(message: any) => callbackFunction(message),
{
type: "zwave_js/subscribe_s2_inclusion",
entry_id,
}
);
export const fetchZwaveIsNodeFirmwareUpdateInProgress = (
hass: HomeAssistant,
device_id: string

View File

@ -105,11 +105,21 @@ class DialogZWaveJSAddNode extends LitElement {
}
public async showDialog(params: ZWaveJSAddNodeDialogParams): Promise<void> {
if (this._status) {
// already started
return;
}
this._params = params;
this._entryId = params.entry_id;
this._status = "loading";
this._checkSmartStartSupport();
this._startInclusion();
if (params.dsk) {
this._status = "validate_dsk_enter_pin";
this._dsk = params.dsk;
this._startInclusion(undefined, params.dsk);
} else {
this._startInclusion();
}
}
@query("#pin-input") private _pinInput?: HaTextField;

View File

@ -2,6 +2,7 @@ import { fireEvent } from "../../../../../common/dom/fire_event";
export interface ZWaveJSAddNodeDialogParams {
entry_id: string;
dsk?: string;
onStop?: () => void;
}

View File

@ -36,6 +36,7 @@ import {
fetchZwaveProvisioningEntries,
InclusionState,
setZwaveDataCollectionPreference,
subscribeS2Inclusion,
subscribeZwaveControllerStatistics,
} from "../../../../../data/zwave_js";
import { showOptionsFlowDialog } from "../../../../../dialogs/config-flow/show-dialog-options-flow";
@ -102,6 +103,13 @@ class ZWaveJSConfigDashboard extends SubscribeMixin(LitElement) {
this._statistics = message;
}
),
subscribeS2Inclusion(this.hass, this.configEntryId, (message) => {
showZWaveJSAddNodeDialog(this, {
entry_id: this.configEntryId,
dsk: message.dsk,
onStop: () => setTimeout(() => this._fetchData(), 100),
});
}),
];
}