homebridge 2.0.0-alpha.5 → 2.0.0-alpha.50
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 +219 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +79 -0
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +10 -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 +17 -2
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +161 -4
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +21 -0
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +72 -25
- 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.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 +51 -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/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 +127 -0
- package/dist/matter/matterBehaviors.d.ts.map +1 -0
- package/dist/matter/matterBehaviors.js +611 -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 +18 -0
- package/dist/matter/matterLogFormatter.d.ts.map +1 -0
- package/dist/matter/matterLogFormatter.js +128 -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 +250 -0
- package/dist/matter/matterNetworkMonitor.js.map +1 -0
- package/dist/matter/matterServer.d.ts +283 -0
- package/dist/matter/matterServer.d.ts.map +1 -0
- package/dist/matter/matterServer.js +1416 -0
- package/dist/matter/matterServer.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 +250 -0
- package/dist/matter/matterTypes.d.ts.map +1 -0
- package/dist/matter/matterTypes.js +142 -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 +9 -12
- 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 +16 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +276 -8
- 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 +25 -26
- 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 } 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,143 @@ 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
|
+
REGISTER_MATTER_PLATFORM_ACCESSORIES = "registerMatterPlatformAccessories",
|
|
141
|
+
UNREGISTER_MATTER_PLATFORM_ACCESSORIES = "unregisterMatterPlatformAccessories",
|
|
142
|
+
UPDATE_MATTER_ACCESSORY_STATE = "updateMatterAccessoryState"
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Matter API Interface
|
|
146
|
+
* Provides access to Matter protocol functionality for creating Matter-compatible accessories.
|
|
147
|
+
* Similar to api.hap for HomeKit Accessory Protocol.
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* // Register a Matter accessory
|
|
152
|
+
* api.matter.registerAccessory({
|
|
153
|
+
* uuid: api.matter.uuid.generate('my-light-unique-id'),
|
|
154
|
+
* displayName: 'Living Room Light',
|
|
155
|
+
* deviceType: api.matter.deviceTypes.OnOffLight,
|
|
156
|
+
* // ...
|
|
157
|
+
* })
|
|
158
|
+
*
|
|
159
|
+
* // Update state when device changes externally
|
|
160
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
161
|
+
*
|
|
162
|
+
* // Read current state
|
|
163
|
+
* const state = api.matter.getAccessoryState(uuid, api.matter.clusterNames.OnOff)
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export interface MatterAPI {
|
|
167
|
+
/**
|
|
168
|
+
* UUID generator (alias of api.hap.uuid for convenience)
|
|
169
|
+
* Use this to generate unique identifiers for Matter accessories
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* const uuid = api.matter.uuid.generate('my-light-unique-id')
|
|
174
|
+
* api.matter.registerAccessory({
|
|
175
|
+
* uuid,
|
|
176
|
+
* displayName: 'Living Room Light',
|
|
177
|
+
* // ...
|
|
178
|
+
* })
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
readonly uuid: HAP['uuid'];
|
|
182
|
+
/**
|
|
183
|
+
* Matter device types for creating accessories
|
|
184
|
+
* Maps friendly names to Matter.js device types
|
|
185
|
+
*/
|
|
186
|
+
readonly deviceTypes: typeof deviceTypes;
|
|
187
|
+
/**
|
|
188
|
+
* Matter clusters - Direct access to Matter.js cluster definitions
|
|
189
|
+
* For advanced use cases requiring low-level cluster access
|
|
190
|
+
*/
|
|
191
|
+
readonly clusters: typeof clusters;
|
|
192
|
+
/**
|
|
193
|
+
* Matter cluster names for type safety and autocomplete
|
|
194
|
+
* Use these constants with updateAccessoryState() and getAccessoryState()
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
199
|
+
* api.matter.getAccessoryState(uuid, api.matter.clusterNames.LevelControl)
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
readonly clusterNames: typeof clusterNames;
|
|
203
|
+
/**
|
|
204
|
+
* Register Matter platform accessories (works exactly like HAP's registerPlatformAccessories)
|
|
205
|
+
*
|
|
206
|
+
* @param pluginIdentifier - The plugin identifier (e.g., 'homebridge-example')
|
|
207
|
+
* @param platformName - The platform name (e.g., 'ExamplePlatform')
|
|
208
|
+
* @param accessories - Array of Matter accessories to register
|
|
209
|
+
*/
|
|
210
|
+
registerPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void;
|
|
211
|
+
/**
|
|
212
|
+
* Unregister Matter platform accessories by UUID
|
|
213
|
+
* @param pluginIdentifier - The plugin identifier
|
|
214
|
+
* @param platformName - The platform name
|
|
215
|
+
* @param accessories - Array of Matter accessories to unregister (only uuid is required)
|
|
216
|
+
*/
|
|
217
|
+
unregisterPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: MatterAccessory[]) => void;
|
|
218
|
+
/**
|
|
219
|
+
* Update a Matter accessory's cluster state when device changes externally
|
|
220
|
+
*
|
|
221
|
+
* Use this for state updates from:
|
|
222
|
+
* - Native app controls
|
|
223
|
+
* - Physical button presses
|
|
224
|
+
* - Webhooks from cloud service
|
|
225
|
+
* - Polling results
|
|
226
|
+
*
|
|
227
|
+
* DO NOT use inside handlers - state auto-updates after handlers complete!
|
|
228
|
+
* Similar to HAP's characteristic.updateValue()
|
|
229
|
+
*
|
|
230
|
+
* @param uuid - The UUID of the accessory
|
|
231
|
+
* @param cluster - The cluster name (use api.matter.clusterNames for autocomplete)
|
|
232
|
+
* @param attributes - The attributes to update
|
|
233
|
+
*
|
|
234
|
+
* @example
|
|
235
|
+
* ```typescript
|
|
236
|
+
* // Device turned on via native app:
|
|
237
|
+
* api.matter.updateAccessoryState(
|
|
238
|
+
* uuid,
|
|
239
|
+
* api.matter.clusterNames.OnOff,
|
|
240
|
+
* { onOff: true }
|
|
241
|
+
* )
|
|
242
|
+
*
|
|
243
|
+
* // Device brightness changed via physical button:
|
|
244
|
+
* api.matter.updateAccessoryState(
|
|
245
|
+
* uuid,
|
|
246
|
+
* api.matter.clusterNames.LevelControl,
|
|
247
|
+
* { currentLevel: 200 }
|
|
248
|
+
* )
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
251
|
+
updateAccessoryState: (uuid: string, cluster: string, attributes: Record<string, any>) => void;
|
|
252
|
+
/**
|
|
253
|
+
* Get a Matter accessory's current cluster state
|
|
254
|
+
*
|
|
255
|
+
* Returns the current attribute values that are exposed to Matter controllers.
|
|
256
|
+
* Useful for:
|
|
257
|
+
* - Reading state after plugin restart
|
|
258
|
+
* - Verifying current state before making changes
|
|
259
|
+
* - Debugging and logging
|
|
260
|
+
*
|
|
261
|
+
* Similar to HAP's characteristic.value getter.
|
|
262
|
+
*
|
|
263
|
+
* @param uuid - The UUID of the accessory
|
|
264
|
+
* @param cluster - The cluster name (use api.matter.clusterNames for autocomplete)
|
|
265
|
+
* @returns Current cluster attribute values, or undefined if not found
|
|
266
|
+
*
|
|
267
|
+
* @example
|
|
268
|
+
* ```typescript
|
|
269
|
+
* const state = api.matter.getAccessoryState(uuid, api.matter.clusterNames.OnOff)
|
|
270
|
+
* if (state?.onOff) {
|
|
271
|
+
* console.log('Light is currently on')
|
|
272
|
+
* }
|
|
273
|
+
* ```
|
|
274
|
+
*/
|
|
275
|
+
getAccessoryState: (uuid: string, cluster: string) => Record<string, any> | undefined;
|
|
128
276
|
}
|
|
129
277
|
export interface API {
|
|
130
278
|
/**
|
|
@@ -139,6 +287,25 @@ export interface API {
|
|
|
139
287
|
readonly hap: HAP;
|
|
140
288
|
readonly hapLegacyTypes: HAPLegacyTypes;
|
|
141
289
|
readonly platformAccessory: typeof PlatformAccessory;
|
|
290
|
+
/**
|
|
291
|
+
* Matter Protocol API
|
|
292
|
+
* Provides access to Matter functionality, similar to api.hap for HomeKit
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* ```typescript
|
|
296
|
+
* // Register a Matter accessory
|
|
297
|
+
* api.matter.registerAccessory({
|
|
298
|
+
* uuid: api.matter.uuid.generate('my-light'),
|
|
299
|
+
* displayName: 'Living Room Light',
|
|
300
|
+
* deviceType: api.matter.deviceTypes.OnOffLight,
|
|
301
|
+
* // ...
|
|
302
|
+
* })
|
|
303
|
+
*
|
|
304
|
+
* // Update state
|
|
305
|
+
* api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true })
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
308
|
+
readonly matter: MatterAPI;
|
|
142
309
|
/**
|
|
143
310
|
* Returns true if the current running homebridge version is greater or equal to the
|
|
144
311
|
* passed version string.
|
|
@@ -161,11 +328,23 @@ export interface API {
|
|
|
161
328
|
updatePlatformAccessories: (accessories: PlatformAccessory[]) => void;
|
|
162
329
|
unregisterPlatformAccessories: (pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]) => void;
|
|
163
330
|
publishExternalAccessories: (pluginIdentifier: PluginIdentifier, accessories: PlatformAccessory[]) => void;
|
|
331
|
+
/**
|
|
332
|
+
* Check if Matter is available in this version of Homebridge
|
|
333
|
+
* @returns true if Homebridge version is >= 2.0.0-alpha.0
|
|
334
|
+
*/
|
|
335
|
+
isMatterAvailable: () => boolean;
|
|
336
|
+
/**
|
|
337
|
+
* Check if Matter is enabled for this bridge
|
|
338
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
339
|
+
* For child bridge: returns true if Matter is enabled in the _bridge.matter config
|
|
340
|
+
* @returns true if Matter is enabled
|
|
341
|
+
*/
|
|
342
|
+
isMatterEnabled: () => boolean;
|
|
164
343
|
on: ((event: 'didFinishLaunching', listener: () => void) => this) & ((event: 'shutdown', listener: () => void) => this);
|
|
165
344
|
}
|
|
166
345
|
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);
|
|
346
|
+
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.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);
|
|
347
|
+
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.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
348
|
}
|
|
170
349
|
export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
171
350
|
readonly version = 2.7;
|
|
@@ -174,7 +353,32 @@ export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
|
174
353
|
readonly hap: typeof hapNodeJs;
|
|
175
354
|
readonly hapLegacyTypes: typeof hapNodeJs.LegacyTypes;
|
|
176
355
|
readonly platformAccessory: typeof PlatformAccessory;
|
|
356
|
+
/**
|
|
357
|
+
* Matter Protocol API
|
|
358
|
+
*/
|
|
359
|
+
readonly matter: MatterAPI;
|
|
360
|
+
/**
|
|
361
|
+
* Internal state tracking whether Matter is enabled for this bridge
|
|
362
|
+
*/
|
|
363
|
+
private matterEnabled;
|
|
364
|
+
/**
|
|
365
|
+
* Internal reference to MatterServer for API methods that need return values
|
|
366
|
+
* @internal
|
|
367
|
+
*/
|
|
368
|
+
private _matterServer;
|
|
177
369
|
constructor();
|
|
370
|
+
/**
|
|
371
|
+
* Internal method to set Matter enabled status
|
|
372
|
+
* Called by Server or ChildBridgeFork after Matter initialization
|
|
373
|
+
* @internal
|
|
374
|
+
*/
|
|
375
|
+
_setMatterEnabled(enabled: boolean): void;
|
|
376
|
+
/**
|
|
377
|
+
* Internal method to set MatterServer reference
|
|
378
|
+
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
379
|
+
* @internal
|
|
380
|
+
*/
|
|
381
|
+
_setMatterServer(server: MatterServer | null): void;
|
|
178
382
|
versionGreaterOrEqual(version: string): boolean;
|
|
179
383
|
static isDynamicPlatformPlugin(platformPlugin: PlatformPlugin): platformPlugin is DynamicPlatformPlugin;
|
|
180
384
|
static isStaticPlatformPlugin(platformPlugin: PlatformPlugin): platformPlugin is StaticPlatformPlugin;
|
|
@@ -189,5 +393,17 @@ export declare class HomebridgeAPI extends EventEmitter implements API {
|
|
|
189
393
|
registerPlatformAccessories(pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]): void;
|
|
190
394
|
updatePlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
191
395
|
unregisterPlatformAccessories(pluginIdentifier: PluginIdentifier, platformName: PlatformName, accessories: PlatformAccessory[]): void;
|
|
396
|
+
/**
|
|
397
|
+
* Check if Matter is available in this version of Homebridge
|
|
398
|
+
* @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
|
|
399
|
+
*/
|
|
400
|
+
isMatterAvailable(): boolean;
|
|
401
|
+
/**
|
|
402
|
+
* Check if Matter is enabled for this bridge
|
|
403
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
404
|
+
* For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
|
|
405
|
+
* @returns true if Matter is enabled
|
|
406
|
+
*/
|
|
407
|
+
isMatterEnabled(): boolean;
|
|
192
408
|
}
|
|
193
409
|
//# 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 } 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,10 @@ 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["REGISTER_MATTER_PLATFORM_ACCESSORIES"] = "registerMatterPlatformAccessories";
|
|
43
|
+
InternalAPIEvent["UNREGISTER_MATTER_PLATFORM_ACCESSORIES"] = "unregisterMatterPlatformAccessories";
|
|
44
|
+
InternalAPIEvent["UPDATE_MATTER_ACCESSORY_STATE"] = "updateMatterAccessoryState";
|
|
40
45
|
})(InternalAPIEvent || (InternalAPIEvent = {}));
|
|
41
46
|
// eslint-disable-next-line ts/no-unsafe-declaration-merging
|
|
42
47
|
export class HomebridgeAPI extends EventEmitter {
|
|
@@ -48,8 +53,66 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
48
53
|
hapLegacyTypes = hapNodeJs.LegacyTypes; // used for older accessories/platforms
|
|
49
54
|
platformAccessory = PlatformAccessory;
|
|
50
55
|
// ------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Matter Protocol API
|
|
58
|
+
*/
|
|
59
|
+
matter;
|
|
60
|
+
/**
|
|
61
|
+
* Internal state tracking whether Matter is enabled for this bridge
|
|
62
|
+
*/
|
|
63
|
+
matterEnabled = false;
|
|
64
|
+
/**
|
|
65
|
+
* Internal reference to MatterServer for API methods that need return values
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
_matterServer = null;
|
|
51
69
|
constructor() {
|
|
52
70
|
super();
|
|
71
|
+
// Initialize Matter API (just like HAP)
|
|
72
|
+
this.matter = {
|
|
73
|
+
uuid: this.hap.uuid,
|
|
74
|
+
deviceTypes,
|
|
75
|
+
clusters,
|
|
76
|
+
clusterNames,
|
|
77
|
+
registerPlatformAccessories: (pluginIdentifier, platformName, accessories) => {
|
|
78
|
+
accessories.forEach((accessory) => {
|
|
79
|
+
// Cast to internal type to add tracking fields
|
|
80
|
+
const internalAccessory = accessory;
|
|
81
|
+
internalAccessory._associatedPlugin = pluginIdentifier;
|
|
82
|
+
internalAccessory._associatedPlatform = platformName;
|
|
83
|
+
});
|
|
84
|
+
this.emit("registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */, pluginIdentifier, platformName, accessories);
|
|
85
|
+
},
|
|
86
|
+
unregisterPlatformAccessories: (pluginIdentifier, platformName, accessories) => {
|
|
87
|
+
this.emit("unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */, pluginIdentifier, platformName, accessories);
|
|
88
|
+
},
|
|
89
|
+
updateAccessoryState: (uuid, cluster, attributes) => {
|
|
90
|
+
this.emit("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, cluster, attributes);
|
|
91
|
+
},
|
|
92
|
+
getAccessoryState: (uuid, cluster) => {
|
|
93
|
+
if (!this._matterServer) {
|
|
94
|
+
log.debug('Matter server not available for getAccessoryState');
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
return this._matterServer.getAccessoryState(uuid, cluster);
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Internal method to set Matter enabled status
|
|
103
|
+
* Called by Server or ChildBridgeFork after Matter initialization
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
_setMatterEnabled(enabled) {
|
|
107
|
+
this.matterEnabled = enabled;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Internal method to set MatterServer reference
|
|
111
|
+
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
112
|
+
* @internal
|
|
113
|
+
*/
|
|
114
|
+
_setMatterServer(server) {
|
|
115
|
+
this._matterServer = server;
|
|
53
116
|
}
|
|
54
117
|
versionGreaterOrEqual(version) {
|
|
55
118
|
return semver.gte(this.serverVersion, version);
|
|
@@ -125,5 +188,21 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
125
188
|
});
|
|
126
189
|
this.emit("unregisterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES */, accessories);
|
|
127
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Check if Matter is available in this version of Homebridge
|
|
193
|
+
* @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
|
|
194
|
+
*/
|
|
195
|
+
isMatterAvailable() {
|
|
196
|
+
return semver.gte(this.serverVersion, '2.0.0-alpha.0');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if Matter is enabled for this bridge
|
|
200
|
+
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
201
|
+
* For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
|
|
202
|
+
* @returns true if Matter is enabled
|
|
203
|
+
*/
|
|
204
|
+
isMatterEnabled() {
|
|
205
|
+
return this.matterEnabled;
|
|
206
|
+
}
|
|
128
207
|
}
|
|
129
208
|
//# 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":"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"}
|
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[];
|
|
@@ -61,14 +69,13 @@ export declare class BridgeService {
|
|
|
61
69
|
private externalPortService;
|
|
62
70
|
private bridgeOptions;
|
|
63
71
|
private bridgeConfig;
|
|
64
|
-
private config;
|
|
65
72
|
bridge: Bridge;
|
|
66
73
|
private storageService;
|
|
67
74
|
private readonly allowInsecureAccess;
|
|
68
75
|
private cachedPlatformAccessories;
|
|
69
76
|
private cachedAccessoriesFileLoaded;
|
|
70
77
|
private readonly publishedExternalAccessories;
|
|
71
|
-
constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration
|
|
78
|
+
constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration);
|
|
72
79
|
static printCharacteristicWriteWarning(plugin: Plugin, accessory: Accessory, opts: CharacteristicWarningOpts, warning: CharacteristicWarning): void;
|
|
73
80
|
publishBridge(): void;
|
|
74
81
|
/**
|
|
@@ -95,7 +102,7 @@ export declare class BridgeService {
|
|
|
95
102
|
*/
|
|
96
103
|
saveCachedPlatformAccessoriesOnDisk(): void;
|
|
97
104
|
handleRegisterPlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
98
|
-
handleUpdatePlatformAccessories(): void;
|
|
105
|
+
handleUpdatePlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
99
106
|
handleUnregisterPlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
100
107
|
handlePublishExternalAccessories(accessories: PlatformAccessory[]): Promise<void>;
|
|
101
108
|
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":"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;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EACL,SAAS,EAET,MAAM,EASP,MAAM,YAAY,CAAA;AAInB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAOlD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,UAAU,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAA;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1D,SAAS,EAAE,aAAa,GAAG,mBAAmB,CAAA;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACzD,QAAQ,EAAE,YAAY,GAAG,kBAAkB,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,mBAAmB,CAAA;IAE3B;;OAEG;IACH,IAAI,CAAC,EAAE,GAAG,CAAA;IAEV,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,SAAS,EAAE,cAAc,EAAE,CAAA;IAE3B,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAE5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAGpC,KAAK,CAAC,EAAE,0BAA0B,CAAA;CACnC;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,oBAAoB,EAAE,MAAM,CAAA;IAC5B,yBAAyB,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,qBAAa,aAAa;IAStB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,YAAY;IAZf,MAAM,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,yBAAyB,CAA0B;IAC3D,OAAO,CAAC,2BAA2B,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAgD;gBAGnF,GAAG,EAAE,aAAa,EAClB,aAAa,EAAE,aAAa,EAC5B,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,mBAAmB;WA0B7B,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IA+BnJ,aAAa,IAAI,IAAI;IA+B5B;;OAEG;IACU,qCAAqC,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BnE;;OAEG;IACH,OAAO,KAAK,mBAAmB,GAE9B;IAED;;;OAGG;YACW,6BAA6B;IAQ3C;;;OAGG;YACW,8BAA8B;IAYrC,gCAAgC,IAAI,IAAI;IAoD/C;;OAEG;IACI,mCAAmC,IAAI,IAAI;IAclD,iCAAiC,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAwBzE,+BAA+B,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAkBvE,mCAAmC,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAcrE,gCAAgC,CAAC,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ChF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,mBAAmB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAiDnL,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,YAAY,EAAE,YAAY,GAAG,kBAAkB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoC7K,QAAQ,IAAI,IAAI;IAWhB,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAOhC"}
|
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
|
}
|