homebridge 2.0.0-alpha.40 → 2.0.0-alpha.42
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.
- package/config-sample.json +1 -12
- package/dist/api.d.ts +46 -35
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +41 -35
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +7 -15
- package/dist/bridgeService.d.ts.map +1 -1
- package/dist/bridgeService.js +10 -7
- package/dist/bridgeService.js.map +1 -1
- package/dist/childBridgeFork.d.ts +19 -0
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +198 -4
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +28 -1
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +43 -0
- package/dist/childBridgeService.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/ipcService.d.ts +21 -3
- package/dist/ipcService.d.ts.map +1 -1
- package/dist/ipcService.js +15 -0
- package/dist/ipcService.js.map +1 -1
- package/dist/matter/index.d.ts +11 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +11 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/matterConfigValidator.d.ts +26 -0
- package/dist/matter/matterConfigValidator.d.ts.map +1 -0
- package/dist/matter/matterConfigValidator.js +171 -0
- package/dist/matter/matterConfigValidator.js.map +1 -0
- package/dist/matter/matterDiagnostics.d.ts +121 -0
- package/dist/matter/matterDiagnostics.d.ts.map +1 -0
- package/dist/matter/matterDiagnostics.js +323 -0
- package/dist/matter/matterDiagnostics.js.map +1 -0
- package/dist/matter/matterErrorHandler.d.ts +94 -0
- package/dist/matter/matterErrorHandler.d.ts.map +1 -0
- package/dist/matter/matterErrorHandler.js +472 -0
- package/dist/matter/matterErrorHandler.js.map +1 -0
- package/dist/matter/matterNetworkMonitor.d.ts +65 -0
- package/dist/matter/matterNetworkMonitor.d.ts.map +1 -0
- package/dist/matter/matterNetworkMonitor.js +227 -0
- package/dist/matter/matterNetworkMonitor.js.map +1 -0
- package/dist/matter/matterServer.d.ts +196 -0
- package/dist/matter/matterServer.d.ts.map +1 -0
- package/dist/matter/matterServer.js +824 -0
- package/dist/matter/matterServer.js.map +1 -0
- package/dist/matter/matterSharedTypes.d.ts +147 -0
- package/dist/matter/matterSharedTypes.d.ts.map +1 -0
- package/dist/matter/matterSharedTypes.js +51 -0
- package/dist/matter/matterSharedTypes.js.map +1 -0
- package/dist/matter/matterStorage.d.ts +112 -0
- package/dist/matter/matterStorage.d.ts.map +1 -0
- package/dist/matter/matterStorage.js +355 -0
- package/dist/matter/matterStorage.js.map +1 -0
- package/dist/matter/matterTypes.d.ts +163 -0
- package/dist/matter/matterTypes.d.ts.map +1 -0
- package/dist/matter/matterTypes.js +106 -0
- package/dist/matter/matterTypes.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -2
- package/dist/plugin.js.map +1 -1
- package/dist/server.d.ts +18 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +361 -51
- package/dist/server.js.map +1 -1
- package/dist/user.d.ts +1 -0
- package/dist/user.d.ts.map +1 -1
- package/dist/user.js +3 -0
- package/dist/user.js.map +1 -1
- package/package.json +12 -13
- package/dist/matterConfigValidator.d.ts +0 -34
- package/dist/matterConfigValidator.d.ts.map +0 -1
- package/dist/matterConfigValidator.js +0 -249
- package/dist/matterConfigValidator.js.map +0 -1
- package/dist/matterService.d.ts +0 -168
- package/dist/matterService.d.ts.map +0 -1
- package/dist/matterService.js +0 -677
- package/dist/matterService.js.map +0 -1
- package/dist/matterTypes.d.ts +0 -20
- package/dist/matterTypes.d.ts.map +0 -1
- package/dist/matterTypes.js +0 -278
- package/dist/matterTypes.js.map +0 -1
- package/dist/util/matter-cli.d.ts +0 -3
- package/dist/util/matter-cli.d.ts.map +0 -1
- package/dist/util/matter-cli.js +0 -211
- package/dist/util/matter-cli.js.map +0 -1
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/* global NodeJS */
|
|
2
|
+
/**
|
|
3
|
+
* Custom Matter.js Storage Implementation for Homebridge
|
|
4
|
+
*
|
|
5
|
+
* Provides persistent storage for Matter fabric data and device configuration.
|
|
6
|
+
* This ensures commissioning data persists across Homebridge restarts.
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as fsp from 'node:fs/promises';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { Logger } from '../logger.js';
|
|
12
|
+
const log = Logger.withPrefix('Matter:Storage');
|
|
13
|
+
// Storage configuration constants
|
|
14
|
+
const STORAGE_WRITE_DEBOUNCE_MS = 100; // Delay for non-critical writes
|
|
15
|
+
/**
|
|
16
|
+
* Custom Matter.js StorageContext implementation for Homebridge
|
|
17
|
+
* Provides persistent storage for fabric data and device configuration
|
|
18
|
+
*/
|
|
19
|
+
export class HomebridgeMatterStorage {
|
|
20
|
+
namespace;
|
|
21
|
+
storagePath;
|
|
22
|
+
storage = new Map();
|
|
23
|
+
filePath;
|
|
24
|
+
isInitialized = false;
|
|
25
|
+
initializationPromise = null;
|
|
26
|
+
writeTimer = null;
|
|
27
|
+
pendingWrite = false;
|
|
28
|
+
constructor(namespace, storagePath) {
|
|
29
|
+
this.namespace = namespace;
|
|
30
|
+
this.storagePath = storagePath;
|
|
31
|
+
this.filePath = path.join(storagePath, `${namespace}.json`);
|
|
32
|
+
// Synchronously load existing data to avoid race conditions with Matter.js
|
|
33
|
+
// Matter.js expects storage to be immediately available
|
|
34
|
+
this.initializeSync();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Synchronously initialize storage by loading existing data
|
|
38
|
+
* This is called in the constructor to ensure storage is ready immediately
|
|
39
|
+
*/
|
|
40
|
+
initializeSync() {
|
|
41
|
+
try {
|
|
42
|
+
const fileContent = fs.readFileSync(this.filePath, 'utf-8');
|
|
43
|
+
// Custom reviver to handle BigInt deserialization
|
|
44
|
+
const data = JSON.parse(fileContent, (_key, value) => {
|
|
45
|
+
if (value && typeof value === 'object' && value.__type === 'bigint') {
|
|
46
|
+
return BigInt(value.value);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
});
|
|
50
|
+
// Ensure data is valid before loading
|
|
51
|
+
if (data && typeof data === 'object') {
|
|
52
|
+
this.storage = new Map(Object.entries(data));
|
|
53
|
+
log.debug(`Loaded ${this.storage.size} entries for namespace: ${this.namespace}`);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
log.warn(`Invalid storage data for ${this.namespace}, starting fresh`);
|
|
57
|
+
this.storage = new Map();
|
|
58
|
+
}
|
|
59
|
+
this.isInitialized = true;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error.code === 'ENOENT') {
|
|
63
|
+
log.debug(`No existing storage for namespace: ${this.namespace}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
log.warn(`Failed to load storage for ${this.namespace} (${error.message}), starting fresh`);
|
|
67
|
+
}
|
|
68
|
+
// Create fresh storage if file doesn't exist or is corrupted
|
|
69
|
+
this.storage = new Map();
|
|
70
|
+
this.isInitialized = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Initialize storage and load existing data (async for compatibility)
|
|
75
|
+
* Note: Storage is now initialized synchronously in constructor
|
|
76
|
+
*/
|
|
77
|
+
async initialize() {
|
|
78
|
+
// Storage is already initialized in constructor
|
|
79
|
+
return Promise.resolve();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build a context key from an array of contexts
|
|
83
|
+
*/
|
|
84
|
+
buildContextKey(contexts) {
|
|
85
|
+
return contexts.join('.');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get a value from storage (Matter.js interface)
|
|
89
|
+
*/
|
|
90
|
+
get(contexts, key) {
|
|
91
|
+
// Storage is initialized in constructor, so this should always work
|
|
92
|
+
const fullKey = contexts.length ? `${this.buildContextKey(contexts)}.${key}` : key;
|
|
93
|
+
return this.storage.get(fullKey);
|
|
94
|
+
}
|
|
95
|
+
set(contexts, keyOrValues, value) {
|
|
96
|
+
const contextKey = this.buildContextKey(contexts);
|
|
97
|
+
if (typeof keyOrValues === 'string') {
|
|
98
|
+
const fullKey = contextKey ? `${contextKey}.${keyOrValues}` : keyOrValues;
|
|
99
|
+
this.storage.set(fullKey, value);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
for (const [k, v] of Object.entries(keyOrValues)) {
|
|
103
|
+
const fullKey = contextKey ? `${contextKey}.${k}` : k;
|
|
104
|
+
this.storage.set(fullKey, v);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Debounce writes to avoid excessive disk I/O
|
|
108
|
+
void this.schedulePersist();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Delete a key from storage (Matter.js interface)
|
|
112
|
+
*/
|
|
113
|
+
delete(contexts, key) {
|
|
114
|
+
const fullKey = contexts.length ? `${this.buildContextKey(contexts)}.${key}` : key;
|
|
115
|
+
const deleted = this.storage.delete(fullKey);
|
|
116
|
+
if (deleted) {
|
|
117
|
+
void this.schedulePersist();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Clear all storage in a context (Matter.js interface)
|
|
122
|
+
*/
|
|
123
|
+
clearAll(contexts) {
|
|
124
|
+
const contextKey = this.buildContextKey(contexts);
|
|
125
|
+
const prefix = contextKey ? `${contextKey}.` : '';
|
|
126
|
+
// Collect keys to delete first to avoid modifying during iteration
|
|
127
|
+
const keysToDelete = [];
|
|
128
|
+
for (const key of this.storage.keys()) {
|
|
129
|
+
if (!prefix || key.startsWith(prefix)) {
|
|
130
|
+
keysToDelete.push(key);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Delete collected keys
|
|
134
|
+
for (const key of keysToDelete) {
|
|
135
|
+
this.storage.delete(key);
|
|
136
|
+
}
|
|
137
|
+
if (keysToDelete.length > 0) {
|
|
138
|
+
void this.schedulePersist();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get all keys in a context (Matter.js interface)
|
|
143
|
+
*/
|
|
144
|
+
keys(contexts) {
|
|
145
|
+
if (!this.isInitialized) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
const contextKey = this.buildContextKey(contexts);
|
|
149
|
+
const prefix = contextKey ? `${contextKey}.` : '';
|
|
150
|
+
const contextKeys = [];
|
|
151
|
+
for (const key of this.storage.keys()) {
|
|
152
|
+
if (prefix) {
|
|
153
|
+
// Return keys within this context (strip context prefix)
|
|
154
|
+
if (key.startsWith(prefix)) {
|
|
155
|
+
const subKey = key.substring(prefix.length);
|
|
156
|
+
// Only include direct children (no further nesting)
|
|
157
|
+
if (!subKey.includes('.')) {
|
|
158
|
+
contextKeys.push(subKey);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Root level - return keys with no dots
|
|
164
|
+
if (!key.includes('.')) {
|
|
165
|
+
contextKeys.push(key);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return contextKeys;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get all child context names (Matter.js interface)
|
|
173
|
+
*/
|
|
174
|
+
contexts(contexts) {
|
|
175
|
+
if (!this.isInitialized) {
|
|
176
|
+
return [];
|
|
177
|
+
}
|
|
178
|
+
const contextKey = this.buildContextKey(contexts);
|
|
179
|
+
const prefix = contextKey ? `${contextKey}.` : '';
|
|
180
|
+
const childContexts = new Set();
|
|
181
|
+
for (const key of this.storage.keys()) {
|
|
182
|
+
if (prefix) {
|
|
183
|
+
// Find sub-contexts within this context
|
|
184
|
+
if (key.startsWith(prefix)) {
|
|
185
|
+
const subKey = key.substring(prefix.length);
|
|
186
|
+
const nextDot = subKey.indexOf('.');
|
|
187
|
+
if (nextDot > 0) {
|
|
188
|
+
childContexts.add(subKey.substring(0, nextDot));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Root level - find top-level contexts
|
|
194
|
+
const dotIndex = key.indexOf('.');
|
|
195
|
+
if (dotIndex > 0) {
|
|
196
|
+
childContexts.add(key.substring(0, dotIndex));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return Array.from(childContexts);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Check if a key exists (Matter.js interface)
|
|
204
|
+
*/
|
|
205
|
+
has(contexts, key) {
|
|
206
|
+
if (!this.isInitialized) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const fullKey = contexts.length ? `${this.buildContextKey(contexts)}.${key}` : key;
|
|
210
|
+
return this.storage.has(fullKey);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get all values in a context
|
|
214
|
+
*/
|
|
215
|
+
async values(contexts) {
|
|
216
|
+
await this.initialize();
|
|
217
|
+
const contextKey = this.buildContextKey(contexts);
|
|
218
|
+
const prefix = contextKey ? `${contextKey}.` : '';
|
|
219
|
+
const values = {};
|
|
220
|
+
for (const [key, value] of this.storage.entries()) {
|
|
221
|
+
if (prefix) {
|
|
222
|
+
if (key.startsWith(prefix)) {
|
|
223
|
+
const subKey = key.substring(prefix.length);
|
|
224
|
+
if (!subKey.includes('.')) {
|
|
225
|
+
values[subKey] = value;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
if (!key.includes('.')) {
|
|
231
|
+
values[key] = value;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return values;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Schedule a persist operation (debounced)
|
|
239
|
+
*/
|
|
240
|
+
async schedulePersist() {
|
|
241
|
+
if (this.writeTimer) {
|
|
242
|
+
clearTimeout(this.writeTimer);
|
|
243
|
+
}
|
|
244
|
+
this.pendingWrite = true;
|
|
245
|
+
// Immediate persist for critical data (fabric information)
|
|
246
|
+
const hasCriticalData = Array.from(this.storage.keys()).some(key => key.includes('fabric') || key.includes('commissioning'));
|
|
247
|
+
if (hasCriticalData) {
|
|
248
|
+
await this.persist();
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Debounce non-critical writes
|
|
252
|
+
this.writeTimer = setTimeout(() => {
|
|
253
|
+
void this.persist();
|
|
254
|
+
}, STORAGE_WRITE_DEBOUNCE_MS);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Persist storage to disk with atomic write
|
|
259
|
+
*/
|
|
260
|
+
async persist() {
|
|
261
|
+
if (!this.pendingWrite) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
const data = Object.fromEntries(this.storage.entries());
|
|
266
|
+
const dir = path.dirname(this.filePath);
|
|
267
|
+
// Ensure directory exists
|
|
268
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
269
|
+
// Atomic write: write to temp file then rename
|
|
270
|
+
const tempFile = `${this.filePath}.tmp`;
|
|
271
|
+
// Custom replacer to handle BigInt serialization
|
|
272
|
+
const jsonString = JSON.stringify(data, (_key, value) => {
|
|
273
|
+
if (typeof value === 'bigint') {
|
|
274
|
+
return { __type: 'bigint', value: value.toString() };
|
|
275
|
+
}
|
|
276
|
+
return value;
|
|
277
|
+
}, 2);
|
|
278
|
+
await fsp.writeFile(tempFile, jsonString, 'utf-8');
|
|
279
|
+
await fsp.rename(tempFile, this.filePath);
|
|
280
|
+
this.pendingWrite = false;
|
|
281
|
+
log.debug(`Persisted ${this.storage.size} entries for namespace: ${this.namespace}`);
|
|
282
|
+
}
|
|
283
|
+
catch (error) {
|
|
284
|
+
log.error(`Failed to persist storage for ${this.namespace}:`, error);
|
|
285
|
+
// Don't throw - we don't want to break Matter operations
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Force immediate persist (for shutdown)
|
|
290
|
+
*/
|
|
291
|
+
async forcePersist() {
|
|
292
|
+
if (this.writeTimer) {
|
|
293
|
+
clearTimeout(this.writeTimer);
|
|
294
|
+
this.writeTimer = null;
|
|
295
|
+
}
|
|
296
|
+
if (this.pendingWrite) {
|
|
297
|
+
await this.persist();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Close and cleanup storage
|
|
302
|
+
*/
|
|
303
|
+
async close() {
|
|
304
|
+
await this.forcePersist();
|
|
305
|
+
this.storage.clear();
|
|
306
|
+
this.isInitialized = false;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get storage statistics
|
|
310
|
+
*/
|
|
311
|
+
getStats() {
|
|
312
|
+
return {
|
|
313
|
+
entries: this.storage.size,
|
|
314
|
+
namespace: this.namespace,
|
|
315
|
+
path: this.filePath,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Storage Manager for Matter.js
|
|
321
|
+
* Manages multiple storage contexts for different namespaces
|
|
322
|
+
*/
|
|
323
|
+
export class MatterStorageManager {
|
|
324
|
+
storagePath;
|
|
325
|
+
storages = new Map();
|
|
326
|
+
constructor(storagePath) {
|
|
327
|
+
this.storagePath = storagePath;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get or create a storage context for a namespace
|
|
331
|
+
*/
|
|
332
|
+
getStorage(namespace) {
|
|
333
|
+
let storage = this.storages.get(namespace);
|
|
334
|
+
if (!storage) {
|
|
335
|
+
storage = new HomebridgeMatterStorage(namespace, this.storagePath);
|
|
336
|
+
this.storages.set(namespace, storage);
|
|
337
|
+
}
|
|
338
|
+
return storage;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Close all storage contexts
|
|
342
|
+
*/
|
|
343
|
+
async closeAll() {
|
|
344
|
+
const promises = Array.from(this.storages.values()).map(storage => storage.close());
|
|
345
|
+
await Promise.all(promises);
|
|
346
|
+
this.storages.clear();
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Get statistics for all storage contexts
|
|
350
|
+
*/
|
|
351
|
+
getAllStats() {
|
|
352
|
+
return Array.from(this.storages.values()).map(storage => storage.getStats());
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=matterStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterStorage.js","sourceRoot":"","sources":["../../src/matter/matterStorage.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAEnB;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;AAE/C,kCAAkC;AAClC,MAAM,yBAAyB,GAAG,GAAG,CAAA,CAAC,gCAAgC;AAEtE;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IASxB;IACA;IATF,OAAO,GAAqB,IAAI,GAAG,EAAE,CAAA;IACrC,QAAQ,CAAQ;IAChB,aAAa,GAAG,KAAK,CAAA;IACrB,qBAAqB,GAAyB,IAAI,CAAA;IAClD,UAAU,GAA0B,IAAI,CAAA;IACxC,YAAY,GAAG,KAAK,CAAA;IAE5B,YACU,SAAiB,EACjB,WAAmB;QADnB,cAAS,GAAT,SAAS,CAAQ;QACjB,gBAAW,GAAX,WAAW,CAAQ;QAE3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;QAE3D,2EAA2E;QAC3E,wDAAwD;QACxD,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC3D,kDAAkD;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACpE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,CAAC,CAAA;YACF,sCAAsC;YACtC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC5C,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,2BAA2B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACnF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAA;gBACtE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;YAC1B,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,GAAG,CAAC,KAAK,CAAC,sCAAsC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACnE,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;YAC7F,CAAC;YACD,6DAA6D;YAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,gDAAgD;QAChD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAkB;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAkB,EAAE,GAAW;QACjC,oEAAoE;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAOD,GAAG,CAAC,QAAkB,EAAE,WAA6C,EAAE,KAAe;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAEjD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAkB,EAAE,GAAW;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAkB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAEjD,mEAAmE;QACnE,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,WAAW,GAAa,EAAE,CAAA;QAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,yDAAyD;gBACzD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,oDAAoD;oBACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wCAAwC;gBACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QAEvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,wCAAwC;gBACxC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBACnC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;oBACjD,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAkB,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAkB;QAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,MAAM,GAA4B,EAAE,CAAA;QAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAExB,2DAA2D;QAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CACxD,CAAA;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;YACrB,CAAC,EAAE,yBAAyB,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEvC,0BAA0B;YAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAEzC,+CAA+C;YAC/C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAA;YACvC,iDAAiD;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;gBACtD,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,EAAE,CAAC,CAAC,CAAA;YACL,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAClD,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,2BAA2B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACtF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAA;YACpE,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAA;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAGX;IAFZ,QAAQ,GAAyC,IAAI,GAAG,EAAE,CAAA;IAElE,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE3C;;OAEG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACnF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,CAAC;CACF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matter Types for Homebridge Plugin API
|
|
3
|
+
*
|
|
4
|
+
* This module provides types and interfaces for plugin developers
|
|
5
|
+
* to create Matter-compatible accessories.
|
|
6
|
+
*/
|
|
7
|
+
import type { Endpoint, EndpointType } from '@matter/main';
|
|
8
|
+
import * as clusters from '@matter/main/clusters';
|
|
9
|
+
import * as devices from '@matter/main/devices';
|
|
10
|
+
/**
|
|
11
|
+
* Matter Accessory - Plugin API Interface
|
|
12
|
+
*
|
|
13
|
+
* This is the main interface that plugin developers use to register
|
|
14
|
+
* Matter accessories with Homebridge.
|
|
15
|
+
*/
|
|
16
|
+
export interface MatterAccessory<T = Record<string, any>> {
|
|
17
|
+
/** Unique identifier for this accessory (must be unique across all accessories) */
|
|
18
|
+
uuid: string;
|
|
19
|
+
/** Display name for the accessory */
|
|
20
|
+
displayName: string;
|
|
21
|
+
/** Matter device type (e.g., OnOffLightDevice, DimmableLightDevice, etc.) */
|
|
22
|
+
deviceType: EndpointType;
|
|
23
|
+
/** Serial number for the device */
|
|
24
|
+
serialNumber: string;
|
|
25
|
+
/** Manufacturer name */
|
|
26
|
+
manufacturer: string;
|
|
27
|
+
/** Model name/identifier */
|
|
28
|
+
model: string;
|
|
29
|
+
/** Firmware revision (optional) */
|
|
30
|
+
firmwareRevision?: string;
|
|
31
|
+
/** Hardware revision (optional) */
|
|
32
|
+
hardwareRevision?: string;
|
|
33
|
+
/** Software version (optional) */
|
|
34
|
+
softwareVersion?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Plugin developer storage - persists across restarts
|
|
37
|
+
* This is a way for plugin developers to store custom data with their accessory
|
|
38
|
+
* Similar to PlatformAccessory.context for HAP accessories
|
|
39
|
+
*/
|
|
40
|
+
context?: T;
|
|
41
|
+
/**
|
|
42
|
+
* Initial cluster states
|
|
43
|
+
* Key is the cluster name, value is an object of attribute name -> value
|
|
44
|
+
*
|
|
45
|
+
* Example:
|
|
46
|
+
* {
|
|
47
|
+
* onOff: { onOff: true },
|
|
48
|
+
* levelControl: { currentLevel: 127, minLevel: 1, maxLevel: 254 }
|
|
49
|
+
* }
|
|
50
|
+
*/
|
|
51
|
+
clusters: {
|
|
52
|
+
[clusterName: string]: {
|
|
53
|
+
[attributeName: string]: unknown;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Handlers for Matter commands
|
|
58
|
+
* Key is the cluster name, value is an object of command name -> handler function
|
|
59
|
+
*
|
|
60
|
+
* Example:
|
|
61
|
+
* {
|
|
62
|
+
* onOff: {
|
|
63
|
+
* on: async () => { ... },
|
|
64
|
+
* off: async () => { ... }
|
|
65
|
+
* }
|
|
66
|
+
* }
|
|
67
|
+
*/
|
|
68
|
+
handlers?: {
|
|
69
|
+
[clusterName: string]: {
|
|
70
|
+
[commandName: string]: (...args: unknown[]) => Promise<void> | void;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Optional: Get current state handler
|
|
75
|
+
* Called when a Matter controller reads an attribute
|
|
76
|
+
* If not provided, the last set value is returned
|
|
77
|
+
*/
|
|
78
|
+
getState?: (cluster: string, attribute: string) => Promise<any> | any;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Matter Configuration (for bridge or child bridge)
|
|
82
|
+
*/
|
|
83
|
+
export interface MatterConfig {
|
|
84
|
+
/** Port for Matter server (optional, will auto-assign if not specified) */
|
|
85
|
+
port?: number;
|
|
86
|
+
/** Name for the Matter bridge (optional) */
|
|
87
|
+
name?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Internal Matter accessory representation
|
|
91
|
+
* (Used internally by MatterServer)
|
|
92
|
+
*/
|
|
93
|
+
export interface InternalMatterAccessory extends MatterAccessory {
|
|
94
|
+
endpoint?: Endpoint;
|
|
95
|
+
registered: boolean;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Matter error type enum (for error handler categorization)
|
|
99
|
+
*/
|
|
100
|
+
export declare enum MatterErrorType {
|
|
101
|
+
INITIALIZATION = "INITIALIZATION",
|
|
102
|
+
NETWORK = "NETWORK",
|
|
103
|
+
COMMISSIONING = "COMMISSIONING",
|
|
104
|
+
DEVICE_SYNC = "DEVICE_SYNC",
|
|
105
|
+
SERVER = "SERVER",
|
|
106
|
+
STORAGE = "STORAGE",
|
|
107
|
+
CONFIGURATION = "CONFIGURATION",
|
|
108
|
+
DEVICE_ERROR = "DEVICE_ERROR",
|
|
109
|
+
UNKNOWN = "UNKNOWN"
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Matter error types
|
|
113
|
+
*/
|
|
114
|
+
export declare class MatterError extends Error {
|
|
115
|
+
readonly code: string;
|
|
116
|
+
readonly details?: unknown | undefined;
|
|
117
|
+
readonly type: MatterErrorType;
|
|
118
|
+
readonly timestamp: Date;
|
|
119
|
+
readonly recoverable: boolean;
|
|
120
|
+
constructor(message: string, code: string, details?: unknown | undefined, type?: MatterErrorType, recoverable?: boolean);
|
|
121
|
+
}
|
|
122
|
+
export declare class MatterCommissioningError extends MatterError {
|
|
123
|
+
constructor(message: string, details?: unknown);
|
|
124
|
+
}
|
|
125
|
+
export declare class MatterStorageError extends MatterError {
|
|
126
|
+
constructor(message: string, details?: unknown);
|
|
127
|
+
}
|
|
128
|
+
export declare class MatterDeviceError extends MatterError {
|
|
129
|
+
constructor(message: string, details?: unknown);
|
|
130
|
+
}
|
|
131
|
+
export declare class MatterNetworkError extends MatterError {
|
|
132
|
+
constructor(message: string, details?: unknown);
|
|
133
|
+
}
|
|
134
|
+
export { clusters };
|
|
135
|
+
export { devices };
|
|
136
|
+
/**
|
|
137
|
+
* Friendly device type names for the Plugin API
|
|
138
|
+
* Maps simplified names to actual Matter.js device types
|
|
139
|
+
*/
|
|
140
|
+
export declare const deviceTypes: {
|
|
141
|
+
readonly OnOffLight: devices.OnOffLightDevice;
|
|
142
|
+
readonly DimmableLight: devices.DimmableLightDevice;
|
|
143
|
+
readonly ColorTemperatureLight: devices.ColorTemperatureLightDevice;
|
|
144
|
+
readonly ExtendedColorLight: devices.ExtendedColorLightDevice;
|
|
145
|
+
readonly OnOffSwitch: devices.OnOffLightSwitchDevice;
|
|
146
|
+
readonly OnOffOutlet: devices.OnOffPlugInUnitDevice;
|
|
147
|
+
readonly DimmableOutlet: devices.DimmablePlugInUnitDevice;
|
|
148
|
+
readonly TemperatureSensor: devices.TemperatureSensorDevice;
|
|
149
|
+
readonly HumiditySensor: devices.HumiditySensorDevice;
|
|
150
|
+
readonly LightSensor: devices.LightSensorDevice;
|
|
151
|
+
readonly MotionSensor: devices.OccupancySensorDevice;
|
|
152
|
+
readonly ContactSensor: devices.ContactSensorDevice;
|
|
153
|
+
readonly LeakSensor: devices.WaterLeakDetectorDevice;
|
|
154
|
+
readonly SmokeSensor: devices.SmokeCoAlarmDevice;
|
|
155
|
+
readonly Thermostat: devices.ThermostatDevice;
|
|
156
|
+
readonly Fan: devices.FanDevice;
|
|
157
|
+
readonly DoorLock: devices.DoorLockDevice;
|
|
158
|
+
readonly WindowCovering: devices.WindowCoveringDevice;
|
|
159
|
+
readonly GenericSwitch: devices.GenericSwitchDevice;
|
|
160
|
+
readonly Pump: devices.PumpDevice;
|
|
161
|
+
readonly RoomAirConditioner: devices.RoomAirConditionerDevice;
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=matterTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterTypes.d.ts","sourceRoot":"","sources":["../../src/matter/matterTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Matter Types for Homebridge Plugin API
|
|
3
|
+
*
|
|
4
|
+
* This module provides types and interfaces for plugin developers
|
|
5
|
+
* to create Matter-compatible accessories.
|
|
6
|
+
*/
|
|
7
|
+
// Import Matter.js clusters and device types
|
|
8
|
+
import * as clusters from '@matter/main/clusters';
|
|
9
|
+
import * as devices from '@matter/main/devices';
|
|
10
|
+
/**
|
|
11
|
+
* Matter error type enum (for error handler categorization)
|
|
12
|
+
*/
|
|
13
|
+
export var MatterErrorType;
|
|
14
|
+
(function (MatterErrorType) {
|
|
15
|
+
MatterErrorType["INITIALIZATION"] = "INITIALIZATION";
|
|
16
|
+
MatterErrorType["NETWORK"] = "NETWORK";
|
|
17
|
+
MatterErrorType["COMMISSIONING"] = "COMMISSIONING";
|
|
18
|
+
MatterErrorType["DEVICE_SYNC"] = "DEVICE_SYNC";
|
|
19
|
+
MatterErrorType["SERVER"] = "SERVER";
|
|
20
|
+
MatterErrorType["STORAGE"] = "STORAGE";
|
|
21
|
+
MatterErrorType["CONFIGURATION"] = "CONFIGURATION";
|
|
22
|
+
MatterErrorType["DEVICE_ERROR"] = "DEVICE_ERROR";
|
|
23
|
+
MatterErrorType["UNKNOWN"] = "UNKNOWN";
|
|
24
|
+
})(MatterErrorType || (MatterErrorType = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Matter error types
|
|
27
|
+
*/
|
|
28
|
+
export class MatterError extends Error {
|
|
29
|
+
code;
|
|
30
|
+
details;
|
|
31
|
+
type;
|
|
32
|
+
timestamp;
|
|
33
|
+
recoverable;
|
|
34
|
+
constructor(message, code, details, type = MatterErrorType.UNKNOWN, recoverable = true) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.code = code;
|
|
37
|
+
this.details = details;
|
|
38
|
+
this.name = 'MatterError';
|
|
39
|
+
this.type = type;
|
|
40
|
+
this.timestamp = new Date();
|
|
41
|
+
this.recoverable = recoverable;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class MatterCommissioningError extends MatterError {
|
|
45
|
+
constructor(message, details) {
|
|
46
|
+
super(message, 'COMMISSIONING_ERROR', details, MatterErrorType.COMMISSIONING);
|
|
47
|
+
this.name = 'MatterCommissioningError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class MatterStorageError extends MatterError {
|
|
51
|
+
constructor(message, details) {
|
|
52
|
+
super(message, 'STORAGE_ERROR', details, MatterErrorType.STORAGE);
|
|
53
|
+
this.name = 'MatterStorageError';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export class MatterDeviceError extends MatterError {
|
|
57
|
+
constructor(message, details) {
|
|
58
|
+
super(message, 'DEVICE_ERROR', details, MatterErrorType.DEVICE_ERROR);
|
|
59
|
+
this.name = 'MatterDeviceError';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class MatterNetworkError extends MatterError {
|
|
63
|
+
constructor(message, details) {
|
|
64
|
+
super(message, 'NETWORK_ERROR', details, MatterErrorType.NETWORK);
|
|
65
|
+
this.name = 'MatterNetworkError';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Export Matter.js clusters for direct access
|
|
69
|
+
export { clusters };
|
|
70
|
+
// Export raw devices namespace (for advanced use)
|
|
71
|
+
export { devices };
|
|
72
|
+
/**
|
|
73
|
+
* Friendly device type names for the Plugin API
|
|
74
|
+
* Maps simplified names to actual Matter.js device types
|
|
75
|
+
*/
|
|
76
|
+
export const deviceTypes = {
|
|
77
|
+
// Lighting
|
|
78
|
+
OnOffLight: devices.OnOffLightDevice,
|
|
79
|
+
DimmableLight: devices.DimmableLightDevice,
|
|
80
|
+
ColorTemperatureLight: devices.ColorTemperatureLightDevice,
|
|
81
|
+
ExtendedColorLight: devices.ExtendedColorLightDevice,
|
|
82
|
+
// Switches & Outlets
|
|
83
|
+
OnOffSwitch: devices.OnOffLightSwitchDevice,
|
|
84
|
+
OnOffOutlet: devices.OnOffPlugInUnitDevice,
|
|
85
|
+
DimmableOutlet: devices.DimmablePlugInUnitDevice,
|
|
86
|
+
// Sensors
|
|
87
|
+
TemperatureSensor: devices.TemperatureSensorDevice,
|
|
88
|
+
HumiditySensor: devices.HumiditySensorDevice,
|
|
89
|
+
LightSensor: devices.LightSensorDevice,
|
|
90
|
+
MotionSensor: devices.OccupancySensorDevice,
|
|
91
|
+
ContactSensor: devices.ContactSensorDevice,
|
|
92
|
+
LeakSensor: devices.WaterLeakDetectorDevice,
|
|
93
|
+
SmokeSensor: devices.SmokeCoAlarmDevice,
|
|
94
|
+
// HVAC
|
|
95
|
+
Thermostat: devices.ThermostatDevice,
|
|
96
|
+
Fan: devices.FanDevice,
|
|
97
|
+
// Security
|
|
98
|
+
DoorLock: devices.DoorLockDevice,
|
|
99
|
+
// Window Coverings
|
|
100
|
+
WindowCovering: devices.WindowCoveringDevice,
|
|
101
|
+
// Other
|
|
102
|
+
GenericSwitch: devices.GenericSwitchDevice,
|
|
103
|
+
Pump: devices.PumpDevice,
|
|
104
|
+
RoomAirConditioner: devices.RoomAirConditionerDevice,
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=matterTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matterTypes.js","sourceRoot":"","sources":["../../src/matter/matterTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAEhB,UAAU,EACX,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAerD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAC5B,QAAQ,UAAQ;IAGvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAGnB;IAGD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4D;IAClG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0D;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwD;gBAEnF,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM;IA+C7E,mBAAmB,IAAI,gBAAgB;IAIvC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,0BAA0B,GAAG,IAAI;IAYrF,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,yBAAyB,GAAG,IAAI;IAYlF,uBAAuB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,GAAG,0BAA0B;IAW7G,sBAAsB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,GAAG,yBAAyB;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAEhB,UAAU,EACX,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAerD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAC5B,QAAQ,UAAQ;IAGvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,WAAW,CAAC,CAGnB;IAGD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA4D;IAClG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA0D;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwD;gBAEnF,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM;IA+C7E,mBAAmB,IAAI,gBAAgB;IAIvC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,0BAA0B,GAAG,IAAI;IAYrF,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,yBAAyB,GAAG,IAAI;IAYlF,uBAAuB,CAAC,mBAAmB,EAAE,mBAAmB,GAAG,aAAa,GAAG,0BAA0B;IAW7G,sBAAsB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,GAAG,yBAAyB;IAmBxG,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,YAAY,EAAE,cAAc,EAAE,qBAAqB,GAAG,IAAI;IAczH,wBAAwB,CAAC,YAAY,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS;IAMjF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD3B,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlD"}
|
package/dist/plugin.js
CHANGED
|
@@ -107,9 +107,11 @@ export class Plugin {
|
|
|
107
107
|
throw new Error(`The requested platform '${name}' was not registered by the plugin '${this.getPluginIdentifier()}'.`);
|
|
108
108
|
}
|
|
109
109
|
// If it's a dynamic platform plugin, ensure it's not enabled multiple times.
|
|
110
|
-
|
|
110
|
+
// Skip this check in child bridge context (when process.send exists, we're a forked child)
|
|
111
|
+
const isChildBridge = typeof process.send === 'function';
|
|
112
|
+
if (!isChildBridge && this.activeDynamicPlatforms.has(name)) {
|
|
111
113
|
throw new Error(`The dynamic platform ${name} from the plugin ${this.getPluginIdentifier()} is configured `
|
|
112
|
-
+ 'times in your config.json.');
|
|
114
|
+
+ 'multiple times in your config.json.');
|
|
113
115
|
}
|
|
114
116
|
return constructor;
|
|
115
117
|
}
|