homebridge 2.0.0-beta.109 → 2.0.0-beta.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -49,6 +49,53 @@ export interface SwitchAPI {
|
|
|
49
49
|
position?: number;
|
|
50
50
|
partId?: string;
|
|
51
51
|
}) => Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Emit a high-level gesture for a `GenericSwitch` accessory.
|
|
54
|
+
*
|
|
55
|
+
* Convenience helper for integrations that already classify gestures (e.g. remotes that
|
|
56
|
+
* report only `single`, `double`, or `hold`). Translates each gesture into the canonical
|
|
57
|
+
* `press` / `release` sequence that Matter.js `SwitchServer` expects, so the server still
|
|
58
|
+
* determines the correct Switch cluster events (`shortRelease`, `longRelease`,
|
|
59
|
+
* `multiPressComplete`) based on timing.
|
|
60
|
+
*
|
|
61
|
+
* | Gesture | Translated sequence |
|
|
62
|
+
* |---------------|-----------------------------------------------------------------|
|
|
63
|
+
* | `singlePress` | `press` → `release` |
|
|
64
|
+
* | `doublePress` | `press` → `release` → *(multiPressDelayMs)* → `press` → `release` |
|
|
65
|
+
* | `longPress` | `press` → *(longPressDelayMs)* → `release` |
|
|
66
|
+
*
|
|
67
|
+
* Default delays:
|
|
68
|
+
* - `longPressDelayMs` – `2500` ms (just above the Matter.js `longPressDelay` default of 2000 ms)
|
|
69
|
+
* - `multiPressDelayMs` – `100` ms (well within the Matter.js `multiPressDelay` window of 300 ms)
|
|
70
|
+
*
|
|
71
|
+
* @param uuid - UUID of the GenericSwitch accessory
|
|
72
|
+
* @param gesture - The gesture to emit: `'singlePress'`, `'doublePress'`, or `'longPress'`
|
|
73
|
+
* @param options - Optional configuration
|
|
74
|
+
* @param options.position - Button position index (1-based). Defaults to `1`.
|
|
75
|
+
* @param options.partId - Part ID for composed devices with GenericSwitch parts.
|
|
76
|
+
* @param options.longPressDelayMs - How long (ms) to hold the button for a long press.
|
|
77
|
+
* Defaults to `2500`. Only relevant for `'longPress'`.
|
|
78
|
+
* @param options.multiPressDelayMs - Delay (ms) between the two press cycles of a double press.
|
|
79
|
+
* Defaults to `100`. Only relevant for `'doublePress'`.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* // Single press on a simple remote
|
|
84
|
+
* await api.matter?.switch.emitGesture(uuid, 'singlePress')
|
|
85
|
+
*
|
|
86
|
+
* // Double press on button 2 of a multi-button remote
|
|
87
|
+
* await api.matter?.switch.emitGesture(uuid, 'doublePress', { position: 2 })
|
|
88
|
+
*
|
|
89
|
+
* // Long press on a composed device part
|
|
90
|
+
* await api.matter?.switch.emitGesture(uuid, 'longPress', { partId: 'button-top' })
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
emitGesture: (uuid: string, gesture: 'singlePress' | 'doublePress' | 'longPress', options?: {
|
|
94
|
+
position?: number;
|
|
95
|
+
partId?: string;
|
|
96
|
+
longPressDelayMs?: number;
|
|
97
|
+
multiPressDelayMs?: number;
|
|
98
|
+
}) => Promise<void>;
|
|
52
99
|
}
|
|
53
100
|
/**
|
|
54
101
|
* Implementation of {@link SwitchAPI}.
|
|
@@ -66,5 +113,11 @@ export declare class SwitchAPIImpl implements SwitchAPI {
|
|
|
66
113
|
position?: number;
|
|
67
114
|
partId?: string;
|
|
68
115
|
}): Promise<void>;
|
|
116
|
+
emitGesture(uuid: string, gesture: 'singlePress' | 'doublePress' | 'longPress', options?: {
|
|
117
|
+
position?: number;
|
|
118
|
+
partId?: string;
|
|
119
|
+
longPressDelayMs?: number;
|
|
120
|
+
multiPressDelayMs?: number;
|
|
121
|
+
}): Promise<void>;
|
|
69
122
|
}
|
|
70
123
|
//# sourceMappingURL=SwitchAPI.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchAPI.d.ts","sourceRoot":"","sources":["../../src/matter/SwitchAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAO1C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"SwitchAPI.d.ts","sourceRoot":"","sources":["../../src/matter/SwitchAPI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAO1C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACH,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,EACpD,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAC3B,KACE,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAEzE,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/C,OAAO,CAAC,IAAI,CAAC;IAiCV,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,EACpD,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAC3B,GACA,OAAO,CAAC,IAAI,CAAC;CAuCjB"}
|
package/dist/matter/SwitchAPI.js
CHANGED
|
@@ -42,5 +42,39 @@ export class SwitchAPIImpl {
|
|
|
42
42
|
log.debug(`Emitting switch ${action} for accessory ${uuid}: currentPosition=${position}${partId ? `, partId=${partId}` : ''}`);
|
|
43
43
|
await this.matterApi.updateAccessoryState(uuid, clusterNames.Switch, { currentPosition: position }, partId);
|
|
44
44
|
}
|
|
45
|
+
async emitGesture(uuid, gesture, options) {
|
|
46
|
+
if (!uuid) {
|
|
47
|
+
log.error('switch.emitGesture: uuid parameter is required');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (gesture !== 'singlePress' && gesture !== 'doublePress' && gesture !== 'longPress') {
|
|
51
|
+
log.error(`switch.emitGesture: invalid gesture "${gesture}" — must be "singlePress", "doublePress", or "longPress"`);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const emitOpts = { position: options?.position, partId: options?.partId };
|
|
55
|
+
switch (gesture) {
|
|
56
|
+
case 'singlePress': {
|
|
57
|
+
await this.emit(uuid, 'press', emitOpts);
|
|
58
|
+
await this.emit(uuid, 'release', emitOpts);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case 'doublePress': {
|
|
62
|
+
const multiPressDelayMs = options?.multiPressDelayMs ?? 100;
|
|
63
|
+
await this.emit(uuid, 'press', emitOpts);
|
|
64
|
+
await this.emit(uuid, 'release', emitOpts);
|
|
65
|
+
await new Promise(resolve => setTimeout(resolve, multiPressDelayMs));
|
|
66
|
+
await this.emit(uuid, 'press', emitOpts);
|
|
67
|
+
await this.emit(uuid, 'release', emitOpts);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
case 'longPress': {
|
|
71
|
+
const longPressDelayMs = options?.longPressDelayMs ?? 2500;
|
|
72
|
+
await this.emit(uuid, 'press', emitOpts);
|
|
73
|
+
await new Promise(resolve => setTimeout(resolve, longPressDelayMs));
|
|
74
|
+
await this.emit(uuid, 'release', emitOpts);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
45
79
|
}
|
|
46
80
|
//# sourceMappingURL=SwitchAPI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SwitchAPI.js","sourceRoot":"","sources":["../../src/matter/SwitchAPI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"SwitchAPI.js","sourceRoot":"","sources":["../../src/matter/SwitchAPI.ts"],"names":[],"mappings":"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"}
|