homebridge 2.0.0-beta.4 → 2.0.0-beta.40
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 +16 -17
- package/bin/homebridge.js +22 -0
- package/config-sample.json +3 -3
- package/dist/api.d.ts +499 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +223 -0
- package/dist/api.js.map +1 -0
- package/dist/api.spec.d.ts +2 -0
- package/dist/api.spec.d.ts.map +1 -0
- package/dist/api.spec.js +413 -0
- package/dist/api.spec.js.map +1 -0
- package/{lib → dist}/bridgeService.d.ts +19 -10
- package/dist/bridgeService.d.ts.map +1 -0
- package/{lib → dist}/bridgeService.js +85 -117
- package/dist/bridgeService.js.map +1 -0
- package/{lib → dist}/childBridgeFork.d.ts +11 -5
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/{lib → dist}/childBridgeFork.js +93 -44
- package/dist/childBridgeFork.js.map +1 -0
- package/{lib → dist}/childBridgeService.d.ts +37 -7
- package/dist/childBridgeService.d.ts.map +1 -0
- package/{lib → dist}/childBridgeService.js +127 -69
- package/dist/childBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -0
- package/dist/cli.js.map +1 -0
- package/dist/externalPortService.d.ts +47 -0
- package/dist/externalPortService.d.ts.map +1 -0
- package/dist/externalPortService.js +105 -0
- package/dist/externalPortService.js.map +1 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/ipcService.d.ts +48 -0
- package/dist/ipcService.d.ts.map +1 -0
- package/{lib → dist}/ipcService.js +12 -14
- package/dist/ipcService.js.map +1 -0
- package/{lib → dist}/logger.d.ts +12 -6
- package/dist/logger.d.ts.map +1 -0
- package/{lib → dist}/logger.js +27 -28
- package/dist/logger.js.map +1 -0
- package/dist/logger.spec.d.ts +2 -0
- package/dist/logger.spec.d.ts.map +1 -0
- package/dist/logger.spec.js +95 -0
- package/dist/logger.spec.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.js +399 -0
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
- package/dist/matter/MatterAPIImpl.d.ts +504 -0
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
- package/dist/matter/MatterAPIImpl.js +305 -0
- package/dist/matter/MatterAPIImpl.js.map +1 -0
- package/dist/matter/MatterBridgeManager.d.ts +87 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +413 -0
- package/dist/matter/MatterBridgeManager.js.map +1 -0
- package/dist/matter/MatterConfigCollector.d.ts +26 -0
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
- package/dist/matter/MatterConfigCollector.js +78 -0
- package/dist/matter/MatterConfigCollector.js.map +1 -0
- package/dist/matter/accessoryCache.d.ts +105 -0
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/accessoryCache.js +214 -0
- package/dist/matter/accessoryCache.js.map +1 -0
- package/dist/matter/accessoryCache.spec.d.ts +2 -0
- package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
- package/dist/matter/accessoryCache.spec.js +452 -0
- package/dist/matter/accessoryCache.spec.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +63 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +223 -0
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +20 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +71 -0
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +120 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.js +71 -0
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +20 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +41 -0
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +33 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +138 -0
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +145 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +27 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +95 -0
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js +128 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +22 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +86 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +21 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +61 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +53 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +127 -0
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +31 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +158 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/index.d.ts +20 -0
- package/dist/matter/behaviors/index.d.ts.map +1 -0
- package/dist/matter/behaviors/index.js +21 -0
- package/dist/matter/behaviors/index.js.map +1 -0
- package/dist/matter/configValidator.d.ts +81 -0
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/configValidator.js +240 -0
- package/dist/matter/configValidator.js.map +1 -0
- package/dist/matter/configValidator.spec.d.ts +2 -0
- package/dist/matter/configValidator.spec.d.ts.map +1 -0
- package/dist/matter/configValidator.spec.js +390 -0
- package/dist/matter/configValidator.spec.js.map +1 -0
- package/dist/matter/errorHandler.d.ts +33 -0
- package/dist/matter/errorHandler.d.ts.map +1 -0
- package/dist/matter/errorHandler.js +113 -0
- package/dist/matter/errorHandler.js.map +1 -0
- package/dist/matter/errorHandler.spec.d.ts +2 -0
- package/dist/matter/errorHandler.spec.d.ts.map +1 -0
- package/dist/matter/errorHandler.spec.js +159 -0
- package/dist/matter/errorHandler.spec.js.map +1 -0
- package/dist/matter/errors.d.ts +178 -0
- package/dist/matter/errors.d.ts.map +1 -0
- package/dist/matter/errors.js +200 -0
- package/dist/matter/errors.js.map +1 -0
- package/dist/matter/index.d.ts +127 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +23 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/logFormatter.d.ts +19 -0
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/logFormatter.js +158 -0
- package/dist/matter/logFormatter.js.map +1 -0
- package/dist/matter/logFormatter.spec.d.ts +2 -0
- package/dist/matter/logFormatter.spec.d.ts.map +1 -0
- package/dist/matter/logFormatter.spec.js +252 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +336 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/server.js +1810 -0
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/serverHelpers.d.ts +81 -0
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/serverHelpers.js +326 -0
- package/dist/matter/serverHelpers.js.map +1 -0
- package/dist/matter/serverHelpers.spec.d.ts +2 -0
- package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
- package/dist/matter/serverHelpers.spec.js +521 -0
- package/dist/matter/serverHelpers.spec.js.map +1 -0
- package/dist/matter/sharedTypes.d.ts +164 -0
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/sharedTypes.js +46 -0
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/storage.d.ts +135 -0
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/storage.js +424 -0
- package/dist/matter/storage.js.map +1 -0
- package/dist/matter/storage.spec.d.ts +2 -0
- package/dist/matter/storage.spec.d.ts.map +1 -0
- package/dist/matter/storage.spec.js +570 -0
- package/dist/matter/storage.spec.js.map +1 -0
- package/dist/matter/typeHelpers.d.ts +45 -0
- package/dist/matter/typeHelpers.d.ts.map +1 -0
- package/dist/matter/typeHelpers.js +57 -0
- package/dist/matter/typeHelpers.js.map +1 -0
- package/dist/matter/typeHelpers.spec.d.ts +2 -0
- package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
- package/dist/matter/typeHelpers.spec.js +127 -0
- package/dist/matter/typeHelpers.spec.js.map +1 -0
- package/dist/matter/types.d.ts +826 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +204 -0
- package/dist/matter/types.js.map +1 -0
- package/{lib → dist}/platformAccessory.d.ts +8 -6
- package/dist/platformAccessory.d.ts.map +1 -0
- package/{lib → dist}/platformAccessory.js +19 -16
- package/dist/platformAccessory.js.map +1 -0
- package/dist/platformAccessory.spec.d.ts +2 -0
- package/dist/platformAccessory.spec.d.ts.map +1 -0
- package/dist/platformAccessory.spec.js +126 -0
- package/dist/platformAccessory.spec.js.map +1 -0
- package/{lib → dist}/plugin.d.ts +2 -3
- package/dist/plugin.d.ts.map +1 -0
- package/{lib → dist}/plugin.js +39 -51
- package/dist/plugin.js.map +1 -0
- package/{lib → dist}/pluginManager.d.ts +3 -3
- package/dist/pluginManager.d.ts.map +1 -0
- package/{lib → dist}/pluginManager.js +76 -81
- package/dist/pluginManager.js.map +1 -0
- package/dist/pluginManager.spec.d.ts +2 -0
- package/dist/pluginManager.spec.d.ts.map +1 -0
- package/dist/pluginManager.spec.js +43 -0
- package/dist/pluginManager.spec.js.map +1 -0
- package/{lib → dist}/server.d.ts +14 -1
- package/dist/server.d.ts.map +1 -0
- package/{lib → dist}/server.js +193 -123
- package/dist/server.js.map +1 -0
- package/dist/server.spec.d.ts +2 -0
- package/dist/server.spec.d.ts.map +1 -0
- package/dist/server.spec.js +57 -0
- package/dist/server.spec.js.map +1 -0
- package/{lib → dist}/storageService.d.ts.map +1 -1
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/{lib → dist}/user.d.ts +1 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +32 -0
- package/dist/user.js.map +1 -0
- package/dist/user.spec.d.ts +2 -0
- package/dist/user.spec.d.ts.map +1 -0
- package/dist/user.spec.js +31 -0
- package/dist/user.spec.js.map +1 -0
- package/{lib → dist}/util/mac.d.ts +1 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/util/mac.spec.d.ts +2 -0
- package/dist/util/mac.spec.d.ts.map +1 -0
- package/dist/util/mac.spec.js +36 -0
- package/dist/util/mac.spec.js.map +1 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/dist/version.spec.d.ts +2 -0
- package/dist/version.spec.d.ts.map +1 -0
- package/dist/version.spec.js +20 -0
- package/dist/version.spec.js.map +1 -0
- package/package.json +49 -50
- package/bin/homebridge +0 -17
- package/lib/api.d.ts +0 -210
- package/lib/api.d.ts.map +0 -1
- package/lib/api.js +0 -155
- package/lib/api.js.map +0 -1
- package/lib/bridgeService.d.ts.map +0 -1
- package/lib/bridgeService.js.map +0 -1
- package/lib/childBridgeFork.d.ts.map +0 -1
- package/lib/childBridgeFork.js.map +0 -1
- package/lib/childBridgeService.d.ts.map +0 -1
- package/lib/childBridgeService.js.map +0 -1
- package/lib/cli.d.ts +0 -4
- package/lib/cli.d.ts.map +0 -1
- package/lib/cli.js +0 -111
- package/lib/cli.js.map +0 -1
- package/lib/externalPortService.d.ts +0 -33
- package/lib/externalPortService.d.ts.map +0 -1
- package/lib/externalPortService.js +0 -64
- package/lib/externalPortService.js.map +0 -1
- package/lib/index.d.ts +0 -76
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -72
- package/lib/index.js.map +0 -1
- package/lib/ipcService.d.ts +0 -33
- package/lib/ipcService.d.ts.map +0 -1
- package/lib/ipcService.js.map +0 -1
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js.map +0 -1
- package/lib/platformAccessory.d.ts.map +0 -1
- package/lib/platformAccessory.js.map +0 -1
- package/lib/plugin.d.ts.map +0 -1
- package/lib/plugin.js.map +0 -1
- package/lib/pluginManager.d.ts.map +0 -1
- package/lib/pluginManager.js.map +0 -1
- package/lib/server.d.ts.map +0 -1
- package/lib/server.js.map +0 -1
- package/lib/storageService.js +0 -70
- package/lib/storageService.js.map +0 -1
- package/lib/user.d.ts.map +0 -1
- package/lib/user.js +0 -36
- package/lib/user.js.map +0 -1
- package/lib/util/mac.d.ts.map +0 -1
- package/lib/util/mac.js +0 -20
- package/lib/util/mac.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js +0 -21
- package/lib/version.js.map +0 -1
- /package/{lib → dist}/storageService.d.ts +0 -0
- /package/{lib → dist}/version.d.ts +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvcRunMode Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles robotic vacuum cleaner run mode changes
|
|
5
|
+
*/
|
|
6
|
+
import { RvcRunModeServer } from '@matter/main/behaviors/rvc-run-mode';
|
|
7
|
+
import { Status, StatusResponseError } from '@matter/main/types';
|
|
8
|
+
import { MatterStatus } from '../errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Custom RvcRunMode Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export class HomebridgeRvcRunModeServer extends RvcRunModeServer {
|
|
13
|
+
static registry;
|
|
14
|
+
/**
|
|
15
|
+
* Set the behavior registry (called once during server initialization)
|
|
16
|
+
*/
|
|
17
|
+
static setRegistry(registry) {
|
|
18
|
+
this.registry = registry;
|
|
19
|
+
}
|
|
20
|
+
async changeToMode(request) {
|
|
21
|
+
const endpointId = this.endpoint.id;
|
|
22
|
+
try {
|
|
23
|
+
// Execute user handler
|
|
24
|
+
await HomebridgeRvcRunModeServer.registry.executeHandler(endpointId, 'rvcRunMode', 'changeToMode', request);
|
|
25
|
+
// Only reached if handler succeeded - call base implementation
|
|
26
|
+
return await super.changeToMode(request);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
30
|
+
// This sends a proper Matter protocol error response to the controller
|
|
31
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
35
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
throw new StatusResponseError(`Failed to change run mode: ${message}`, Status.Failure);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=RvcRunModeBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcRunModeBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IACtD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,KAAK,CAAC,YAAY,CAAC,OAAY;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;YAE3G,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACxF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcRunModeBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { HomebridgeRvcRunModeServer } from './RvcRunModeBehavior.js';
|
|
3
|
+
describe('homebridgeRvcRunModeServer', () => {
|
|
4
|
+
let mockRegistry;
|
|
5
|
+
let behavior;
|
|
6
|
+
let mockEndpoint;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
// Create mock registry
|
|
9
|
+
mockRegistry = {
|
|
10
|
+
executeHandler: vi.fn().mockResolvedValue(true),
|
|
11
|
+
};
|
|
12
|
+
// Set registry on behavior class
|
|
13
|
+
HomebridgeRvcRunModeServer.setRegistry(mockRegistry);
|
|
14
|
+
// Create mock endpoint
|
|
15
|
+
mockEndpoint = {
|
|
16
|
+
id: 'test-endpoint-123',
|
|
17
|
+
};
|
|
18
|
+
// Create behavior instance with mocked properties
|
|
19
|
+
behavior = Object.create(HomebridgeRvcRunModeServer.prototype);
|
|
20
|
+
Object.defineProperty(behavior, 'endpoint', {
|
|
21
|
+
get: () => mockEndpoint,
|
|
22
|
+
configurable: true,
|
|
23
|
+
});
|
|
24
|
+
// Mock super method
|
|
25
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeRvcRunModeServer.prototype), 'changeToMode').mockReturnValue(undefined);
|
|
26
|
+
});
|
|
27
|
+
describe('setRegistry', () => {
|
|
28
|
+
it('should set the registry', () => {
|
|
29
|
+
const newRegistry = {};
|
|
30
|
+
HomebridgeRvcRunModeServer.setRegistry(newRegistry);
|
|
31
|
+
expect(true).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('changeToMode', () => {
|
|
35
|
+
it('should execute handler with request', () => {
|
|
36
|
+
const request = { newMode: 1 };
|
|
37
|
+
behavior.changeToMode(request);
|
|
38
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcRunMode', 'changeToMode', request);
|
|
39
|
+
});
|
|
40
|
+
it('should handle different mode values', () => {
|
|
41
|
+
const modes = [0, 1, 2, 3];
|
|
42
|
+
for (const mode of modes) {
|
|
43
|
+
const request = { newMode: mode };
|
|
44
|
+
behavior.changeToMode(request);
|
|
45
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcRunMode', 'changeToMode', request);
|
|
46
|
+
vi.clearAllMocks();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it('should handle handler execution errors gracefully', async () => {
|
|
50
|
+
mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
|
|
51
|
+
const request = { newMode: 1 };
|
|
52
|
+
// Errors are wrapped in StatusResponseError and propagated to Matter.js
|
|
53
|
+
await expect(behavior.changeToMode(request)).rejects.toThrow('Failed to change run mode: Handler failed');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=RvcRunModeBehavior.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcRunModeBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceArea Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles service area selection for robotic vacuum cleaners
|
|
5
|
+
*/
|
|
6
|
+
import type { ServiceArea } from '@matter/main/clusters';
|
|
7
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
8
|
+
import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
|
|
9
|
+
/**
|
|
10
|
+
* Custom ServiceArea Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export declare class HomebridgeServiceAreaServer extends ServiceAreaServer {
|
|
13
|
+
private static registry;
|
|
14
|
+
/**
|
|
15
|
+
* Set the behavior registry (called once during server initialization)
|
|
16
|
+
*/
|
|
17
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
18
|
+
selectAreas(request: ServiceArea.SelectAreasRequest): Promise<ServiceArea.SelectAreasResponse>;
|
|
19
|
+
skipArea(request: ServiceArea.SkipAreaRequest): Promise<ServiceArea.SkipAreaResponse>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ServiceAreaBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceAreaBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAKvE;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,iBAAiB;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIrC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAuB9F,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;CAsBrG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceArea Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles service area selection for robotic vacuum cleaners
|
|
5
|
+
*/
|
|
6
|
+
import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
|
|
7
|
+
import { Status, StatusResponseError } from '@matter/main/types';
|
|
8
|
+
import { MatterStatus } from '../errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Custom ServiceArea Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export class HomebridgeServiceAreaServer extends ServiceAreaServer {
|
|
13
|
+
static registry;
|
|
14
|
+
/**
|
|
15
|
+
* Set the behavior registry (called once during server initialization)
|
|
16
|
+
*/
|
|
17
|
+
static setRegistry(registry) {
|
|
18
|
+
this.registry = registry;
|
|
19
|
+
}
|
|
20
|
+
async selectAreas(request) {
|
|
21
|
+
const endpointId = this.endpoint.id;
|
|
22
|
+
try {
|
|
23
|
+
// Execute user handler
|
|
24
|
+
await HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'selectAreas', request);
|
|
25
|
+
// Only reached if handler succeeded - call base implementation
|
|
26
|
+
return await super.selectAreas(request);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
30
|
+
// This sends a proper Matter protocol error response to the controller
|
|
31
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
32
|
+
throw error;
|
|
33
|
+
}
|
|
34
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
35
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
throw new StatusResponseError(`Failed to select areas: ${message}`, Status.Failure);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async skipArea(request) {
|
|
41
|
+
const endpointId = this.endpoint.id;
|
|
42
|
+
try {
|
|
43
|
+
// Execute user handler
|
|
44
|
+
await HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'skipArea', request);
|
|
45
|
+
// Only reached if handler succeeded - call base implementation
|
|
46
|
+
return await super.skipArea(request);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
50
|
+
// This sends a proper Matter protocol error response to the controller
|
|
51
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
55
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
56
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
57
|
+
throw new StatusResponseError(`Failed to skip area: ${message}`, Status.Failure);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ServiceAreaBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceAreaBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,iBAAiB;IACxD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,KAAK,CAAC,WAAW,CAAC,OAAuC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;YAE5G,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,QAAQ,CAAC,OAAoC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAEzG,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,wBAAwB,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAClF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceAreaBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { HomebridgeServiceAreaServer } from './ServiceAreaBehavior.js';
|
|
3
|
+
describe('homebridgeServiceAreaServer', () => {
|
|
4
|
+
let mockRegistry;
|
|
5
|
+
let behavior;
|
|
6
|
+
let mockEndpoint;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
// Create mock registry
|
|
9
|
+
mockRegistry = {
|
|
10
|
+
executeHandler: vi.fn().mockResolvedValue(true),
|
|
11
|
+
};
|
|
12
|
+
// Set registry on behavior class
|
|
13
|
+
HomebridgeServiceAreaServer.setRegistry(mockRegistry);
|
|
14
|
+
// Create mock endpoint
|
|
15
|
+
mockEndpoint = {
|
|
16
|
+
id: 'test-endpoint-123',
|
|
17
|
+
};
|
|
18
|
+
// Create behavior instance with mocked properties
|
|
19
|
+
behavior = Object.create(HomebridgeServiceAreaServer.prototype);
|
|
20
|
+
Object.defineProperty(behavior, 'endpoint', {
|
|
21
|
+
get: () => mockEndpoint,
|
|
22
|
+
configurable: true,
|
|
23
|
+
});
|
|
24
|
+
// Mock super method
|
|
25
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeServiceAreaServer.prototype), 'selectAreas').mockReturnValue(undefined);
|
|
26
|
+
});
|
|
27
|
+
describe('setRegistry', () => {
|
|
28
|
+
it('should set the registry', () => {
|
|
29
|
+
const newRegistry = {};
|
|
30
|
+
HomebridgeServiceAreaServer.setRegistry(newRegistry);
|
|
31
|
+
expect(true).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('selectAreas', () => {
|
|
35
|
+
it('should execute handler with request', () => {
|
|
36
|
+
const request = { newAreas: [0, 1, 2] };
|
|
37
|
+
behavior.selectAreas(request);
|
|
38
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'serviceArea', 'selectAreas', request);
|
|
39
|
+
});
|
|
40
|
+
it('should handle empty area selection', () => {
|
|
41
|
+
const request = { newAreas: [] };
|
|
42
|
+
behavior.selectAreas(request);
|
|
43
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'serviceArea', 'selectAreas', request);
|
|
44
|
+
});
|
|
45
|
+
it('should handle handler execution errors gracefully', async () => {
|
|
46
|
+
mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
|
|
47
|
+
const request = { newAreas: [0, 1] };
|
|
48
|
+
// Errors are wrapped in StatusResponseError and propagated to Matter.js
|
|
49
|
+
await expect(behavior.selectAreas(request)).rejects.toThrow('Failed to select areas: Handler failed');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=ServiceAreaBehavior.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceAreaBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thermostat Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles thermostat commands for heating and cooling systems
|
|
5
|
+
*/
|
|
6
|
+
import type { Thermostat } from '@matter/main/clusters';
|
|
7
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
8
|
+
import { ThermostatServer } from '@matter/main/behaviors/thermostat';
|
|
9
|
+
/**
|
|
10
|
+
* Custom Thermostat Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export declare class HomebridgeThermostatServer extends ThermostatServer {
|
|
13
|
+
#private;
|
|
14
|
+
private static registry;
|
|
15
|
+
/**
|
|
16
|
+
* Set the behavior registry (called once during server initialization)
|
|
17
|
+
*/
|
|
18
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
19
|
+
initialize(): void;
|
|
20
|
+
setpointRaiseLower(request: Thermostat.SetpointRaiseLowerRequest): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ThermostatBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThermostatBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAKpE;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,UAAU,IAAI,IAAI;IAwGZ,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAiChG"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thermostat Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles thermostat commands for heating and cooling systems
|
|
5
|
+
*/
|
|
6
|
+
import { ThermostatServer } from '@matter/main/behaviors/thermostat';
|
|
7
|
+
import { Status, StatusResponseError } from '@matter/main/types';
|
|
8
|
+
import { MatterStatus } from '../errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Custom Thermostat Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export class HomebridgeThermostatServer extends ThermostatServer {
|
|
13
|
+
static registry;
|
|
14
|
+
/**
|
|
15
|
+
* Set the behavior registry (called once during server initialization)
|
|
16
|
+
*/
|
|
17
|
+
static setRegistry(registry) {
|
|
18
|
+
this.registry = registry;
|
|
19
|
+
}
|
|
20
|
+
initialize() {
|
|
21
|
+
super.initialize();
|
|
22
|
+
// React to systemMode attribute changes (off, heat, cool, auto, etc.)
|
|
23
|
+
this.reactTo(this.events.systemMode$Changed, this.#handleSystemModeChange);
|
|
24
|
+
// React to occupiedHeatingSetpoint attribute changes (target heating temperature)
|
|
25
|
+
const events = this.events;
|
|
26
|
+
if (events.occupiedHeatingSetpoint$Changing) {
|
|
27
|
+
this.reactTo(events.occupiedHeatingSetpoint$Changing, this.#handleOccupiedHeatingSetpointChanging);
|
|
28
|
+
}
|
|
29
|
+
// React to occupiedCoolingSetpoint attribute changes (target cooling temperature)
|
|
30
|
+
if (events.occupiedCoolingSetpoint$Changing) {
|
|
31
|
+
this.reactTo(events.occupiedCoolingSetpoint$Changing, this.#handleOccupiedCoolingSetpointChanging);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async #handleSystemModeChange(value, oldValue) {
|
|
35
|
+
const endpointId = this.endpoint.id;
|
|
36
|
+
try {
|
|
37
|
+
// Execute user handler
|
|
38
|
+
await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'systemModeChange', { systemMode: value, oldSystemMode: oldValue });
|
|
39
|
+
// Sync state to cache
|
|
40
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { systemMode: value });
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
44
|
+
// This sends a proper Matter protocol error response to the controller
|
|
45
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
49
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
50
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
51
|
+
throw new StatusResponseError(`Failed to change system mode: ${message}`, Status.Failure);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async #handleOccupiedHeatingSetpointChanging(value) {
|
|
55
|
+
const endpointId = this.endpoint.id;
|
|
56
|
+
const oldValue = this.state.occupiedHeatingSetpoint;
|
|
57
|
+
try {
|
|
58
|
+
// Execute user handler
|
|
59
|
+
await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedHeatingSetpointChange', { occupiedHeatingSetpoint: value, oldOccupiedHeatingSetpoint: oldValue });
|
|
60
|
+
// Sync state to cache
|
|
61
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedHeatingSetpoint: value });
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
65
|
+
// This sends a proper Matter protocol error response to the controller
|
|
66
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
70
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
71
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
72
|
+
throw new StatusResponseError(`Failed to change heating setpoint: ${message}`, Status.Failure);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async #handleOccupiedCoolingSetpointChanging(value) {
|
|
76
|
+
const endpointId = this.endpoint.id;
|
|
77
|
+
const oldValue = this.state.occupiedCoolingSetpoint;
|
|
78
|
+
try {
|
|
79
|
+
// Execute user handler
|
|
80
|
+
await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedCoolingSetpointChange', { occupiedCoolingSetpoint: value, oldOccupiedCoolingSetpoint: oldValue });
|
|
81
|
+
// Sync state to cache
|
|
82
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedCoolingSetpoint: value });
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
86
|
+
// This sends a proper Matter protocol error response to the controller
|
|
87
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
91
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
92
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
93
|
+
throw new StatusResponseError(`Failed to change cooling setpoint: ${message}`, Status.Failure);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async setpointRaiseLower(request) {
|
|
97
|
+
const endpointId = this.endpoint.id;
|
|
98
|
+
try {
|
|
99
|
+
// Execute user handler
|
|
100
|
+
await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'setpointRaiseLower', request);
|
|
101
|
+
// Only reached if handler succeeded - update Matter state
|
|
102
|
+
await super.setpointRaiseLower(request);
|
|
103
|
+
// Sync thermostat setpoints to cache
|
|
104
|
+
const currentState = this.state;
|
|
105
|
+
const stateUpdate = {};
|
|
106
|
+
if (currentState.occupiedCoolingSetpoint !== undefined) {
|
|
107
|
+
stateUpdate.occupiedCoolingSetpoint = currentState.occupiedCoolingSetpoint;
|
|
108
|
+
}
|
|
109
|
+
if (currentState.occupiedHeatingSetpoint !== undefined) {
|
|
110
|
+
stateUpdate.occupiedHeatingSetpoint = currentState.occupiedHeatingSetpoint;
|
|
111
|
+
}
|
|
112
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', stateUpdate);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
// If user handler already threw a StatusResponseError, propagate it as-is
|
|
116
|
+
// This sends a proper Matter protocol error response to the controller
|
|
117
|
+
if (MatterStatus.isMatterProtocolError(error)) {
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
// For other errors, wrap in appropriate StatusResponseError
|
|
121
|
+
// This prevents the endpoint from crashing and keeps the device online
|
|
122
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
123
|
+
throw new StatusResponseError(`Failed to adjust setpoint: ${message}`, Status.Failure);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ThermostatBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThermostatBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThermostatBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { HomebridgeThermostatServer } from './ThermostatBehavior.js';
|
|
3
|
+
describe('homebridgeThermostatServer', () => {
|
|
4
|
+
describe('setRegistry', () => {
|
|
5
|
+
it('should set the registry', () => {
|
|
6
|
+
const newRegistry = {};
|
|
7
|
+
HomebridgeThermostatServer.setRegistry(newRegistry);
|
|
8
|
+
expect(true).toBe(true);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe('behavior structure', () => {
|
|
12
|
+
it('should extend ThermostatServer', () => {
|
|
13
|
+
expect(HomebridgeThermostatServer.prototype).toBeDefined();
|
|
14
|
+
});
|
|
15
|
+
it('should have initialize method', () => {
|
|
16
|
+
expect(typeof HomebridgeThermostatServer.prototype.initialize).toBe('function');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
// Note: ThermostatBehavior uses reactTo() pattern with private handlers for multiple attributes
|
|
21
|
+
// (systemMode, occupiedCoolingSetpoint, occupiedHeatingSetpoint, etc.)
|
|
22
|
+
// Integration tests would be more appropriate for testing the event reaction logic.
|
|
23
|
+
//# sourceMappingURL=ThermostatBehavior.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThermostatBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAEpE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAG,EAAsB,CAAA;YAC1C,0BAA0B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACnD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,OAAO,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,gGAAgG;AAChG,uEAAuE;AACvE,oFAAoF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WindowCovering Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles window covering commands for blinds, shades, and curtains
|
|
5
|
+
*/
|
|
6
|
+
import type { WindowCovering } from '@matter/main/clusters';
|
|
7
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
8
|
+
import { WindowCoveringBaseServer } from '@matter/main/behaviors/window-covering';
|
|
9
|
+
/**
|
|
10
|
+
* Custom WindowCovering Server that calls plugin handlers
|
|
11
|
+
*/
|
|
12
|
+
export declare class HomebridgeWindowCoveringServer extends WindowCoveringBaseServer {
|
|
13
|
+
private static registry;
|
|
14
|
+
/**
|
|
15
|
+
* Set the behavior registry (called once during server initialization)
|
|
16
|
+
*/
|
|
17
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
18
|
+
/**
|
|
19
|
+
* Sync window covering position state to cache
|
|
20
|
+
* @param endpointId - The endpoint ID
|
|
21
|
+
* @param targetProperty - Target position property name (e.g., 'targetPositionLiftPercent100ths')
|
|
22
|
+
* @param currentProperty - Current position property name (e.g., 'currentPositionLiftPercent100ths')
|
|
23
|
+
*/
|
|
24
|
+
private syncPositionStateToCache;
|
|
25
|
+
upOrOpen(): Promise<void>;
|
|
26
|
+
downOrClose(): Promise<void>;
|
|
27
|
+
stopMotion(): Promise<void>;
|
|
28
|
+
goToLiftPercentage(request: WindowCovering.GoToLiftPercentageRequest): Promise<void>;
|
|
29
|
+
goToTiltPercentage(request: WindowCovering.GoToTiltPercentageRequest): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=WindowCoveringBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WindowCoveringBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/WindowCoveringBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AAgBjF;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,wBAAwB;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIpD;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAmBjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpF,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkCpG"}
|