From 967afa0a020255084b37d007061943f8c9a49045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 11:16:01 +0200 Subject: [PATCH 1/6] fix: autoclose by retriggering listener on SET --- src/accessories/garageDoorOpener.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/accessories/garageDoorOpener.ts b/src/accessories/garageDoorOpener.ts index 1a0b3e5..79fc855 100644 --- a/src/accessories/garageDoorOpener.ts +++ b/src/accessories/garageDoorOpener.ts @@ -238,7 +238,8 @@ export const setupGarageDoorOpener = ( assignCurrentDoorState(CurrentDoorState.OPEN); if (autoCloseDelay) { await waitFor(`${deviceId}.pending`, autoCloseDelay); - assignCurrentDoorState(CurrentDoorState.CLOSED); + const targetDoorState = service.getCharacteristic(Characteristic.TargetDoorState); + targetDoorState.setValue(Characteristic.TargetDoorState.CLOSED); } } catch (err) { // debug(`Aborted OPEN update with delay=${chalkNumber(delay)}`); From 8ef8d08a12e196f592fef7487b53f3930472beee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 11:22:29 +0200 Subject: [PATCH 2/6] fix: don't wait default delay when autoclose is set --- src/accessories/garageDoorOpener.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/accessories/garageDoorOpener.ts b/src/accessories/garageDoorOpener.ts index 79fc855..2982a01 100644 --- a/src/accessories/garageDoorOpener.ts +++ b/src/accessories/garageDoorOpener.ts @@ -250,7 +250,7 @@ export const setupGarageDoorOpener = ( const delay = (state.computedPosition * garageDoorDelay) / 100; // debug(`delay=${chalkNumber(delay)}`); try { - await waitFor(`${deviceId}.pending`, delay); + await waitFor(`${deviceId}.pending`, autoCloseDelay ? 1 * 1000 : delay); assignCurrentDoorState(CurrentDoorState.CLOSED); } catch (err) { // debug(`Aborted CLOSED update with delay=${chalkNumber(delay)}`); From 46c5b794fb38bd90faef1c948787b997a91450c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 11:26:08 +0200 Subject: [PATCH 3/6] fix: don't toggle garage door when autoclose This could be a future feature --- src/accessories/garageDoorOpener.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/accessories/garageDoorOpener.ts b/src/accessories/garageDoorOpener.ts index 2982a01..1c29f13 100644 --- a/src/accessories/garageDoorOpener.ts +++ b/src/accessories/garageDoorOpener.ts @@ -208,7 +208,9 @@ export const setupGarageDoorOpener = ( callback(); return; } - await toggleGarageDoor(); + if (targetDoorState == TargetDoorState.OPEN) { + await toggleGarageDoor(); + } assignCurrentDoorState(nextCurrentDoorState); // Handle Stopped state, if we are stopped, wait one second and trigger again to reverse course From 75e9259920cc3470a08bb464bf9c1c7b486dc6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 15:31:38 +0200 Subject: [PATCH 4/6] feat: handler autoClose as virtual or not --- src/accessories/garageDoorOpener.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/accessories/garageDoorOpener.ts b/src/accessories/garageDoorOpener.ts index 1c29f13..a7fbb26 100644 --- a/src/accessories/garageDoorOpener.ts +++ b/src/accessories/garageDoorOpener.ts @@ -31,6 +31,7 @@ import {Characteristic, Service} from 'src/config/hap'; type GarageDoorOpenerSettings = { delay?: number; autoCloseDelay?: number; + virtual?: boolean; }; type GarageDoorOpenerState = { currentDoorState: number; @@ -52,7 +53,7 @@ export const setupGarageDoorOpener = ( const {deviceId, endpointId, state, settings} = context; - const {delay: garageDoorDelay = DEFAULT_GARAGE_DOOR_DELAY, autoCloseDelay} = settings; + const {delay: garageDoorDelay = DEFAULT_GARAGE_DOOR_DELAY, autoCloseDelay, virtual = true} = settings; const assignState = (update: Partial): void => { Object.assign(state, update); @@ -208,7 +209,7 @@ export const setupGarageDoorOpener = ( callback(); return; } - if (targetDoorState == TargetDoorState.OPEN) { + if (targetDoorState == TargetDoorState.OPEN || (targetDoorState == TargetDoorState.CLOSED && !virtual)) { await toggleGarageDoor(); } assignCurrentDoorState(nextCurrentDoorState); @@ -252,7 +253,7 @@ export const setupGarageDoorOpener = ( const delay = (state.computedPosition * garageDoorDelay) / 100; // debug(`delay=${chalkNumber(delay)}`); try { - await waitFor(`${deviceId}.pending`, autoCloseDelay ? 1 * 1000 : delay); + await waitFor(`${deviceId}.pending`, autoCloseDelay && virtual ? 1 * 1000 : delay); assignCurrentDoorState(CurrentDoorState.CLOSED); } catch (err) { // debug(`Aborted CLOSED update with delay=${chalkNumber(delay)}`); From 793d12d706f6a90f632fc62c716b3674250af3d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 21:56:44 +0200 Subject: [PATCH 5/6] fix: rename virtual var to more explicit --- src/accessories/garageDoorOpener.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/accessories/garageDoorOpener.ts b/src/accessories/garageDoorOpener.ts index a7fbb26..ecc660d 100644 --- a/src/accessories/garageDoorOpener.ts +++ b/src/accessories/garageDoorOpener.ts @@ -31,7 +31,7 @@ import {Characteristic, Service} from 'src/config/hap'; type GarageDoorOpenerSettings = { delay?: number; autoCloseDelay?: number; - virtual?: boolean; + autoCloseVirtual?: boolean; }; type GarageDoorOpenerState = { currentDoorState: number; @@ -53,7 +53,7 @@ export const setupGarageDoorOpener = ( const {deviceId, endpointId, state, settings} = context; - const {delay: garageDoorDelay = DEFAULT_GARAGE_DOOR_DELAY, autoCloseDelay, virtual = true} = settings; + const {delay: garageDoorDelay = DEFAULT_GARAGE_DOOR_DELAY, autoCloseDelay, autoCloseVirtual} = settings; const assignState = (update: Partial): void => { Object.assign(state, update); @@ -209,7 +209,7 @@ export const setupGarageDoorOpener = ( callback(); return; } - if (targetDoorState == TargetDoorState.OPEN || (targetDoorState == TargetDoorState.CLOSED && !virtual)) { + if (targetDoorState == TargetDoorState.OPEN || (targetDoorState == TargetDoorState.CLOSED && !autoCloseVirtual)) { await toggleGarageDoor(); } assignCurrentDoorState(nextCurrentDoorState); @@ -250,10 +250,10 @@ export const setupGarageDoorOpener = ( break; } case CurrentDoorState.CLOSING: { - const delay = (state.computedPosition * garageDoorDelay) / 100; + const delay = autoCloseDelay && autoCloseVirtual ? 1 * 1000 : (state.computedPosition * garageDoorDelay) / 100; // debug(`delay=${chalkNumber(delay)}`); try { - await waitFor(`${deviceId}.pending`, autoCloseDelay && virtual ? 1 * 1000 : delay); + await waitFor(`${deviceId}.pending`, delay); assignCurrentDoorState(CurrentDoorState.CLOSED); } catch (err) { // debug(`Aborted CLOSED update with delay=${chalkNumber(delay)}`); From 6a38446232f584a6914e20ecf9165e93900ef82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Sun, 2 Jun 2024 22:15:00 +0200 Subject: [PATCH 6/6] chore: update readme with new param --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f07fd97..4535461 100644 --- a/README.md +++ b/README.md @@ -159,14 +159,17 @@ Value is in milliseconds: } ``` -You can also configure an `autoCloseDelay` +You can also configure an `autoCloseDelay` and `autoCloseVirtual` to physically or virtually close the garage door. ```json { "platforms": [ { "settings": { - "1529094720": {"autoCloseDelay": 300000} // 5 minutes + "1529094720": { + "autoCloseDelay": 300000, // 5 minutes + "autoCloseVirtual": true + } } } ]