homebridge 2.0.0-alpha.7 → 2.0.0-alpha.71
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/README.md +1 -1
- package/bin/homebridge.js +22 -0
- package/dist/api.d.ts +250 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +92 -0
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +11 -3
- package/dist/bridgeService.d.ts.map +1 -1
- package/dist/bridgeService.js +9 -5
- package/dist/bridgeService.js.map +1 -1
- package/dist/childBridgeFork.d.ts +30 -3
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +278 -5
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +22 -0
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +85 -26
- package/dist/childBridgeService.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -2
- package/dist/cli.js.map +1 -1
- package/dist/externalPortService.d.ts +27 -6
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +73 -7
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +48 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/ipcService.d.ts +20 -0
- package/dist/ipcService.d.ts.map +1 -1
- package/dist/ipcService.js.map +1 -1
- package/dist/logger.d.ts +6 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +8 -0
- package/dist/logger.js.map +1 -1
- package/dist/matter/index.d.ts +123 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +19 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/matterAccessoryCache.d.ts +77 -0
- package/dist/matter/matterAccessoryCache.d.ts.map +1 -0
- package/dist/matter/matterAccessoryCache.js +176 -0
- package/dist/matter/matterAccessoryCache.js.map +1 -0
- package/dist/matter/matterBehaviors.d.ts +177 -0
- package/dist/matter/matterBehaviors.d.ts.map +1 -0
- package/dist/matter/matterBehaviors.js +639 -0
- package/dist/matter/matterBehaviors.js.map +1 -0
- package/dist/matter/matterConfigValidator.d.ts +81 -0
- package/dist/matter/matterConfigValidator.d.ts.map +1 -0
- package/dist/matter/matterConfigValidator.js +240 -0
- package/dist/matter/matterConfigValidator.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 +485 -0
- package/dist/matter/matterErrorHandler.js.map +1 -0
- package/dist/matter/matterLogFormatter.d.ts +19 -0
- package/dist/matter/matterLogFormatter.d.ts.map +1 -0
- package/dist/matter/matterLogFormatter.js +126 -0
- package/dist/matter/matterLogFormatter.js.map +1 -0
- package/dist/matter/matterNetworkMonitor.d.ts +68 -0
- package/dist/matter/matterNetworkMonitor.d.ts.map +1 -0
- package/dist/matter/matterNetworkMonitor.js +249 -0
- package/dist/matter/matterNetworkMonitor.js.map +1 -0
- package/dist/matter/matterServer.d.ts +644 -0
- package/dist/matter/matterServer.d.ts.map +1 -0
- package/dist/matter/matterServer.js +1460 -0
- package/dist/matter/matterServer.js.map +1 -0
- package/dist/matter/matterServerHelpers.d.ts +76 -0
- package/dist/matter/matterServerHelpers.d.ts.map +1 -0
- package/dist/matter/matterServerHelpers.js +298 -0
- package/dist/matter/matterServerHelpers.js.map +1 -0
- package/dist/matter/matterSharedTypes.d.ts +165 -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 +126 -0
- package/dist/matter/matterStorage.d.ts.map +1 -0
- package/dist/matter/matterStorage.js +419 -0
- package/dist/matter/matterStorage.js.map +1 -0
- package/dist/matter/matterTypes.d.ts +668 -0
- package/dist/matter/matterTypes.d.ts.map +1 -0
- package/dist/matter/matterTypes.js +174 -0
- package/dist/matter/matterTypes.js.map +1 -0
- package/dist/platformAccessory.d.ts +1 -0
- package/dist/platformAccessory.d.ts.map +1 -1
- package/dist/platformAccessory.js +8 -1
- package/dist/platformAccessory.js.map +1 -1
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +8 -11
- package/dist/plugin.js.map +1 -1
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +22 -21
- package/dist/pluginManager.js.map +1 -1
- package/dist/server.d.ts +23 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +374 -10
- package/dist/server.js.map +1 -1
- package/dist/storageService.js +8 -8
- package/dist/storageService.js.map +1 -1
- package/dist/user.d.ts +1 -0
- package/dist/user.d.ts.map +1 -1
- package/dist/user.js +10 -7
- package/dist/user.js.map +1 -1
- package/dist/util/mac.d.ts.map +1 -1
- package/dist/util/mac.js +2 -2
- package/dist/util/mac.js.map +1 -1
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +23 -22
- package/bin/homebridge +0 -19
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
<img src="https://media.giphy.com/media/10l79ICohTu4iQ/giphy.gif" align="right" alt="Unlocking Door">
|
|
18
18
|
|
|
19
|
-
**Homebridge** is a lightweight Node.js server you can run on your home network
|
|
19
|
+
**Homebridge** is a lightweight Node.js server you can run on your home network to emulate the HomeKit Accessory Protocol (HAP). It supports plugins, which are community-contributed modules that provide a basic bridge from HomeKit to various 3rd-party APIs provided by manufacturers of "smart home" devices.
|
|
20
20
|
|
|
21
21
|
Since Siri supports devices added through HomeKit, this means that with Homebridge you can ask Siri to control devices that don't have any support for HomeKit at all. For instance, using just some of the available plugins, you can say:
|
|
22
22
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
//
|
|
4
|
+
// This executable sets up the environment and runs the Homebridge CLI.
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
import { realpathSync } from 'node:fs'
|
|
8
|
+
import { dirname, join } from 'node:path'
|
|
9
|
+
import process from 'node:process'
|
|
10
|
+
import { fileURLToPath, pathToFileURL } from 'node:url'
|
|
11
|
+
|
|
12
|
+
process.title = 'homebridge'
|
|
13
|
+
|
|
14
|
+
// Find the Homebridge lib
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
16
|
+
const lib = join(dirname(realpathSync(__filename)), '../dist')
|
|
17
|
+
|
|
18
|
+
// Convert the path to a file URL
|
|
19
|
+
const libUrl = pathToFileURL(join(lib, 'cli.js')).href
|
|
20
|
+
|
|
21
|
+
// Run Homebridge
|
|
22
|
+
import(libUrl).then(({ default: run }) => run())
|
package/dist/api.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Controller, Service } from 'hap-nodejs';
|
|
2
2
|
import type { AccessoryConfig, PlatformConfig } from './bridgeService.js';
|
|
3
3
|
import type { Logging } from './logger.js';
|
|
4
|
+
import type { SerializedMatterAccessory } from './matter/matterAccessoryCache.js';
|
|
4
5
|
import { EventEmitter } from 'node:events';
|
|
5
6
|
import hapNodeJs from 'hap-nodejs';
|
|
7
|
+
import { clusterNames, clusters, deviceTypes, MatterAccessory, MatterServer, MatterTypes } from './matter/index.js';
|
|
6
8
|
import { PlatformAccessory } from './platformAccessory.js';
|
|
7
9
|
import { User } from './user.js';
|
|
8
10
|
export type HAP = typeof hapNodeJs;
|
|
@@ -81,6 +83,16 @@ export interface DynamicPlatformPlugin extends PlatformPlugin {
|
|
|
81
83
|
* @param {PlatformAccessory} accessory which needs to be configured
|
|
82
84
|
*/
|
|
83
85
|
configureAccessory: (accessory: PlatformAccessory) => void;
|
|
86
|
+
/**
|
|
87
|
+
* This method is called for every Matter accessory, which is recreated from cache on startup.
|
|
88
|
+
* It should be used to track cached accessories so the plugin can determine which accessories
|
|
89
|
+
* to re-register and which to remove (if they no longer exist in the external system).
|
|
90
|
+
*
|
|
91
|
+
* This is the Matter equivalent of configureAccessory for HAP accessories.
|
|
92
|
+
*
|
|
93
|
+
* @param {SerializedMatterAccessory} accessory - cached Matter accessory
|
|
94
|
+
*/
|
|
95
|
+
configureMatterAccessory?: (accessory: SerializedMatterAccessory) => void;
|
|
84
96
|
}
|
|
85
97
|
/**
|
|
86
98
|
* Platform that exposes all available characteristics at the start of the plugin.
|
|
@@ -124,7 +136,174 @@ export declare const enum InternalAPIEvent {
|
|
|
124
136
|
PUBLISH_EXTERNAL_ACCESSORIES = "publishExternalAccessories",
|
|
125
137
|
REGISTER_PLATFORM_ACCESSORIES = "registerPlatformAccessories",
|
|
126
138
|
UPDATE_PLATFORM_ACCESSORIES = "updatePlatformAccessories",
|
|
127
|
-
UNREGISTER_PLATFORM_ACCESSORIES = "unregisterPlatformAccessories"
|
|
139
|
+
UNREGISTER_PLATFORM_ACCESSORIES = "unregisterPlatformAccessories",
|
|
140
|
+
PUBLISH_EXTERNAL_MATTER_ACCESSORIES = "publishExternalMatterAccessories",
|
|
141
|
+
REGISTER_MATTER_PLATFORM_ACCESSORIES = "registerMatterPlatformAccessories",
|
|
142
|
+
UNREGISTER_MATTER_PLATFORM_ACCESSORIES = "unregisterMatterPlatformAccessories",
|
|
143
|
+
UPDATE_MATTER_ACCESSORY_STATE = "updateMatterAccessoryState"
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Matter API Interface
|
|
147
|
+
* Provides access to Matter protocol functionality for creating Matter-compatible accessories.
|
|
148
|
+
* Similar to api.hap for HomeKit Accessory Protocol.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* // Register a Matter accessory
|
|
153
|
+
* api.matter.registerAccessory({
|
|
154
|
+
* uuid: api.matter.uuid.generate('my-light-unique-id'),
|
|
155
|
+
* displayName: 'Living Room Light',
|
|
156
|
+
* deviceType: api.matter.deviceTypes.OnOffLight,
|
|
157
|
+
* // ...
|
|
158
|
+
* })
|
|
159
|
+
*
|
|
160
|
+
* // Update state when device changes externally
|
|
161
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
162
|
+
*
|
|
163
|
+
* // Read current state
|
|
164
|
+
* const state = api.matter.getAccessoryState(uuid, api.matter.clusterNames.OnOff)
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export interface MatterAPI {
|
|
168
|
+
/**
|
|
169
|
+
* UUID generator (alias of api.hap.uuid for convenience)
|
|
170
|
+
* Use this to generate unique identifiers for Matter accessories
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* const uuid = api.matter.uuid.generate('my-light-unique-id')
|
|
175
|
+
* api.matter.registerAccessory({
|
|
176
|
+
* uuid,
|
|
177
|
+
* displayName: 'Living Room Light',
|
|
178
|
+
* // ...
|
|
179
|
+
* })
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
readonly uuid: HAP['uuid'];
|
|
183
|
+
/**
|
|
184
|
+
* Matter device types for creating accessories
|
|
185
|
+
* Maps friendly names to Matter.js device types
|
|
186
|
+
*/
|
|
187
|
+
readonly deviceTypes: typeof deviceTypes;
|
|
188
|
+
/**
|
|
189
|
+
* Matter clusters - Direct access to Matter.js cluster definitions
|
|
190
|
+
* For advanced use cases requiring low-level cluster access
|
|
191
|
+
*/
|
|
192
|
+
readonly clusters: typeof clusters;
|
|
193
|
+
/**
|
|
194
|
+
* Matter cluster names for type safety and autocomplete
|
|
195
|
+
* Use these constants with updateAccessoryState() and getAccessoryState()
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```typescript
|
|
199
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
200
|
+
* api.matter.getAccessoryState(uuid, api.matter.clusterNames.LevelControl)
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
readonly clusterNames: typeof clusterNames;
|
|
204
|
+
/**
|
|
205
|
+
* Matter types - Access to Matter.js cluster type definitions and enums
|
|
206
|
+
* Use these for type-safe attribute values (modes, states, etc.)
|
|
207
|
+
*
|
|
208
|
+
* @example
|
|
209
|
+
* ```typescript
|
|
210
|
+
* // Fan mode enum
|
|
211
|
+
* api.matter.updateAccessoryState(
|
|
212
|
+
* uuid,
|
|
213
|
+
* api.matter.clusterNames.FanControl,
|
|
214
|
+
* { fanMode: api.matter.types.FanControl.FanMode.High }
|
|
215
|
+
* )
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
218
|
+
readonly types: typeof MatterTypes;
|
|
219
|
+
/**
|
|
220
|
+
* Register Matter platform accessories (works exactly like HAP's registerPlatformAccessories)
|
|
221
|
+
*
|
|
222
|
+
* @param pluginIdentifier - The plugin identifier (e.g., 'homebridge-example')
|
|
223
|
+
* @param platformName - The platform name (e.g., 'ExamplePlatform')
|
|
224
|
+
* @param accessories - Array of Matter accessories to register
|
|
225
|
+
*/
|
|
226
|
+
registerPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void;
|
|
227
|
+
/**
|
|
228
|
+
* Unregister Matter platform accessories by UUID
|
|
229
|
+
* @param pluginIdentifier - The plugin identifier
|
|
230
|
+
* @param platformName - The platform name
|
|
231
|
+
* @param accessories - Array of Matter accessories to unregister (only uuid is required)
|
|
232
|
+
*/
|
|
233
|
+
unregisterPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void;
|
|
234
|
+
/**
|
|
235
|
+
* Publish external Matter accessories on their own dedicated Matter bridge
|
|
236
|
+
*
|
|
237
|
+
* Use this for devices that require isolation from other Matter accessories.
|
|
238
|
+
* Each external accessory gets its own Matter server instance on a separate port.
|
|
239
|
+
*
|
|
240
|
+
* Apple Home requires certain device types (like Robotic Vacuum Cleaners) to be
|
|
241
|
+
* on their own bridge. Use this method for those devices.
|
|
242
|
+
*
|
|
243
|
+
* Similar to api.publishExternalAccessories() for HAP accessories.
|
|
244
|
+
*
|
|
245
|
+
* @param pluginIdentifier - The plugin identifier (e.g., 'homebridge-example')
|
|
246
|
+
* @param accessories - Array of Matter accessories to publish externally
|
|
247
|
+
*/
|
|
248
|
+
publishExternalAccessories: (pluginIdentifier: PluginIdentifier, accessories: MatterAccessory[]) => void;
|
|
249
|
+
/**
|
|
250
|
+
* Update a Matter accessory's cluster state when device changes externally
|
|
251
|
+
*
|
|
252
|
+
* Use this for state updates from:
|
|
253
|
+
* - Native app controls
|
|
254
|
+
* - Physical button presses
|
|
255
|
+
* - Webhooks from cloud service
|
|
256
|
+
* - Polling results
|
|
257
|
+
*
|
|
258
|
+
* DO NOT use inside handlers - state auto-updates after handlers complete!
|
|
259
|
+
* Similar to HAP's characteristic.updateValue()
|
|
260
|
+
*
|
|
261
|
+
* @param uuid - The UUID of the accessory
|
|
262
|
+
* @param cluster - The cluster name (use api.matter.clusterNames for autocomplete)
|
|
263
|
+
* @param attributes - The attributes to update
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* // Device turned on via native app:
|
|
268
|
+
* api.matter.updateAccessoryState(
|
|
269
|
+
* uuid,
|
|
270
|
+
* api.matter.clusterNames.OnOff,
|
|
271
|
+
* { onOff: true }
|
|
272
|
+
* )
|
|
273
|
+
*
|
|
274
|
+
* // Device brightness changed via physical button:
|
|
275
|
+
* api.matter.updateAccessoryState(
|
|
276
|
+
* uuid,
|
|
277
|
+
* api.matter.clusterNames.LevelControl,
|
|
278
|
+
* { currentLevel: 200 }
|
|
279
|
+
* )
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
updateAccessoryState: (uuid: string, cluster: string, attributes: Record<string, any>) => void;
|
|
283
|
+
/**
|
|
284
|
+
* Get a Matter accessory's current cluster state
|
|
285
|
+
*
|
|
286
|
+
* Returns the current attribute values that are exposed to Matter controllers.
|
|
287
|
+
* Useful for:
|
|
288
|
+
* - Reading state after plugin restart
|
|
289
|
+
* - Verifying current state before making changes
|
|
290
|
+
* - Debugging and logging
|
|
291
|
+
*
|
|
292
|
+
* Similar to HAP's characteristic.value getter.
|
|
293
|
+
*
|
|
294
|
+
* @param uuid - The UUID of the accessory
|
|
295
|
+
* @param cluster - The cluster name (use api.matter.clusterNames for autocomplete)
|
|
296
|
+
* @returns Current cluster attribute values, or undefined if not found
|
|
297
|
+
*
|
|
298
|
+
* @example
|
|
299
|
+
* ```typescript
|
|
300
|
+
* const state = api.matter.getAccessoryState(uuid, api.matter.clusterNames.OnOff)
|
|
301
|
+
* if (state?.onOff) {
|
|
302
|
+
* console.log('Light is currently on')
|
|
303
|
+
* }
|
|
304
|
+
* ```
|
|
305
|
+
*/
|
|
306
|
+
getAccessoryState: (uuid: string, cluster: string) => Record<string, any> | undefined;
|
|
128
307
|
}
|
|
129
308
|
export interface API {
|
|
130
309
|
/**
|
|
@@ -139,6 +318,25 @@ export interface API {
|
|
|
139
318
|
readonly hap: HAP;
|
|
140
319
|
readonly hapLegacyTypes: HAPLegacyTypes;
|
|
141
320
|
readonly platformAccessory: typeof PlatformAccessory;
|
|
321
|
+
/**
|
|
322
|
+
* Matter Protocol API
|
|
323
|
+
* Provides access to Matter functionality, similar to api.hap for HomeKit
|
|
324
|
+
*
|
|
325
|
+
* @example
|
|
326
|
+
* ```typescript
|
|
327
|
+
* // Register a Matter accessory
|
|
328
|
+
* api.matter.registerAccessory({
|
|
329
|
+
* uuid: api.matter.uuid.generate('my-light'),
|
|
330
|
+
* displayName: 'Living Room Light',
|
|
331
|
+
* deviceType: api.matter.deviceTypes.OnOffLight,
|
|
332
|
+
* // ...
|
|
333
|
+
* })
|
|
334
|
+
*
|
|
335
|
+
* // Update state
|
|
336
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
337
|
+
* ```
|
|
338
|
+
*/
|
|
339
|
+
readonly matter: MatterAPI;
|
|
142
340
|
/**
|
|
143
341
|
* Returns true if the current running homebridge version is greater or equal to the
|
|
144
342
|
* passed version string.
|
|
@@ -161,11 +359,23 @@ export interface API {
|
|
|
161
359
|
updatePlatformAccessories: (accessories: PlatformAccessory[]) => void;
|
|
162
360
|
unregisterPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]) => void;
|
|
163
361
|
publishExternalAccessories: (pluginIdentifier: PluginIdentifier, accessories: PlatformAccessory[]) => void;
|
|
362
|
+
/**
|
|
363
|
+
* Check if Matter is available in this version of Homebridge
|
|
364
|
+
* @returns true if Homebridge version is >= 2.0.0-alpha.0
|
|
365
|
+
*/
|
|
366
|
+
isMatterAvailable: () => boolean;
|
|
367
|
+
/**
|
|
368
|
+
* Check if Matter is enabled for this bridge
|
|
369
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
370
|
+
* For child bridge: returns true if Matter is enabled in the _bridge.matter config
|
|
371
|
+
* @returns true if Matter is enabled
|
|
372
|
+
*/
|
|
373
|
+
isMatterEnabled: () => boolean;
|
|
164
374
|
on: ((event: 'didFinishLaunching', listener: () => void) => this) & ((event: 'shutdown', listener: () => void) => this);
|
|
165
375
|
}
|
|
166
376
|
export declare interface HomebridgeAPI {
|
|
167
|
-
on: ((event: 'didFinishLaunching', listener: () => void) => this) & ((event: 'shutdown', listener: () => void) => this) & ((event: InternalAPIEvent.REGISTER_ACCESSORY, listener: (accessoryName: AccessoryName, accessoryConstructor: AccessoryPluginConstructor, pluginIdentifier?: PluginIdentifier) => void) => this) & ((event: InternalAPIEvent.REGISTER_PLATFORM, listener: (platformName: PlatformName, platformConstructor: PlatformPluginConstructor, pluginIdentifier?: PluginIdentifier) => void) => this) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this);
|
|
168
|
-
emit: ((event: 'didFinishLaunching') => boolean) & ((event: 'shutdown') => boolean) & ((event: InternalAPIEvent.REGISTER_ACCESSORY, accessoryName: AccessoryName, accessoryConstructor: AccessoryPluginConstructor, pluginIdentifier?: PluginIdentifier) => boolean) & ((event: InternalAPIEvent.REGISTER_PLATFORM, platformName: PlatformName, platformConstructor: PlatformPluginConstructor, pluginIdentifier?: PluginIdentifier) => boolean) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean);
|
|
377
|
+
on: ((event: 'didFinishLaunching', listener: () => void) => this) & ((event: 'shutdown', listener: () => void) => this) & ((event: InternalAPIEvent.REGISTER_ACCESSORY, listener: (accessoryName: AccessoryName, accessoryConstructor: AccessoryPluginConstructor, pluginIdentifier?: PluginIdentifier) => void) => this) & ((event: InternalAPIEvent.REGISTER_PLATFORM, listener: (platformName: PlatformName, platformConstructor: PlatformPluginConstructor, pluginIdentifier?: PluginIdentifier) => void) => this) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES, listener: (accessories: PlatformAccessory[]) => void) => this) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES, listener: (accessories: MatterAccessory[]) => void) => this) & ((event: InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES, listener: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void) => this) & ((event: InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES, listener: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void) => this) & ((event: InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE, listener: (uuid: string, cluster: string, attributes: Record<string, any>) => void) => this);
|
|
378
|
+
emit: ((event: 'didFinishLaunching') => boolean) & ((event: 'shutdown') => boolean) & ((event: InternalAPIEvent.REGISTER_ACCESSORY, accessoryName: AccessoryName, accessoryConstructor: AccessoryPluginConstructor, pluginIdentifier?: PluginIdentifier) => boolean) & ((event: InternalAPIEvent.REGISTER_PLATFORM, platformName: PlatformName, platformConstructor: PlatformPluginConstructor, pluginIdentifier?: PluginIdentifier) => boolean) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES, accessories: PlatformAccessory[]) => boolean) & ((event: InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES, accessories: MatterAccessory[]) => boolean) & ((event: InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES, pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => boolean) & ((event: InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES, pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => boolean) & ((event: InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE, uuid: string, cluster: string, attributes: Record<string, any>) => boolean);
|
|
169
379
|
}
|
|
170
380
|
export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
171
381
|
readonly version = 2.7;
|
|
@@ -174,7 +384,32 @@ export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
|
174
384
|
readonly hap: typeof hapNodeJs;
|
|
175
385
|
readonly hapLegacyTypes: typeof hapNodeJs.LegacyTypes;
|
|
176
386
|
readonly platformAccessory: typeof PlatformAccessory;
|
|
387
|
+
/**
|
|
388
|
+
* Matter Protocol API
|
|
389
|
+
*/
|
|
390
|
+
readonly matter: MatterAPI;
|
|
391
|
+
/**
|
|
392
|
+
* Internal state tracking whether Matter is enabled for this bridge
|
|
393
|
+
*/
|
|
394
|
+
private matterEnabled;
|
|
395
|
+
/**
|
|
396
|
+
* Internal reference to MatterServer for API methods that need return values
|
|
397
|
+
* @internal
|
|
398
|
+
*/
|
|
399
|
+
private _matterServer;
|
|
177
400
|
constructor();
|
|
401
|
+
/**
|
|
402
|
+
* Internal method to set Matter enabled status
|
|
403
|
+
* Called by Server or ChildBridgeFork after Matter initialization
|
|
404
|
+
* @internal
|
|
405
|
+
*/
|
|
406
|
+
_setMatterEnabled(enabled: boolean): void;
|
|
407
|
+
/**
|
|
408
|
+
* Internal method to set MatterServer reference
|
|
409
|
+
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
410
|
+
* @internal
|
|
411
|
+
*/
|
|
412
|
+
_setMatterServer(server: MatterServer | null): void;
|
|
178
413
|
versionGreaterOrEqual(version: string): boolean;
|
|
179
414
|
static isDynamicPlatformPlugin(platformPlugin: PlatformPlugin): platformPlugin is DynamicPlatformPlugin;
|
|
180
415
|
static isStaticPlatformPlugin(platformPlugin: PlatformPlugin): platformPlugin is StaticPlatformPlugin;
|
|
@@ -189,5 +424,17 @@ export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
|
189
424
|
registerPlatformAccessories(pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]): void;
|
|
190
425
|
updatePlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
191
426
|
unregisterPlatformAccessories(pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]): void;
|
|
427
|
+
/**
|
|
428
|
+
* Check if Matter is available in this version of Homebridge
|
|
429
|
+
* @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
|
|
430
|
+
*/
|
|
431
|
+
isMatterAvailable(): boolean;
|
|
432
|
+
/**
|
|
433
|
+
* Check if Matter is enabled for this bridge
|
|
434
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
435
|
+
* For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
|
|
436
|
+
* @returns true if Matter is enabled
|
|
437
|
+
*/
|
|
438
|
+
isMatterEnabled(): boolean;
|
|
192
439
|
}
|
|
193
440
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -2,6 +2,7 @@ import { EventEmitter } from 'node:events';
|
|
|
2
2
|
import hapNodeJs from 'hap-nodejs';
|
|
3
3
|
import semver from 'semver';
|
|
4
4
|
import { Logger } from './logger.js';
|
|
5
|
+
import { clusterNames, clusters, deviceTypes, MatterTypes } from './matter/index.js';
|
|
5
6
|
import { PlatformAccessory } from './platformAccessory.js';
|
|
6
7
|
import { PluginManager } from './pluginManager.js';
|
|
7
8
|
import { User } from './user.js';
|
|
@@ -37,6 +38,11 @@ export var InternalAPIEvent;
|
|
|
37
38
|
InternalAPIEvent["REGISTER_PLATFORM_ACCESSORIES"] = "registerPlatformAccessories";
|
|
38
39
|
InternalAPIEvent["UPDATE_PLATFORM_ACCESSORIES"] = "updatePlatformAccessories";
|
|
39
40
|
InternalAPIEvent["UNREGISTER_PLATFORM_ACCESSORIES"] = "unregisterPlatformAccessories";
|
|
41
|
+
// Matter events (matching HAP pattern)
|
|
42
|
+
InternalAPIEvent["PUBLISH_EXTERNAL_MATTER_ACCESSORIES"] = "publishExternalMatterAccessories";
|
|
43
|
+
InternalAPIEvent["REGISTER_MATTER_PLATFORM_ACCESSORIES"] = "registerMatterPlatformAccessories";
|
|
44
|
+
InternalAPIEvent["UNREGISTER_MATTER_PLATFORM_ACCESSORIES"] = "unregisterMatterPlatformAccessories";
|
|
45
|
+
InternalAPIEvent["UPDATE_MATTER_ACCESSORY_STATE"] = "updateMatterAccessoryState";
|
|
40
46
|
})(InternalAPIEvent || (InternalAPIEvent = {}));
|
|
41
47
|
// eslint-disable-next-line ts/no-unsafe-declaration-merging
|
|
42
48
|
export class HomebridgeAPI extends EventEmitter {
|
|
@@ -48,8 +54,78 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
48
54
|
hapLegacyTypes = hapNodeJs.LegacyTypes; // used for older accessories/platforms
|
|
49
55
|
platformAccessory = PlatformAccessory;
|
|
50
56
|
// ------------------------------------------------------------------------
|
|
57
|
+
/**
|
|
58
|
+
* Matter Protocol API
|
|
59
|
+
*/
|
|
60
|
+
matter;
|
|
61
|
+
/**
|
|
62
|
+
* Internal state tracking whether Matter is enabled for this bridge
|
|
63
|
+
*/
|
|
64
|
+
matterEnabled = false;
|
|
65
|
+
/**
|
|
66
|
+
* Internal reference to MatterServer for API methods that need return values
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
_matterServer = null;
|
|
51
70
|
constructor() {
|
|
52
71
|
super();
|
|
72
|
+
// Initialize Matter API (just like HAP)
|
|
73
|
+
this.matter = {
|
|
74
|
+
uuid: this.hap.uuid,
|
|
75
|
+
deviceTypes,
|
|
76
|
+
clusters,
|
|
77
|
+
clusterNames,
|
|
78
|
+
types: MatterTypes,
|
|
79
|
+
registerPlatformAccessories: (pluginIdentifier, platformName, accessories) => {
|
|
80
|
+
// Add plugin/platform association to accessories
|
|
81
|
+
accessories.forEach((accessory) => {
|
|
82
|
+
const internal = accessory;
|
|
83
|
+
internal._associatedPlugin = pluginIdentifier;
|
|
84
|
+
internal._associatedPlatform = platformName;
|
|
85
|
+
});
|
|
86
|
+
this.emit("registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */, pluginIdentifier, platformName, accessories);
|
|
87
|
+
},
|
|
88
|
+
unregisterPlatformAccessories: (pluginIdentifier, platformName, accessories) => {
|
|
89
|
+
this.emit("unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */, pluginIdentifier, platformName, accessories);
|
|
90
|
+
},
|
|
91
|
+
publishExternalAccessories: (pluginIdentifier, accessories) => {
|
|
92
|
+
if (!PluginManager.isQualifiedPluginIdentifier(pluginIdentifier)) {
|
|
93
|
+
log.info(`One of your plugins incorrectly registered an external Matter accessory using the platform name (${pluginIdentifier}) and not the plugin identifier. Please report this to the developer!`);
|
|
94
|
+
}
|
|
95
|
+
// Add plugin association to accessories
|
|
96
|
+
accessories.forEach((accessory) => {
|
|
97
|
+
const internal = accessory;
|
|
98
|
+
internal._associatedPlugin = pluginIdentifier;
|
|
99
|
+
});
|
|
100
|
+
this.emit("publishExternalMatterAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES */, accessories);
|
|
101
|
+
},
|
|
102
|
+
updateAccessoryState: (uuid, cluster, attributes) => {
|
|
103
|
+
this.emit("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, cluster, attributes);
|
|
104
|
+
},
|
|
105
|
+
getAccessoryState: (uuid, cluster) => {
|
|
106
|
+
if (!this._matterServer) {
|
|
107
|
+
log.debug('Matter server not available for getAccessoryState');
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
return this._matterServer.getAccessoryState(uuid, cluster);
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Internal method to set Matter enabled status
|
|
116
|
+
* Called by Server or ChildBridgeFork after Matter initialization
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
_setMatterEnabled(enabled) {
|
|
120
|
+
this.matterEnabled = enabled;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Internal method to set MatterServer reference
|
|
124
|
+
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
_setMatterServer(server) {
|
|
128
|
+
this._matterServer = server;
|
|
53
129
|
}
|
|
54
130
|
versionGreaterOrEqual(version) {
|
|
55
131
|
return semver.gte(this.serverVersion, version);
|
|
@@ -125,5 +201,21 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
125
201
|
});
|
|
126
202
|
this.emit("unregisterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES */, accessories);
|
|
127
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Check if Matter is available in this version of Homebridge
|
|
206
|
+
* @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
|
|
207
|
+
*/
|
|
208
|
+
isMatterAvailable() {
|
|
209
|
+
return semver.gte(this.serverVersion, '2.0.0-alpha.0');
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if Matter is enabled for this bridge
|
|
213
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
214
|
+
* For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
|
|
215
|
+
* @returns true if Matter is enabled
|
|
216
|
+
*/
|
|
217
|
+
isMatterEnabled() {
|
|
218
|
+
return this.matterEnabled;
|
|
219
|
+
}
|
|
128
220
|
}
|
|
129
221
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,SAAS,MAAM,YAAY,CAAA;AAClC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAiC,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACnH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;AAc3B,gDAAgD;AAChD,MAAM,CAAN,IAAkB,UAGjB;AAHD,WAAkB,UAAU;IAC1B,qCAAuB,CAAA;IACvB,mCAAqB,CAAA;AACvB,CAAC,EAHiB,UAAU,KAAV,UAAU,QAG3B;AA8GD,gDAAgD;AAChD,MAAM,CAAN,IAAkB,QAajB;AAbD,WAAkB,QAAQ;IACxB;;;;OAIG;IACH,uDAA2C,CAAA;IAE3C;;;OAGG;IACH,iCAAqB,CAAA;AACvB,CAAC,EAbiB,QAAQ,KAAR,QAAQ,QAazB;AAED,gDAAgD;AAChD,MAAM,CAAN,IAAkB,gBAcjB;AAdD,WAAkB,gBAAgB;IAChC,4DAAwC,CAAA;IACxC,0DAAsC,CAAA;IAEtC,+EAA2D,CAAA;IAC3D,iFAA6D,CAAA;IAC7D,6EAAyD,CAAA;IACzD,qFAAiE,CAAA;IAEjE,uCAAuC;IACvC,4FAAwE,CAAA;IACxE,8FAA0E,CAAA;IAC1E,kGAA8E,CAAA;IAC9E,gFAA4D,CAAA;AAC9D,CAAC,EAdiB,gBAAgB,KAAhB,gBAAgB,QAcjC;AAuQD,4DAA4D;AAC5D,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7B,OAAO,GAAG,GAAG,CAAA,CAAC,yBAAyB;IACvC,aAAa,GAAG,UAAU,EAAE,CAAA,CAAC,iCAAiC;IAE9E,2EAA2E;IAClE,IAAI,GAAG,IAAI,CAAA;IACX,GAAG,GAAG,SAAS,CAAA;IACf,cAAc,GAAG,SAAS,CAAC,WAAW,CAAA,CAAC,uCAAuC;IAC9E,iBAAiB,GAAG,iBAAiB,CAAA;IAC9C,2EAA2E;IAE3E;;OAEG;IACa,MAAM,CAAW;IAEjC;;OAEG;IACK,aAAa,GAAG,KAAK,CAAA;IAE7B;;;OAGG;IACK,aAAa,GAAwB,IAAI,CAAA;IAEjD;QACE,KAAK,EAAE,CAAA;QAEP,wCAAwC;QACxC,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACnB,WAAW;YACX,QAAQ;YACR,YAAY;YACZ,KAAK,EAAE,WAAW;YAClB,2BAA2B,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;gBAC3E,iDAAiD;gBACjD,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;oBAChC,MAAM,QAAQ,GAAG,SAAoC,CAAA;oBACrD,QAAQ,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;oBAC7C,QAAQ,CAAC,mBAAmB,GAAG,YAAY,CAAA;gBAC7C,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,IAAI,kGAAwD,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;YAC/G,CAAC;YACD,6BAA6B,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE;gBAC7E,IAAI,CAAC,IAAI,sGAA0D,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAA;YACjH,CAAC;YACD,0BAA0B,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,EAAE;gBAC5D,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,oGAAoG,gBAAgB,uEAAuE,CAAC,CAAA;gBACvM,CAAC;gBAED,wCAAwC;gBACxC,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;oBAChC,MAAM,QAAQ,GAAG,SAAoC,CAAA;oBACrD,QAAQ,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;gBAC/C,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,IAAI,gGAAuD,WAAW,CAAC,CAAA;YAC9E,CAAC;YACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;gBAClD,IAAI,CAAC,IAAI,oFAAiD,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAA;YACtF,CAAC;YACD,iBAAiB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACnC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBACxB,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;oBAC9D,OAAO,SAAS,CAAA;gBAClB,CAAC;gBACD,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC5D,CAAC;SACF,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAgB;QAChC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,MAA2B;QAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAA;IAC7B,CAAC;IAEM,qBAAqB,CAAC,OAAe;QAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IAEM,MAAM,CAAC,uBAAuB,CAAC,cAA8B;QAClE,OAAO,oBAAoB,IAAI,cAAc,CAAA;IAC/C,CAAC;IAEM,MAAM,CAAC,sBAAsB,CAAC,cAA8B;QACjE,OAAO,aAAa,IAAI,cAAc,CAAA;IACxC,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,0DAA+B,CAAA;IAC1C,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,oCAAmB,CAAA;IAC9B,CAAC;IAID,iBAAiB,CAAC,gBAAkD,EAAE,aAAyD,EAAE,WAAwC;QACvK,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACxC,WAAW,GAAG,aAAa,CAAA;YAC3B,aAAa,GAAG,gBAAgB,CAAA;YAChC,IAAI,CAAC,IAAI,gEAAsC,aAAa,EAAE,WAAW,CAAC,CAAA;QAC5E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,gEAAsC,aAAa,EAAE,WAAY,EAAE,gBAAgB,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC;IAID,gBAAgB,CAAC,gBAAiD,EAAE,YAAsD,EAAE,WAAuC;QACjK,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;YACvC,WAAW,GAAG,YAAY,CAAA;YAC1B,YAAY,GAAG,gBAAgB,CAAA;YAC/B,IAAI,CAAC,IAAI,8DAAqC,YAAY,EAAE,WAAW,CAAC,CAAA;QAC1E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,8DAAqC,YAAY,EAAE,WAAY,EAAE,gBAAgB,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC;IAED,wBAAwB,CAAC,gBAAkC,EAAE,WAAgC;QAC3F,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAA;IAChE,CAAC;IAED,0BAA0B,CAAC,gBAAkC,EAAE,WAAgC;QAC7F,IAAI,CAAC,aAAa,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjE,GAAG,CAAC,IAAI,CAAC,6FAA6F,gBAAgB,uEAAuE,CAAC,CAAA;QAChM,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAChC,qCAAqC;YACrC,IAAI,CAAC,CAAC,SAAS,YAAY,iBAAiB,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,gBAAgB,iEAAiE,CAAC,CAAA;YAC3G,CAAC;YAED,SAAS,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,mFAAgD,WAAW,CAAC,CAAA;IACvE,CAAC;IAED,2BAA2B,CAAC,gBAAkC,EAAE,YAA0B,EAAE,WAAgC;QAC1H,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAChC,qCAAqC;YACrC,IAAI,CAAC,CAAC,SAAS,YAAY,iBAAiB,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,gBAAgB,MAAM,YAAY,iEAAiE,CAAC,CAAA;YAC7H,CAAC;YAED,SAAS,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;YAC9C,SAAS,CAAC,mBAAmB,GAAG,YAAY,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,qFAAiD,WAAW,CAAC,CAAA;IACxE,CAAC;IAED,yBAAyB,CAAC,WAAgC;QACxD,IAAI,CAAC,IAAI,iFAA+C,WAAW,CAAC,CAAA;IACtE,CAAC;IAED,6BAA6B,CAAC,gBAAkC,EAAE,YAA0B,EAAE,WAAgC;QAC5H,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAChC,qCAAqC;YACrC,IAAI,CAAC,CAAC,SAAS,YAAY,iBAAiB,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,SAAS,CAAC,GAAG,gBAAgB,MAAM,YAAY,mEAAmE,CAAC,CAAA;YAC/H,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,yFAAmD,WAAW,CAAC,CAAA;IAC1E,CAAC;IAED;;;OAGG;IACH,iBAAiB;QACf,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IACxD,CAAC;IAED;;;;;OAKG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;CACF"}
|
package/dist/bridgeService.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { CharacteristicWarning, InterfaceName, IPAddress, MacAddress, MDNSA
|
|
|
2
2
|
import type { AccessoryIdentifier, AccessoryName, AccessoryPlugin, HomebridgeAPI, PlatformIdentifier, PlatformName, PluginIdentifier, StaticPlatformPlugin } from './api.js';
|
|
3
3
|
import type { ExternalPortsConfiguration, ExternalPortService } from './externalPortService.js';
|
|
4
4
|
import type { Logging } from './logger.js';
|
|
5
|
+
import type { MatterConfig } from './matter/index.js';
|
|
5
6
|
import type { Plugin } from './plugin.js';
|
|
6
7
|
import type { HomebridgeOptions } from './server.js';
|
|
7
8
|
import { Accessory, Bridge } from 'hap-nodejs';
|
|
@@ -19,6 +20,9 @@ export interface BridgeConfiguration {
|
|
|
19
20
|
model?: string;
|
|
20
21
|
disableIpc?: boolean;
|
|
21
22
|
firmwareRevision?: string;
|
|
23
|
+
serialNumber?: string;
|
|
24
|
+
debugModeEnabled?: boolean;
|
|
25
|
+
matter?: MatterConfig;
|
|
22
26
|
env?: {
|
|
23
27
|
DEBUG?: string;
|
|
24
28
|
NODE_OPTIONS?: string;
|
|
@@ -37,6 +41,10 @@ export interface PlatformConfig extends Record<string, any> {
|
|
|
37
41
|
}
|
|
38
42
|
export interface HomebridgeConfig {
|
|
39
43
|
bridge: BridgeConfiguration;
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated
|
|
46
|
+
*/
|
|
47
|
+
mdns?: any;
|
|
40
48
|
accessories: AccessoryConfig[];
|
|
41
49
|
platforms: PlatformConfig[];
|
|
42
50
|
plugins?: PluginIdentifier[];
|
|
@@ -47,6 +55,7 @@ export interface HomebridgeConfig {
|
|
|
47
55
|
*/
|
|
48
56
|
disabledPlugins?: PluginIdentifier[];
|
|
49
57
|
ports?: ExternalPortsConfiguration;
|
|
58
|
+
matterPorts?: ExternalPortsConfiguration;
|
|
50
59
|
}
|
|
51
60
|
export interface BridgeOptions extends HomebridgeOptions {
|
|
52
61
|
cachedAccessoriesDir: string;
|
|
@@ -61,14 +70,13 @@ export declare class BridgeService {
|
|
|
61
70
|
private externalPortService;
|
|
62
71
|
private bridgeOptions;
|
|
63
72
|
private bridgeConfig;
|
|
64
|
-
private config;
|
|
65
73
|
bridge: Bridge;
|
|
66
74
|
private storageService;
|
|
67
75
|
private readonly allowInsecureAccess;
|
|
68
76
|
private cachedPlatformAccessories;
|
|
69
77
|
private cachedAccessoriesFileLoaded;
|
|
70
78
|
private readonly publishedExternalAccessories;
|
|
71
|
-
constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration
|
|
79
|
+
constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration);
|
|
72
80
|
static printCharacteristicWriteWarning(plugin: Plugin, accessory: Accessory, opts: CharacteristicWarningOpts, warning: CharacteristicWarning): void;
|
|
73
81
|
publishBridge(): void;
|
|
74
82
|
/**
|
|
@@ -95,7 +103,7 @@ export declare class BridgeService {
|
|
|
95
103
|
*/
|
|
96
104
|
saveCachedPlatformAccessoriesOnDisk(): void;
|
|
97
105
|
handleRegisterPlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
98
|
-
handleUpdatePlatformAccessories(): void;
|
|
106
|
+
handleUpdatePlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
99
107
|
handleUnregisterPlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
100
108
|
handlePublishExternalAccessories(accessories: PlatformAccessory[]): Promise<void>;
|
|
101
109
|
createHAPAccessory(plugin: Plugin, accessoryInstance: AccessoryPlugin, displayName: string, accessoryType: AccessoryName | AccessoryIdentifier, uuidBase?: string): Accessory | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,UAAU,EACV,cAAc,EAGf,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"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"}
|
package/dist/bridgeService.js
CHANGED
|
@@ -12,20 +12,18 @@ export class BridgeService {
|
|
|
12
12
|
externalPortService;
|
|
13
13
|
bridgeOptions;
|
|
14
14
|
bridgeConfig;
|
|
15
|
-
config;
|
|
16
15
|
bridge;
|
|
17
16
|
storageService;
|
|
18
17
|
allowInsecureAccess;
|
|
19
18
|
cachedPlatformAccessories = [];
|
|
20
19
|
cachedAccessoriesFileLoaded = false;
|
|
21
20
|
publishedExternalAccessories = new Map();
|
|
22
|
-
constructor(api, pluginManager, externalPortService, bridgeOptions, bridgeConfig
|
|
21
|
+
constructor(api, pluginManager, externalPortService, bridgeOptions, bridgeConfig) {
|
|
23
22
|
this.api = api;
|
|
24
23
|
this.pluginManager = pluginManager;
|
|
25
24
|
this.externalPortService = externalPortService;
|
|
26
25
|
this.bridgeOptions = bridgeOptions;
|
|
27
26
|
this.bridgeConfig = bridgeConfig;
|
|
28
|
-
this.config = config;
|
|
29
27
|
this.storageService = new StorageService(this.bridgeOptions.cachedAccessoriesDir);
|
|
30
28
|
this.storageService.initSync();
|
|
31
29
|
// Server is "secure by default", meaning it creates a top-level Bridge accessory that
|
|
@@ -81,7 +79,7 @@ export class BridgeService {
|
|
|
81
79
|
const info = this.bridge.getService(Service.AccessoryInformation);
|
|
82
80
|
info.setCharacteristic(Characteristic.Manufacturer, bridgeConfig.manufacturer || 'homebridge.io');
|
|
83
81
|
info.setCharacteristic(Characteristic.Model, bridgeConfig.model || 'homebridge');
|
|
84
|
-
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.username);
|
|
82
|
+
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.serialNumber || bridgeConfig.username);
|
|
85
83
|
info.setCharacteristic(Characteristic.FirmwareRevision, bridgeConfig.firmwareRevision || getVersion());
|
|
86
84
|
this.bridge.on("listening" /* AccessoryEventTypes.LISTENING */, (port) => {
|
|
87
85
|
log.success('Homebridge v%s (HAP v%s) (%s) is running on port %s.', getVersion(), HAPLibraryVersion(), bridgeConfig.name, port);
|
|
@@ -248,7 +246,13 @@ export class BridgeService {
|
|
|
248
246
|
this.bridge.addBridgedAccessories(hapAccessories);
|
|
249
247
|
this.saveCachedPlatformAccessoriesOnDisk();
|
|
250
248
|
}
|
|
251
|
-
handleUpdatePlatformAccessories() {
|
|
249
|
+
handleUpdatePlatformAccessories(accessories) {
|
|
250
|
+
if (!Array.isArray(accessories)) {
|
|
251
|
+
// This could be quite destructive if a non-array is passed in, so we'll just ignore it.
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const nonUpdatedPlugins = this.cachedPlatformAccessories.filter(cachedPlatformAccessory => (accessories.find(accessory => accessory.UUID === cachedPlatformAccessory._associatedHAPAccessory.UUID) === undefined));
|
|
255
|
+
this.cachedPlatformAccessories = [...nonUpdatedPlugins, ...accessories];
|
|
252
256
|
// Update persisted accessories
|
|
253
257
|
this.saveCachedPlatformAccessoriesOnDisk();
|
|
254
258
|
}
|