diff --git a/plugins/zwave/package-lock.json b/plugins/zwave/package-lock.json index 4ca13c0a9..e65cb928b 100644 --- a/plugins/zwave/package-lock.json +++ b/plugins/zwave/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/zwave", - "version": "0.0.47", + "version": "0.0.48", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/zwave", - "version": "0.0.47", + "version": "0.0.48", "license": "Apache", "dependencies": { "@scrypted/sdk": "file:../../sdk", diff --git a/plugins/zwave/package.json b/plugins/zwave/package.json index 061675b81..e4729d113 100644 --- a/plugins/zwave/package.json +++ b/plugins/zwave/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/zwave", - "version": "0.0.47", + "version": "0.0.48", "description": "Z-Wave USB Controller for Scrypted", "author": "Scrypted", "license": "Apache", diff --git a/plugins/zwave/src/main.ts b/plugins/zwave/src/main.ts index 4c1111349..cd7ae3b27 100644 --- a/plugins/zwave/src/main.ts +++ b/plugins/zwave/src/main.ts @@ -42,6 +42,7 @@ export class ZwaveControllerProvider extends ScryptedDeviceBase implements Devic driver: Driver; controller: ZWaveController; driverReady: Promise; + dskDeferred: {reject: any, resolve: any}; constructor() { super(); @@ -210,6 +211,11 @@ export class ZwaveControllerProvider extends ScryptedDeviceBase implements Devic type: 'button', description: 'Enter exclusion mode and remove devices.', }, + { + key: 'confirmPin', + title: 'Confirm PIN', + description: 'Some devices will require confirmation of a PIN while including them. Enter the PIN here when prompted.', + } ] } @@ -220,8 +226,17 @@ export class ZwaveControllerProvider extends ScryptedDeviceBase implements Devic return requested; }, validateDSKAndEnterPIN: async (dsk: string) => { - this.console.error('validateDSKAndEnterPIN not implemented in zwave plugin'); - throw new Error("validateDSKAndEnterPIN Function not implemented."); + this.console.log('dsk received', sdk); + return new Promise((resolve, reject) => { + if (this.dskDeferred) { + this.dskDeferred.reject(new Error('new dsk received')); + this.dskDeferred = undefined; + } + this.dskDeferred = { + resolve, + reject, + }; + }); }, abort: function (): void { this.console.log('abort'); @@ -257,6 +272,11 @@ export class ZwaveControllerProvider extends ScryptedDeviceBase implements Devic this.exclusion(); return; } + if (key === 'confirmPin') { + this.dskDeferred?.resolve(value.toString()); + this.dskDeferred = undefined; + return; + } this.storage.setItem(key, value as string);