homebridge 2.0.0-beta.34 → 2.0.0-beta.36
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/dist/api.d.ts +74 -32
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +48 -46
- package/dist/api.js.map +1 -1
- 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/dist/childBridgeFork.d.ts +1 -18
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +21 -258
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/externalPortService.d.ts +2 -9
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +20 -40
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- 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 +397 -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/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
- 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 +91 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +426 -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/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
- 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 +64 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +160 -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 +21 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +49 -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 +108 -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 +45 -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 +21 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +27 -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 +34 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +75 -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 +140 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +63 -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 +116 -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 +27 -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 +56 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -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 +27 -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 +56 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -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 +52 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +79 -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 +32 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -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/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
- 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/index.d.ts +7 -4
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js +7 -4
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
- 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 +284 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +350 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/{matterServer.js → server.js} +533 -352
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
- 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/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/{matterStorage.js → storage.js} +14 -5
- package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
- 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/{matterTypes.d.ts → types.d.ts} +2 -2
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/{matterTypes.js → types.js} +1 -2
- package/dist/matter/types.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/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/dist/server.d.ts +4 -13
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +45 -333
- package/dist/server.js.map +1 -1
- 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/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/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.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 +4 -4
- package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
- package/dist/matter/matterAccessoryCache.js.map +0 -1
- package/dist/matter/matterBehaviors.d.ts +0 -194
- package/dist/matter/matterBehaviors.d.ts.map +0 -1
- package/dist/matter/matterBehaviors.js +0 -665
- package/dist/matter/matterBehaviors.js.map +0 -1
- package/dist/matter/matterConfigValidator.d.ts.map +0 -1
- package/dist/matter/matterConfigValidator.js.map +0 -1
- package/dist/matter/matterErrorHandler.d.ts +0 -106
- package/dist/matter/matterErrorHandler.d.ts.map +0 -1
- package/dist/matter/matterErrorHandler.js +0 -495
- package/dist/matter/matterErrorHandler.js.map +0 -1
- package/dist/matter/matterLogFormatter.d.ts.map +0 -1
- package/dist/matter/matterLogFormatter.js.map +0 -1
- package/dist/matter/matterNetworkMonitor.d.ts +0 -68
- package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
- package/dist/matter/matterNetworkMonitor.js +0 -249
- package/dist/matter/matterNetworkMonitor.js.map +0 -1
- package/dist/matter/matterServer.d.ts.map +0 -1
- package/dist/matter/matterServer.js.map +0 -1
- package/dist/matter/matterServerHelpers.d.ts.map +0 -1
- package/dist/matter/matterServerHelpers.js.map +0 -1
- package/dist/matter/matterSharedTypes.d.ts.map +0 -1
- package/dist/matter/matterSharedTypes.js.map +0 -1
- package/dist/matter/matterStorage.d.ts.map +0 -1
- package/dist/matter/matterTypes.d.ts.map +0 -1
- package/dist/matter/matterTypes.js.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvcCleanMode Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles robotic vacuum cleaner cleaning mode changes
|
|
5
|
+
*/
|
|
6
|
+
import { RvcCleanModeServer } from '@matter/main/behaviors/rvc-clean-mode';
|
|
7
|
+
/**
|
|
8
|
+
* Custom RvcCleanMode Server that calls plugin handlers
|
|
9
|
+
*/
|
|
10
|
+
export class HomebridgeRvcCleanModeServer extends RvcCleanModeServer {
|
|
11
|
+
static registry;
|
|
12
|
+
/**
|
|
13
|
+
* Set the behavior registry (called once during server initialization)
|
|
14
|
+
*/
|
|
15
|
+
static setRegistry(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
}
|
|
18
|
+
changeToMode(request) {
|
|
19
|
+
const endpointId = this.endpoint.id;
|
|
20
|
+
// Execute user handler (errors are logged by registry)
|
|
21
|
+
HomebridgeRvcCleanModeServer.registry.executeHandler(endpointId, 'rvcCleanMode', 'changeToMode', request).catch(() => {
|
|
22
|
+
// Error already logged by registry
|
|
23
|
+
});
|
|
24
|
+
return super.changeToMode(request);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=RvcCleanModeBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcCleanModeBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,YAAY,CAAC,OAAY;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,4BAA4B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACnH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcCleanModeBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { HomebridgeRvcCleanModeServer } from './RvcCleanModeBehavior.js';
|
|
3
|
+
describe('homebridgeRvcCleanModeServer', () => {
|
|
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
|
+
HomebridgeRvcCleanModeServer.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(HomebridgeRvcCleanModeServer.prototype);
|
|
20
|
+
Object.defineProperty(behavior, 'endpoint', {
|
|
21
|
+
get: () => mockEndpoint,
|
|
22
|
+
configurable: true,
|
|
23
|
+
});
|
|
24
|
+
// Mock super method
|
|
25
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeRvcCleanModeServer.prototype), 'changeToMode').mockReturnValue(undefined);
|
|
26
|
+
});
|
|
27
|
+
describe('setRegistry', () => {
|
|
28
|
+
it('should set the registry', () => {
|
|
29
|
+
const newRegistry = {};
|
|
30
|
+
HomebridgeRvcCleanModeServer.setRegistry(newRegistry);
|
|
31
|
+
expect(true).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('changeToMode', () => {
|
|
35
|
+
it('should execute handler with request', () => {
|
|
36
|
+
const request = { newMode: 0 }; // Vacuum mode
|
|
37
|
+
behavior.changeToMode(request);
|
|
38
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcCleanMode', 'changeToMode', request);
|
|
39
|
+
});
|
|
40
|
+
it('should handle different cleaning mode values', () => {
|
|
41
|
+
const modes = [0, 1, 2]; // Vacuum, Mop, VacuumAndMop
|
|
42
|
+
for (const mode of modes) {
|
|
43
|
+
const request = { newMode: mode };
|
|
44
|
+
behavior.changeToMode(request);
|
|
45
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcCleanMode', 'changeToMode', request);
|
|
46
|
+
vi.clearAllMocks();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
it('should handle handler execution errors gracefully', () => {
|
|
50
|
+
mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
|
|
51
|
+
const request = { newMode: 0 };
|
|
52
|
+
expect(() => behavior.changeToMode(request)).not.toThrow();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=RvcCleanModeBehavior.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcCleanModeBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvcOperationalState Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles robotic vacuum cleaner operational state commands
|
|
5
|
+
*/
|
|
6
|
+
import type { MaybePromise } from '@matter/main';
|
|
7
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
8
|
+
import { RvcOperationalStateServer } from '@matter/main/behaviors/rvc-operational-state';
|
|
9
|
+
import { RvcOperationalState } from '@matter/main/clusters';
|
|
10
|
+
/**
|
|
11
|
+
* Custom RvcOperationalState Server that calls plugin handlers
|
|
12
|
+
*/
|
|
13
|
+
export declare class HomebridgeRvcOperationalStateServer extends RvcOperationalStateServer {
|
|
14
|
+
private static registry;
|
|
15
|
+
/**
|
|
16
|
+
* Set the behavior registry (called once during server initialization)
|
|
17
|
+
*/
|
|
18
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
19
|
+
pause(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
|
|
20
|
+
resume(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
|
|
21
|
+
goHome(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=RvcOperationalStateBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcOperationalStateBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;GAEG;AACH,qBAAa,mCAAoC,SAAQ,yBAAyB;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,KAAK,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;IAWrE,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;IAWtE,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;CAehF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvcOperationalState Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles robotic vacuum cleaner operational state commands
|
|
5
|
+
*/
|
|
6
|
+
import { RvcOperationalStateServer } from '@matter/main/behaviors/rvc-operational-state';
|
|
7
|
+
import { RvcOperationalState } from '@matter/main/clusters';
|
|
8
|
+
/**
|
|
9
|
+
* Custom RvcOperationalState Server that calls plugin handlers
|
|
10
|
+
*/
|
|
11
|
+
export class HomebridgeRvcOperationalStateServer extends RvcOperationalStateServer {
|
|
12
|
+
static registry;
|
|
13
|
+
/**
|
|
14
|
+
* Set the behavior registry (called once during server initialization)
|
|
15
|
+
*/
|
|
16
|
+
static setRegistry(registry) {
|
|
17
|
+
this.registry = registry;
|
|
18
|
+
}
|
|
19
|
+
pause() {
|
|
20
|
+
const endpointId = this.endpoint.id;
|
|
21
|
+
// Execute user handler (errors are logged by registry)
|
|
22
|
+
HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'pause').catch(() => {
|
|
23
|
+
// Error already logged by registry
|
|
24
|
+
});
|
|
25
|
+
return super.pause();
|
|
26
|
+
}
|
|
27
|
+
resume() {
|
|
28
|
+
const endpointId = this.endpoint.id;
|
|
29
|
+
// Execute user handler (errors are logged by registry)
|
|
30
|
+
HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'resume').catch(() => {
|
|
31
|
+
// Error already logged by registry
|
|
32
|
+
});
|
|
33
|
+
return super.resume();
|
|
34
|
+
}
|
|
35
|
+
goHome() {
|
|
36
|
+
const endpointId = this.endpoint.id;
|
|
37
|
+
// Execute user handler (errors are logged by registry)
|
|
38
|
+
HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'goHome').catch(() => {
|
|
39
|
+
// Error already logged by registry
|
|
40
|
+
});
|
|
41
|
+
// Return success response instead of calling unimplemented base method
|
|
42
|
+
return {
|
|
43
|
+
commandResponseState: {
|
|
44
|
+
errorStateId: RvcOperationalState.ErrorState.NoError,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=RvcOperationalStateBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcOperationalStateBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,yBAAyB;IACxE,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,KAAK;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACjH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAEQ,MAAM;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,MAAM,EAAE,CAAA;IACvB,CAAC;IAEQ,MAAM;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,uEAAuE;QACvE,OAAO;YACL,oBAAoB,EAAE;gBACpB,YAAY,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO;aACrD;SACF,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcOperationalStateBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { HomebridgeRvcOperationalStateServer } from './RvcOperationalStateBehavior.js';
|
|
3
|
+
describe('homebridgeRvcOperationalStateServer', () => {
|
|
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
|
+
HomebridgeRvcOperationalStateServer.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(HomebridgeRvcOperationalStateServer.prototype);
|
|
20
|
+
Object.defineProperty(behavior, 'endpoint', {
|
|
21
|
+
get: () => mockEndpoint,
|
|
22
|
+
configurable: true,
|
|
23
|
+
});
|
|
24
|
+
// Mock super methods
|
|
25
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'pause').mockReturnValue(undefined);
|
|
26
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'resume').mockReturnValue(undefined);
|
|
27
|
+
vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'goHome').mockReturnValue(undefined);
|
|
28
|
+
});
|
|
29
|
+
describe('setRegistry', () => {
|
|
30
|
+
it('should set the registry', () => {
|
|
31
|
+
const newRegistry = {};
|
|
32
|
+
HomebridgeRvcOperationalStateServer.setRegistry(newRegistry);
|
|
33
|
+
expect(true).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('pause', () => {
|
|
37
|
+
it('should execute handler for pause command', () => {
|
|
38
|
+
behavior.pause();
|
|
39
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'pause');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('resume', () => {
|
|
43
|
+
it('should execute handler for resume command', () => {
|
|
44
|
+
behavior.resume();
|
|
45
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'resume');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('goHome', () => {
|
|
49
|
+
it('should execute handler for goHome command', () => {
|
|
50
|
+
behavior.goHome();
|
|
51
|
+
expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'goHome');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=RvcOperationalStateBehavior.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcOperationalStateBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvcRunMode Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles robotic vacuum cleaner run mode changes
|
|
5
|
+
*/
|
|
6
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
7
|
+
import { RvcRunModeServer } from '@matter/main/behaviors/rvc-run-mode';
|
|
8
|
+
/**
|
|
9
|
+
* Custom RvcRunMode Server that calls plugin handlers
|
|
10
|
+
*/
|
|
11
|
+
export declare class HomebridgeRvcRunModeServer extends RvcRunModeServer {
|
|
12
|
+
private static registry;
|
|
13
|
+
/**
|
|
14
|
+
* Set the behavior registry (called once during server initialization)
|
|
15
|
+
*/
|
|
16
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
17
|
+
changeToMode(request: any): any;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=RvcRunModeBehavior.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RvcRunModeBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAEtE;;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,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;CAUzC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Custom RvcRunMode Server that calls plugin handlers
|
|
9
|
+
*/
|
|
10
|
+
export class HomebridgeRvcRunModeServer extends RvcRunModeServer {
|
|
11
|
+
static registry;
|
|
12
|
+
/**
|
|
13
|
+
* Set the behavior registry (called once during server initialization)
|
|
14
|
+
*/
|
|
15
|
+
static setRegistry(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
}
|
|
18
|
+
changeToMode(request) {
|
|
19
|
+
const endpointId = this.endpoint.id;
|
|
20
|
+
// Execute user handler (errors are logged by registry)
|
|
21
|
+
HomebridgeRvcRunModeServer.registry.executeHandler(endpointId, 'rvcRunMode', 'changeToMode', request).catch(() => {
|
|
22
|
+
// Error already logged by registry
|
|
23
|
+
});
|
|
24
|
+
return super.changeToMode(request);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# 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;AAEtE;;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,YAAY,CAAC,OAAY;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC/G,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,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,56 @@
|
|
|
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', () => {
|
|
50
|
+
mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
|
|
51
|
+
const request = { newMode: 1 };
|
|
52
|
+
expect(() => behavior.changeToMode(request)).not.toThrow();
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# 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,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceArea Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles service area selection for robotic vacuum cleaners
|
|
5
|
+
*/
|
|
6
|
+
import type { MaybePromise } from '@matter/main';
|
|
7
|
+
import type { ServiceArea } from '@matter/main/clusters';
|
|
8
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
9
|
+
import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
|
|
10
|
+
/**
|
|
11
|
+
* Custom ServiceArea Server that calls plugin handlers
|
|
12
|
+
*/
|
|
13
|
+
export declare class HomebridgeServiceAreaServer extends ServiceAreaServer {
|
|
14
|
+
private static registry;
|
|
15
|
+
/**
|
|
16
|
+
* Set the behavior registry (called once during server initialization)
|
|
17
|
+
*/
|
|
18
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
19
|
+
selectAreas(request: ServiceArea.SelectAreasRequest): MaybePromise<ServiceArea.SelectAreasResponse>;
|
|
20
|
+
skipArea(request: ServiceArea.SkipAreaRequest): MaybePromise<ServiceArea.SkipAreaResponse>;
|
|
21
|
+
}
|
|
22
|
+
//# 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,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,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;AAEvE;;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;IAI3C,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAWnG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC;CAUpG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Custom ServiceArea Server that calls plugin handlers
|
|
9
|
+
*/
|
|
10
|
+
export class HomebridgeServiceAreaServer extends ServiceAreaServer {
|
|
11
|
+
static registry;
|
|
12
|
+
/**
|
|
13
|
+
* Set the behavior registry (called once during server initialization)
|
|
14
|
+
*/
|
|
15
|
+
static setRegistry(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
}
|
|
18
|
+
selectAreas(request) {
|
|
19
|
+
const endpointId = this.endpoint.id;
|
|
20
|
+
// Execute user handler (errors are logged by registry)
|
|
21
|
+
HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'selectAreas', request).catch(() => {
|
|
22
|
+
// Error already logged by registry
|
|
23
|
+
});
|
|
24
|
+
return super.selectAreas(request);
|
|
25
|
+
}
|
|
26
|
+
skipArea(request) {
|
|
27
|
+
const endpointId = this.endpoint.id;
|
|
28
|
+
// Execute user handler (errors are logged by registry)
|
|
29
|
+
HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'skipArea', request).catch(() => {
|
|
30
|
+
// Error already logged by registry
|
|
31
|
+
});
|
|
32
|
+
return super.skipArea(request);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ServiceAreaBehavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceAreaBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAEvE;;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,WAAW,CAAC,OAAuC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IAEQ,QAAQ,CAAC,OAAoC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7G,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChC,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,52 @@
|
|
|
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', () => {
|
|
46
|
+
mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
|
|
47
|
+
const request = { newAreas: [0, 1] };
|
|
48
|
+
expect(() => behavior.selectAreas(request)).not.toThrow();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
//# 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":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAEtE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,YAA8B,CAAA;IAClC,IAAI,QAAqC,CAAA;IACzC,IAAI,YAAiB,CAAA;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,uBAAuB;QACvB,YAAY,GAAG;YACb,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACzC,CAAA;QAER,iCAAiC;QACjC,2BAA2B,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAErD,uBAAuB;QACvB,YAAY,GAAG;YACb,EAAE,EAAE,mBAAmB;SACxB,CAAA;QAED,kDAAkD;QAClD,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAA;QAC/D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,oBAAoB;QACpB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IAClH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAG,EAAsB,CAAA;YAC1C,2BAA2B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACpD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;YAEvC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAE7B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;YAEhC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAE7B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACpF,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;YAEpC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thermostat Cluster Behavior
|
|
3
|
+
*
|
|
4
|
+
* Handles thermostat commands for heating and cooling systems
|
|
5
|
+
*/
|
|
6
|
+
import type { MaybePromise } from '@matter/main';
|
|
7
|
+
import type { Thermostat } from '@matter/main/clusters';
|
|
8
|
+
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
9
|
+
import { ThermostatServer } from '@matter/main/behaviors/thermostat';
|
|
10
|
+
/**
|
|
11
|
+
* Custom Thermostat Server that calls plugin handlers
|
|
12
|
+
*/
|
|
13
|
+
export declare class HomebridgeThermostatServer extends ThermostatServer {
|
|
14
|
+
#private;
|
|
15
|
+
private static registry;
|
|
16
|
+
/**
|
|
17
|
+
* Set the behavior registry (called once during server initialization)
|
|
18
|
+
*/
|
|
19
|
+
static setRegistry(registry: BehaviorRegistry): void;
|
|
20
|
+
initialize(): void;
|
|
21
|
+
setpointRaiseLower(request: Thermostat.SetpointRaiseLowerRequest): MaybePromise;
|
|
22
|
+
}
|
|
23
|
+
//# 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,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,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;AAEpE;;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;IAoElB,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,YAAY;CAwBzF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Custom Thermostat Server that calls plugin handlers
|
|
9
|
+
*/
|
|
10
|
+
export class HomebridgeThermostatServer extends ThermostatServer {
|
|
11
|
+
static registry;
|
|
12
|
+
/**
|
|
13
|
+
* Set the behavior registry (called once during server initialization)
|
|
14
|
+
*/
|
|
15
|
+
static setRegistry(registry) {
|
|
16
|
+
this.registry = registry;
|
|
17
|
+
}
|
|
18
|
+
initialize() {
|
|
19
|
+
super.initialize();
|
|
20
|
+
// React to systemMode attribute changes (off, heat, cool, auto, etc.)
|
|
21
|
+
this.reactTo(this.events.systemMode$Changed, this.#handleSystemModeChange);
|
|
22
|
+
// React to occupiedHeatingSetpoint attribute changes (target heating temperature)
|
|
23
|
+
const events = this.events;
|
|
24
|
+
if (events.occupiedHeatingSetpoint$Changing) {
|
|
25
|
+
this.reactTo(events.occupiedHeatingSetpoint$Changing, this.#handleOccupiedHeatingSetpointChanging);
|
|
26
|
+
}
|
|
27
|
+
// React to occupiedCoolingSetpoint attribute changes (target cooling temperature)
|
|
28
|
+
if (events.occupiedCoolingSetpoint$Changing) {
|
|
29
|
+
this.reactTo(events.occupiedCoolingSetpoint$Changing, this.#handleOccupiedCoolingSetpointChanging);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
#handleSystemModeChange(value, oldValue) {
|
|
33
|
+
const endpointId = this.endpoint.id;
|
|
34
|
+
// Execute user handler (errors are logged by registry)
|
|
35
|
+
HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'systemModeChange', { systemMode: value, oldSystemMode: oldValue }).catch(() => {
|
|
36
|
+
// Error already logged by registry
|
|
37
|
+
});
|
|
38
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { systemMode: value });
|
|
39
|
+
}
|
|
40
|
+
#handleOccupiedHeatingSetpointChanging(value) {
|
|
41
|
+
const endpointId = this.endpoint.id;
|
|
42
|
+
const oldValue = this.state.occupiedHeatingSetpoint;
|
|
43
|
+
// Execute user handler (errors are logged by registry)
|
|
44
|
+
HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedHeatingSetpointChange', { occupiedHeatingSetpoint: value, oldOccupiedHeatingSetpoint: oldValue }).catch(() => {
|
|
45
|
+
// Error already logged by registry
|
|
46
|
+
});
|
|
47
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedHeatingSetpoint: value });
|
|
48
|
+
}
|
|
49
|
+
#handleOccupiedCoolingSetpointChanging(value) {
|
|
50
|
+
const endpointId = this.endpoint.id;
|
|
51
|
+
const oldValue = this.state.occupiedCoolingSetpoint;
|
|
52
|
+
// Execute user handler (errors are logged by registry)
|
|
53
|
+
HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedCoolingSetpointChange', { occupiedCoolingSetpoint: value, oldOccupiedCoolingSetpoint: oldValue }).catch(() => {
|
|
54
|
+
// Error already logged by registry
|
|
55
|
+
});
|
|
56
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedCoolingSetpoint: value });
|
|
57
|
+
}
|
|
58
|
+
setpointRaiseLower(request) {
|
|
59
|
+
const endpointId = this.endpoint.id;
|
|
60
|
+
// Execute user handler (errors are logged by registry)
|
|
61
|
+
HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'setpointRaiseLower', request).catch(() => {
|
|
62
|
+
// Error already logged by registry
|
|
63
|
+
});
|
|
64
|
+
// Call base implementation
|
|
65
|
+
const result = super.setpointRaiseLower(request);
|
|
66
|
+
// Sync thermostat setpoints to cache
|
|
67
|
+
const currentState = this.state;
|
|
68
|
+
const stateUpdate = {};
|
|
69
|
+
if (currentState.occupiedCoolingSetpoint !== undefined) {
|
|
70
|
+
stateUpdate.occupiedCoolingSetpoint = currentState.occupiedCoolingSetpoint;
|
|
71
|
+
}
|
|
72
|
+
if (currentState.occupiedHeatingSetpoint !== undefined) {
|
|
73
|
+
stateUpdate.occupiedHeatingSetpoint = currentState.occupiedHeatingSetpoint;
|
|
74
|
+
}
|
|
75
|
+
HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', stateUpdate);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ThermostatBehavior.js.map
|