@matterbridge/core 3.10.12-dev-20261001-3745ad2 → 3.10.12-dev-20261002-6a30fb3

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.
Files changed (73) hide show
  1. package/dist/behaviors/activatedCarbonFilterMonitoringServer.d.ts +3 -1
  2. package/dist/behaviors/activatedCarbonFilterMonitoringServer.js +3 -1
  3. package/dist/behaviors/bindingServer.d.ts +2 -0
  4. package/dist/behaviors/booleanStateConfigurationServer.d.ts +2 -0
  5. package/dist/behaviors/booleanStateConfigurationServer.js +2 -0
  6. package/dist/behaviors/cameraAvStreamManagementServer.js +4 -3
  7. package/dist/behaviors/deviceEnergyManagementModeServer.d.ts +2 -0
  8. package/dist/behaviors/deviceEnergyManagementModeServer.js +3 -1
  9. package/dist/behaviors/deviceEnergyManagementServer.d.ts +2 -0
  10. package/dist/behaviors/deviceEnergyManagementServer.js +2 -0
  11. package/dist/behaviors/doorLockServer.d.ts +2 -0
  12. package/dist/behaviors/doorLockServer.js +40 -9
  13. package/dist/behaviors/fanControlServer.d.ts +2 -0
  14. package/dist/behaviors/fanControlServer.js +1 -0
  15. package/dist/behaviors/hepaFilterMonitoringServer.d.ts +3 -1
  16. package/dist/behaviors/hepaFilterMonitoringServer.js +3 -1
  17. package/dist/behaviors/identifyServer.d.ts +3 -1
  18. package/dist/behaviors/identifyServer.js +3 -0
  19. package/dist/behaviors/modeSelectServer.d.ts +3 -1
  20. package/dist/behaviors/modeSelectServer.js +2 -0
  21. package/dist/behaviors/occupancySensingServer.d.ts +2 -0
  22. package/dist/behaviors/operationalStateServer.d.ts +2 -0
  23. package/dist/behaviors/operationalStateServer.js +4 -0
  24. package/dist/behaviors/powerSourceServer.d.ts +2 -0
  25. package/dist/behaviors/pumpConfigurationAndControlServer.d.ts +2 -0
  26. package/dist/behaviors/serviceAreaServer.d.ts +3 -1
  27. package/dist/behaviors/serviceAreaServer.js +5 -1
  28. package/dist/behaviors/smokeCoAlarmServer.d.ts +2 -0
  29. package/dist/behaviors/smokeCoAlarmServer.js +2 -1
  30. package/dist/behaviors/switchServer.d.ts +2 -0
  31. package/dist/behaviors/temperatureAlarmServer.d.ts +2 -0
  32. package/dist/behaviors/temperatureAlarmServer.js +2 -0
  33. package/dist/behaviors/thermostatServer.d.ts +2 -0
  34. package/dist/behaviors/thermostatServer.js +5 -0
  35. package/dist/behaviors/valveConfigurationAndControlServer.d.ts +2 -0
  36. package/dist/behaviors/valveConfigurationAndControlServer.js +2 -0
  37. package/dist/behaviors/waterTankLevelMonitoringServer.d.ts +3 -1
  38. package/dist/behaviors/waterTankLevelMonitoringServer.js +3 -1
  39. package/dist/behaviors/webRtcTransportProviderServer.js +1 -1
  40. package/dist/behaviors/windowCoveringServer.d.ts +2 -0
  41. package/dist/behaviors/windowCoveringServer.js +5 -0
  42. package/dist/devices/closure.d.ts +1 -0
  43. package/dist/devices/closure.js +17 -11
  44. package/dist/devices/closurePanel.d.ts +1 -0
  45. package/dist/devices/closurePanel.js +17 -13
  46. package/dist/devices/dishwasher.d.ts +3 -0
  47. package/dist/devices/dishwasher.js +17 -12
  48. package/dist/devices/electricalUtilityMeter.d.ts +4 -1
  49. package/dist/devices/electricalUtilityMeter.js +13 -3
  50. package/dist/devices/evse.d.ts +2 -0
  51. package/dist/devices/evse.js +12 -3
  52. package/dist/devices/laundryDryer.d.ts +7 -1
  53. package/dist/devices/laundryDryer.js +12 -1
  54. package/dist/devices/laundryWasher.d.ts +2 -0
  55. package/dist/devices/laundryWasher.js +13 -8
  56. package/dist/devices/mediaHelpers.d.ts +5 -0
  57. package/dist/devices/mediaHelpers.js +38 -16
  58. package/dist/devices/microwaveOven.d.ts +1 -0
  59. package/dist/devices/microwaveOven.js +40 -21
  60. package/dist/devices/oven.d.ts +8 -5
  61. package/dist/devices/oven.js +55 -25
  62. package/dist/devices/refrigerator.d.ts +3 -1
  63. package/dist/devices/refrigerator.js +19 -10
  64. package/dist/devices/roboticVacuumCleaner.d.ts +3 -0
  65. package/dist/devices/roboticVacuumCleaner.js +29 -19
  66. package/dist/devices/temperatureControl.d.ts +2 -0
  67. package/dist/devices/temperatureControl.js +24 -14
  68. package/dist/devices/waterHeater.d.ts +2 -0
  69. package/dist/devices/waterHeater.js +6 -0
  70. package/dist/matterbridge.js +1 -1
  71. package/dist/matterbridgeEndpoint.js +2 -3
  72. package/dist/matterbridgeEndpointCommandHandler.d.ts +31 -0
  73. package/package.json +6 -6
@@ -1,11 +1,13 @@
1
1
  import { ActivatedCarbonFilterMonitoringServer } from '@matter/node/behaviors/activated-carbon-filter-monitoring';
2
- import type { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
2
+ import { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  declare const MatterbridgeActivatedCarbonFilterMonitoringServer_base: import("@matter/node").ClusterBehavior.Type<typeof ActivatedCarbonFilterMonitoringServer, import("@matter/types").ClusterType.WithSupportedFeatures<ActivatedCarbonFilterMonitoring, {
4
5
  condition: true;
5
6
  replacementProductList: true;
6
7
  warning: true;
7
8
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "activatedCarbonFilterMonitoring">;
8
9
  export declare class MatterbridgeActivatedCarbonFilterMonitoringServer extends MatterbridgeActivatedCarbonFilterMonitoringServer_base {
10
+ readonly endpoint: MatterbridgeEndpoint;
9
11
  resetCondition(): Promise<void>;
10
12
  }
11
13
  export {};
@@ -1,4 +1,5 @@
1
1
  import { ActivatedCarbonFilterMonitoringServer } from '@matter/node/behaviors/activated-carbon-filter-monitoring';
2
+ import { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
2
3
  import { ResourceMonitoring } from '@matter/types/clusters/resource-monitoring';
3
4
  import { MatterbridgeServer } from './matterbridgeServer.js';
4
5
  export class MatterbridgeActivatedCarbonFilterMonitoringServer extends ActivatedCarbonFilterMonitoringServer.with(ResourceMonitoring.Feature.Condition, ResourceMonitoring.Feature.Warning, ResourceMonitoring.Feature.ReplacementProductList) {
@@ -13,9 +14,10 @@ export class MatterbridgeActivatedCarbonFilterMonitoringServer extends Activated
13
14
  endpoint: this.endpoint,
14
15
  context: this.context,
15
16
  });
16
- this.state.condition = 100;
17
+ this.state.condition = this.state.degradationDirection === ResourceMonitoring.DegradationDirection.Up ? 0 : 100;
17
18
  this.state.changeIndication = ResourceMonitoring.ChangeIndication.Ok;
18
19
  this.state.lastChangedTime = Math.floor(new Date().getTime() / 1000);
19
20
  device.log.debug(`MatterbridgeActivatedCarbonFilterMonitoringServer: resetCondition called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
21
+ this.endpoint.emitCommand(ActivatedCarbonFilterMonitoring, 'resetCondition', {}, this.context);
20
22
  }
21
23
  }
@@ -2,7 +2,9 @@ import type { Endpoint } from '@matter/main/node';
2
2
  import { BindingBehavior, BindingServer } from '@matter/node/behaviors/binding';
3
3
  import type { ClusterId } from '@matter/types';
4
4
  import type { Binding } from '@matter/types/clusters/binding';
5
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
5
6
  export declare class MatterbridgeBindingServer extends BindingServer {
7
+ readonly endpoint: MatterbridgeEndpoint;
6
8
  protected internal: MatterbridgeBindingServer.Internal;
7
9
  state: MatterbridgeBindingServer.State;
8
10
  initialize(): void;
@@ -1,6 +1,7 @@
1
1
  import type { MaybePromise } from '@matter/general';
2
2
  import { BooleanStateConfigurationServer } from '@matter/node/behaviors/boolean-state-configuration';
3
3
  import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeBooleanStateConfigurationServer_base: import("@matter/node").ClusterBehavior.Type<typeof BooleanStateConfigurationServer, import("@matter/types").ClusterType.WithSupportedFeatures<BooleanStateConfiguration, {
5
6
  alarmSuppress: true;
6
7
  audible: true;
@@ -10,6 +11,7 @@ declare const MatterbridgeBooleanStateConfigurationServer_base: import("@matter/
10
11
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "booleanStateConfiguration">;
11
12
  export declare class MatterbridgeBooleanStateConfigurationServer extends MatterbridgeBooleanStateConfigurationServer_base {
12
13
  #private;
14
+ readonly endpoint: MatterbridgeEndpoint;
13
15
  initialize(): MaybePromise;
14
16
  suppressAlarm(request: BooleanStateConfiguration.SuppressAlarmRequest): Promise<void>;
15
17
  enableDisableAlarm(request: BooleanStateConfiguration.EnableDisableAlarmRequest): Promise<void>;
@@ -70,6 +70,7 @@ export class MatterbridgeBooleanStateConfigurationServer extends BooleanStateCon
70
70
  this.#assertSuppressAlarmAllowed(request.alarmsToSuppress);
71
71
  this.state.alarmsSuppressed = this.#mergeAlarmsSuppressed(request.alarmsToSuppress);
72
72
  device.log.debug(`MatterbridgeBooleanStateConfigurationServer: suppressAlarm called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
73
+ this.endpoint.emitCommand(BooleanStateConfiguration, 'suppressAlarm', request, this.context);
73
74
  }
74
75
  async enableDisableAlarm(request) {
75
76
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -85,5 +86,6 @@ export class MatterbridgeBooleanStateConfigurationServer extends BooleanStateCon
85
86
  this.#assertAlarmModesSupported(request.alarmsToEnableDisable);
86
87
  this.#applyAlarmsEnabled(request.alarmsToEnableDisable);
87
88
  device.log.debug(`MatterbridgeBooleanStateConfigurationServer: enableDisableAlarm called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
89
+ this.endpoint.emitCommand(BooleanStateConfiguration, 'enableDisableAlarm', request, this.context);
88
90
  }
89
91
  }
@@ -331,10 +331,11 @@ export class MatterbridgeCameraAvStreamManagementServer extends MatterbridgeCame
331
331
  this.endpoint.emitCommand(CameraAvStreamManagement, 'snapshotStreamDeallocate', request, this.context);
332
332
  }
333
333
  #resolveSnapshotSource() {
334
- const endpoint = `(endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`;
335
334
  const fail = (reason) => {
336
- this.endpoint.stateOf(MatterbridgeServer).log.error(`MatterbridgeCameraAvStreamManagementServer: cannot capture snapshot: ${reason} ${endpoint}`);
337
- return new StatusResponseError(`MatterbridgeCameraAvStreamManagementServer: cannot capture snapshot: ${reason} ${endpoint}`, Status.Failure);
335
+ this.endpoint
336
+ .stateOf(MatterbridgeServer)
337
+ .log.error(`MatterbridgeCameraAvStreamManagementServer: cannot capture snapshot: ${reason} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
338
+ return new StatusResponseError(`MatterbridgeCameraAvStreamManagementServer: cannot capture snapshot: ${reason} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`, Status.Failure);
338
339
  };
339
340
  const sourceFor = (source, device, sourceOption, deviceOption) => {
340
341
  if (source === 'test')
@@ -1,5 +1,7 @@
1
1
  import { DeviceEnergyManagementModeServer } from '@matter/node/behaviors/device-energy-management-mode';
2
2
  import { ModeBase } from '@matter/types/clusters/mode-base';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  export declare class MatterbridgeDeviceEnergyManagementModeServer extends DeviceEnergyManagementModeServer {
5
+ readonly endpoint: MatterbridgeEndpoint;
4
6
  changeToMode(request: ModeBase.ChangeToModeRequest): Promise<ModeBase.ChangeToModeResponse>;
5
7
  }
@@ -37,6 +37,8 @@ export class MatterbridgeDeviceEnergyManagementModeServer extends DeviceEnergyMa
37
37
  }
38
38
  }
39
39
  device.log.debug(`MatterbridgeDeviceEnergyManagementModeServer: changeToMode called with newMode ${request.newMode} => ${supported.label} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
40
- return await super.changeToMode(request);
40
+ const response = await super.changeToMode(request);
41
+ this.endpoint.emitCommand(DeviceEnergyManagementMode, 'changeToMode', request, this.context);
42
+ return response;
41
43
  }
42
44
  }
@@ -1,6 +1,7 @@
1
1
  import { type Timer } from '@matter/general';
2
2
  import { DeviceEnergyManagementServer } from '@matter/node/behaviors/device-energy-management';
3
3
  import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeDeviceEnergyManagementServer_base: import("@matter/node").ClusterBehavior.Type<typeof DeviceEnergyManagementServer, import("@matter/types").ClusterType.WithSupportedFeatures<DeviceEnergyManagement, {
5
6
  constraintBasedAdjustment: false;
6
7
  forecastAdjustment: false;
@@ -12,6 +13,7 @@ declare const MatterbridgeDeviceEnergyManagementServer_base: import("@matter/nod
12
13
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "deviceEnergyManagement">;
13
14
  export declare class MatterbridgeDeviceEnergyManagementServer extends MatterbridgeDeviceEnergyManagementServer_base {
14
15
  #private;
16
+ readonly endpoint: MatterbridgeEndpoint;
15
17
  protected internal: MatterbridgeDeviceEnergyManagementServer.Internal;
16
18
  initialize(): Promise<void>;
17
19
  powerAdjustRequest(request: DeviceEnergyManagement.PowerAdjustRequest): Promise<void>;
@@ -49,6 +49,7 @@ export class MatterbridgeDeviceEnergyManagementServer extends DeviceEnergyManage
49
49
  this.events.powerAdjustStart.emit(undefined, this.context);
50
50
  }
51
51
  this.internal.powerAdjustCompletionTimer = Time.getTimer('DeviceEnergyManagement power adjust completion', Seconds(duration), this.callback(this.#completePowerAdjustmentOnTimeout, { lock: true })).start();
52
+ this.endpoint.emitCommand(DeviceEnergyManagement, 'powerAdjustRequest', request, this.context);
52
53
  }
53
54
  async cancelPowerAdjustRequest() {
54
55
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -66,6 +67,7 @@ export class MatterbridgeDeviceEnergyManagementServer extends DeviceEnergyManage
66
67
  throw new StatusResponseError(`MatterbridgeDeviceEnergyManagementServer: no power adjustment is currently active (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`, Status.InvalidInState);
67
68
  }
68
69
  this.#endPowerAdjustment(DeviceEnergyManagement.Cause.Cancelled);
70
+ this.endpoint.emitCommand(DeviceEnergyManagement, 'cancelPowerAdjustRequest', {}, this.context);
69
71
  }
70
72
  #handleOptOutStateChanged(optOutState) {
71
73
  if (this.state.esaState !== DeviceEnergyManagement.EsaState.PowerAdjustActive)
@@ -1,5 +1,6 @@
1
1
  import { DoorLockServer } from '@matter/node/behaviors/door-lock';
2
2
  import { DoorLock } from '@matter/types/clusters/door-lock';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  declare const MatterbridgeDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/node").ClusterBehavior.Type<typeof DoorLockServer, import("@matter/types").ClusterType.WithSupportedFeatures<DoorLock, {
4
5
  aliroBleuwb: false;
5
6
  aliroProvisioning: false;
@@ -30,6 +31,7 @@ declare const MatterbridgeDoorLockServer_base: import("@matter/node").ClusterBeh
30
31
  yearDayAccessSchedules: true;
31
32
  }>, "doorLockAlarm" | "lockOperation" | "lockOperationError">, never>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/door-lock").DoorLockBaseServer.Internal, "doorLock">;
32
33
  export declare class MatterbridgeDoorLockServer extends MatterbridgeDoorLockServer_base {
34
+ readonly endpoint: MatterbridgeEndpoint;
33
35
  initialize(): void;
34
36
  lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
35
37
  unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
@@ -28,6 +28,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
28
28
  }
29
29
  device.log.debug(`MatterbridgeDoorLockServer: lockDoor called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
30
30
  await super.lockDoor(request);
31
+ this.endpoint.emitCommand(DoorLock, 'lockDoor', request, this.context);
31
32
  }
32
33
  async unlockDoor(request) {
33
34
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -46,6 +47,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
46
47
  }
47
48
  device.log.debug(`MatterbridgeDoorLockServer: unlockDoor called ${this.state.autoRelockTime ? 'with ' + this.state.autoRelockTime + ' seconds' : 'without'} autoRelockTime (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
48
49
  await super.unlockDoor(request);
50
+ this.endpoint.emitCommand(DoorLock, 'unlockDoor', request, this.context);
49
51
  }
50
52
  async unlockWithTimeout(request) {
51
53
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -64,6 +66,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
64
66
  }
65
67
  device.log.debug(`MatterbridgeDoorLockServer: unlockWithTimeout called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
66
68
  await super.unlockWithTimeout(request);
69
+ this.endpoint.emitCommand(DoorLock, 'unlockWithTimeout', request, this.context);
67
70
  }
68
71
  async setUser(request) {
69
72
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -78,6 +81,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
78
81
  });
79
82
  device.log.debug(`MatterbridgeDoorLockServer: setUser called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
80
83
  await super.setUser(request);
84
+ this.endpoint.emitCommand(DoorLock, 'setUser', request, this.context);
81
85
  }
82
86
  async getUser(request) {
83
87
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -91,10 +95,13 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
91
95
  context: this.context,
92
96
  });
93
97
  if (response !== undefined) {
98
+ this.endpoint.emitCommand(DoorLock, 'getUser', request, this.context);
94
99
  return response;
95
100
  }
96
101
  device.log.debug(`MatterbridgeDoorLockServer: getUser called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
97
- return await super.getUser(request);
102
+ const result = await super.getUser(request);
103
+ this.endpoint.emitCommand(DoorLock, 'getUser', request, this.context);
104
+ return result;
98
105
  }
99
106
  async clearUser(request) {
100
107
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -109,6 +116,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
109
116
  });
110
117
  device.log.debug(`MatterbridgeDoorLockServer: clearUser called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
111
118
  await super.clearUser(request);
119
+ this.endpoint.emitCommand(DoorLock, 'clearUser', request, this.context);
112
120
  }
113
121
  async setCredential(request) {
114
122
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -128,7 +136,9 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
128
136
  if (request.operationType === DoorLock.DataOperationType.Add && this.auth.findCredential(request.credential.credentialType, request.credential.credentialIndex)) {
129
137
  throw new DoorLock.OccupiedError(`MatterbridgeDoorLockServer: add operation targets an occupied credential index (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
130
138
  }
131
- return await super.setCredential(request);
139
+ const result = await super.setCredential(request);
140
+ this.endpoint.emitCommand(DoorLock, 'setCredential', request, this.context);
141
+ return result;
132
142
  }
133
143
  async getCredentialStatus(request) {
134
144
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -142,7 +152,9 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
142
152
  context: this.context,
143
153
  });
144
154
  device.log.debug(`MatterbridgeDoorLockServer: getCredentialStatus called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
145
- return await super.getCredentialStatus(request);
155
+ const result = await super.getCredentialStatus(request);
156
+ this.endpoint.emitCommand(DoorLock, 'getCredentialStatus', request, this.context);
157
+ return result;
146
158
  }
147
159
  async clearCredential(request) {
148
160
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -157,6 +169,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
157
169
  });
158
170
  device.log.debug(`MatterbridgeDoorLockServer: clearCredential called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
159
171
  await super.clearCredential(request);
172
+ this.endpoint.emitCommand(DoorLock, 'clearCredential', request, this.context);
160
173
  }
161
174
  async setWeekDaySchedule(request) {
162
175
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -171,6 +184,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
171
184
  });
172
185
  device.log.debug(`MatterbridgeDoorLockServer: setWeekDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
173
186
  await super.setWeekDaySchedule(request);
187
+ this.endpoint.emitCommand(DoorLock, 'setWeekDaySchedule', request, this.context);
174
188
  }
175
189
  async getWeekDaySchedule(request) {
176
190
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -183,10 +197,14 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
183
197
  endpoint: this.endpoint,
184
198
  context: this.context,
185
199
  });
186
- if (response !== undefined)
200
+ if (response !== undefined) {
201
+ this.endpoint.emitCommand(DoorLock, 'getWeekDaySchedule', request, this.context);
187
202
  return response;
203
+ }
188
204
  device.log.debug(`MatterbridgeDoorLockServer: getWeekDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
189
- return await super.getWeekDaySchedule(request);
205
+ const result = await super.getWeekDaySchedule(request);
206
+ this.endpoint.emitCommand(DoorLock, 'getWeekDaySchedule', request, this.context);
207
+ return result;
190
208
  }
191
209
  async clearWeekDaySchedule(request) {
192
210
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -201,6 +219,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
201
219
  });
202
220
  device.log.debug(`MatterbridgeDoorLockServer: clearWeekDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
203
221
  await super.clearWeekDaySchedule(request);
222
+ this.endpoint.emitCommand(DoorLock, 'clearWeekDaySchedule', request, this.context);
204
223
  }
205
224
  async setYearDaySchedule(request) {
206
225
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -215,6 +234,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
215
234
  });
216
235
  device.log.debug(`MatterbridgeDoorLockServer: setYearDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
217
236
  await super.setYearDaySchedule(request);
237
+ this.endpoint.emitCommand(DoorLock, 'setYearDaySchedule', request, this.context);
218
238
  }
219
239
  async getYearDaySchedule(request) {
220
240
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -227,10 +247,14 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
227
247
  endpoint: this.endpoint,
228
248
  context: this.context,
229
249
  });
230
- if (response !== undefined)
250
+ if (response !== undefined) {
251
+ this.endpoint.emitCommand(DoorLock, 'getYearDaySchedule', request, this.context);
231
252
  return response;
253
+ }
232
254
  device.log.debug(`MatterbridgeDoorLockServer: getYearDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
233
- return await super.getYearDaySchedule(request);
255
+ const result = await super.getYearDaySchedule(request);
256
+ this.endpoint.emitCommand(DoorLock, 'getYearDaySchedule', request, this.context);
257
+ return result;
234
258
  }
235
259
  async clearYearDaySchedule(request) {
236
260
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -245,6 +269,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
245
269
  });
246
270
  device.log.debug(`MatterbridgeDoorLockServer: clearYearDaySchedule called for userIndex ${request.userIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
247
271
  await super.clearYearDaySchedule(request);
272
+ this.endpoint.emitCommand(DoorLock, 'clearYearDaySchedule', request, this.context);
248
273
  }
249
274
  async setHolidaySchedule(request) {
250
275
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -259,6 +284,7 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
259
284
  });
260
285
  device.log.debug(`MatterbridgeDoorLockServer: setHolidaySchedule called for holidayIndex ${request.holidayIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
261
286
  await super.setHolidaySchedule(request);
287
+ this.endpoint.emitCommand(DoorLock, 'setHolidaySchedule', request, this.context);
262
288
  }
263
289
  async getHolidaySchedule(request) {
264
290
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -271,10 +297,14 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
271
297
  endpoint: this.endpoint,
272
298
  context: this.context,
273
299
  });
274
- if (response !== undefined)
300
+ if (response !== undefined) {
301
+ this.endpoint.emitCommand(DoorLock, 'getHolidaySchedule', request, this.context);
275
302
  return response;
303
+ }
276
304
  device.log.debug(`MatterbridgeDoorLockServer: getHolidaySchedule called for holidayIndex ${request.holidayIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
277
- return await super.getHolidaySchedule(request);
305
+ const result = await super.getHolidaySchedule(request);
306
+ this.endpoint.emitCommand(DoorLock, 'getHolidaySchedule', request, this.context);
307
+ return result;
278
308
  }
279
309
  async clearHolidaySchedule(request) {
280
310
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -289,5 +319,6 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
289
319
  });
290
320
  device.log.debug(`MatterbridgeDoorLockServer: clearHolidaySchedule called for holidayIndex ${request.holidayIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
291
321
  await super.clearHolidaySchedule(request);
322
+ this.endpoint.emitCommand(DoorLock, 'clearHolidaySchedule', request, this.context);
292
323
  }
293
324
  }
@@ -1,6 +1,7 @@
1
1
  import type { MaybePromise } from '@matter/general';
2
2
  import { FanControlServer } from '@matter/node/behaviors/fan-control';
3
3
  import { FanControl } from '@matter/types/clusters/fan-control';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeFanControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof FanControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<FanControl, {
5
6
  airflowDirection: false;
6
7
  auto: true;
@@ -11,6 +12,7 @@ declare const MatterbridgeFanControlServer_base: import("@matter/node").ClusterB
11
12
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "fanControl">;
12
13
  export declare class MatterbridgeFanControlServer extends MatterbridgeFanControlServer_base {
13
14
  #private;
15
+ readonly endpoint: MatterbridgeEndpoint;
14
16
  initialize(): MaybePromise;
15
17
  step(request: FanControl.StepRequest): Promise<void>;
16
18
  }
@@ -196,5 +196,6 @@ export class MatterbridgeFanControlServer extends FanControlServer.with(FanContr
196
196
  device.log.debug(`MatterbridgeFanControlServer: step applied fanMode ${lookupFanMode[this.state.fanMode]}, percentCurrent ${this.state.percentCurrent}` +
197
197
  (this.features.multiSpeed ? `, speedCurrent ${this.state.speedCurrent}` : '') +
198
198
  ` (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
199
+ this.endpoint.emitCommand(FanControl, 'step', request, this.context);
199
200
  }
200
201
  }
@@ -1,11 +1,13 @@
1
1
  import { HepaFilterMonitoringServer } from '@matter/node/behaviors/hepa-filter-monitoring';
2
- import type { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
2
+ import { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  declare const MatterbridgeHepaFilterMonitoringServer_base: import("@matter/node").ClusterBehavior.Type<typeof HepaFilterMonitoringServer, import("@matter/types").ClusterType.WithSupportedFeatures<HepaFilterMonitoring, {
4
5
  condition: true;
5
6
  replacementProductList: true;
6
7
  warning: true;
7
8
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "hepaFilterMonitoring">;
8
9
  export declare class MatterbridgeHepaFilterMonitoringServer extends MatterbridgeHepaFilterMonitoringServer_base {
10
+ readonly endpoint: MatterbridgeEndpoint;
9
11
  resetCondition(): Promise<void>;
10
12
  }
11
13
  export {};
@@ -1,4 +1,5 @@
1
1
  import { HepaFilterMonitoringServer } from '@matter/node/behaviors/hepa-filter-monitoring';
2
+ import { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
2
3
  import { ResourceMonitoring } from '@matter/types/clusters/resource-monitoring';
3
4
  import { MatterbridgeServer } from './matterbridgeServer.js';
4
5
  export class MatterbridgeHepaFilterMonitoringServer extends HepaFilterMonitoringServer.with(ResourceMonitoring.Feature.Condition, ResourceMonitoring.Feature.Warning, ResourceMonitoring.Feature.ReplacementProductList) {
@@ -13,9 +14,10 @@ export class MatterbridgeHepaFilterMonitoringServer extends HepaFilterMonitoring
13
14
  endpoint: this.endpoint,
14
15
  context: this.context,
15
16
  });
16
- this.state.condition = 100;
17
+ this.state.condition = this.state.degradationDirection === ResourceMonitoring.DegradationDirection.Up ? 0 : 100;
17
18
  this.state.changeIndication = ResourceMonitoring.ChangeIndication.Ok;
18
19
  this.state.lastChangedTime = Math.floor(new Date().getTime() / 1000);
19
20
  device.log.debug(`MatterbridgeHepaFilterMonitoringServer: resetCondition called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
21
+ this.endpoint.emitCommand(HepaFilterMonitoring, 'resetCondition', {}, this.context);
20
22
  }
21
23
  }
@@ -1,6 +1,8 @@
1
1
  import { IdentifyServer } from '@matter/node/behaviors/identify';
2
- import type { Identify } from '@matter/types/clusters/identify';
2
+ import { Identify } from '@matter/types/clusters/identify';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  export declare class MatterbridgeIdentifyServer extends IdentifyServer {
5
+ readonly endpoint: MatterbridgeEndpoint;
4
6
  identify(request: Identify.IdentifyRequest): Promise<void>;
5
7
  triggerEffect(request: Identify.TriggerEffectRequest): Promise<void>;
6
8
  }
@@ -1,4 +1,5 @@
1
1
  import { IdentifyServer } from '@matter/node/behaviors/identify';
2
+ import { Identify } from '@matter/types/clusters/identify';
2
3
  import { MatterbridgeServer } from './matterbridgeServer.js';
3
4
  export class MatterbridgeIdentifyServer extends IdentifyServer {
4
5
  async identify(request) {
@@ -14,6 +15,7 @@ export class MatterbridgeIdentifyServer extends IdentifyServer {
14
15
  });
15
16
  device.log.debug(`MatterbridgeIdentifyServer: identify called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
16
17
  await super.identify(request);
18
+ this.endpoint.emitCommand(Identify, 'identify', request, this.context);
17
19
  }
18
20
  async triggerEffect(request) {
19
21
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -28,5 +30,6 @@ export class MatterbridgeIdentifyServer extends IdentifyServer {
28
30
  });
29
31
  device.log.debug(`MatterbridgeIdentifyServer: triggerEffect called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
30
32
  await super.triggerEffect(request);
33
+ this.endpoint.emitCommand(Identify, 'triggerEffect', request, this.context);
31
34
  }
32
35
  }
@@ -1,5 +1,7 @@
1
1
  import { ModeSelectServer } from '@matter/node/behaviors/mode-select';
2
- import type { ModeSelect } from '@matter/types/clusters/mode-select';
2
+ import { ModeSelect } from '@matter/types/clusters/mode-select';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  export declare class MatterbridgeModeSelectServer extends ModeSelectServer {
5
+ readonly endpoint: MatterbridgeEndpoint;
4
6
  changeToMode(request: ModeSelect.ChangeToModeRequest): Promise<void>;
5
7
  }
@@ -1,4 +1,5 @@
1
1
  import { ModeSelectServer } from '@matter/node/behaviors/mode-select';
2
+ import { ModeSelect } from '@matter/types/clusters/mode-select';
2
3
  import { MatterbridgeServer } from './matterbridgeServer.js';
3
4
  export class MatterbridgeModeSelectServer extends ModeSelectServer {
4
5
  async changeToMode(request) {
@@ -14,5 +15,6 @@ export class MatterbridgeModeSelectServer extends ModeSelectServer {
14
15
  });
15
16
  device.log.debug(`MatterbridgeModeSelectServer: changeToMode called with mode ${request.newMode} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
16
17
  await super.changeToMode(request);
18
+ this.endpoint.emitCommand(ModeSelect, 'changeToMode', request, this.context);
17
19
  }
18
20
  }
@@ -1,6 +1,7 @@
1
1
  import type { MaybePromise } from '@matter/general';
2
2
  import { OccupancySensingServer } from '@matter/node/behaviors/occupancy-sensing';
3
3
  import { OccupancySensing } from '@matter/types/clusters/occupancy-sensing';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeOccupancySensingServer_base: import("@matter/node").ClusterBehavior.Type<typeof OccupancySensingServer, import("@matter/types").ClusterType.WithSupportedFeatures<OccupancySensing, {
5
6
  activeInfrared: false;
6
7
  occupancyEvent: false;
@@ -14,6 +15,7 @@ declare const MatterbridgeOccupancySensingServer_base: import("@matter/node").Cl
14
15
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "occupancySensing">;
15
16
  export declare class MatterbridgeOccupancySensingServer extends MatterbridgeOccupancySensingServer_base {
16
17
  #private;
18
+ readonly endpoint: MatterbridgeEndpoint;
17
19
  initialize(): MaybePromise;
18
20
  }
19
21
  export {};
@@ -1,8 +1,10 @@
1
1
  import type { MaybePromise } from '@matter/general';
2
2
  import { OperationalStateServer } from '@matter/node/behaviors/operational-state';
3
3
  import { OperationalState } from '@matter/types/clusters/operational-state';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeOperationalStateServerBase: import("@matter/node").ClusterBehavior.Type<typeof OperationalStateServer, import("@matter/types").ClusterType.WithEnabledAttributes<import("@matter/types").ClusterType.WithEnabledEvents<OperationalState, "operationCompletion">, never>, import("@matter/types").ClusterType.Concrete, new () => {}, "operationalState">;
5
6
  export declare class MatterbridgeOperationalStateServer extends MatterbridgeOperationalStateServerBase {
7
+ readonly endpoint: MatterbridgeEndpoint;
6
8
  protected internal: MatterbridgeOperationalStateServer.Internal;
7
9
  initialize(): MaybePromise;
8
10
  pause(): Promise<OperationalState.OperationalCommandResponse>;
@@ -38,6 +38,7 @@ export class MatterbridgeOperationalStateServer extends MatterbridgeOperationalS
38
38
  this.internal.pausedSinceMs = Date.now();
39
39
  this.state.operationalState = OperationalState.OperationalStateEnum.Paused;
40
40
  this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' };
41
+ this.endpoint.emitCommand(OperationalState, 'pause', {}, this.context);
41
42
  return {
42
43
  commandResponseState: { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' },
43
44
  };
@@ -71,6 +72,7 @@ export class MatterbridgeOperationalStateServer extends MatterbridgeOperationalS
71
72
  this.events.operationCompletion.emit({ completionErrorCode: OperationalState.ErrorState.NoError, totalOperationalTime, pausedTime }, this.context);
72
73
  this.state.operationalState = OperationalState.OperationalStateEnum.Stopped;
73
74
  this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' };
75
+ this.endpoint.emitCommand(OperationalState, 'stop', {}, this.context);
74
76
  return {
75
77
  commandResponseState: { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' },
76
78
  };
@@ -109,6 +111,7 @@ export class MatterbridgeOperationalStateServer extends MatterbridgeOperationalS
109
111
  }
110
112
  this.state.operationalState = OperationalState.OperationalStateEnum.Running;
111
113
  this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' };
114
+ this.endpoint.emitCommand(OperationalState, 'start', {}, this.context);
112
115
  return {
113
116
  commandResponseState: { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' },
114
117
  };
@@ -143,6 +146,7 @@ export class MatterbridgeOperationalStateServer extends MatterbridgeOperationalS
143
146
  }
144
147
  this.state.operationalState = this.internal.operationalStateBeforePause;
145
148
  this.state.operationalError = { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' };
149
+ this.endpoint.emitCommand(OperationalState, 'resume', {}, this.context);
146
150
  return {
147
151
  commandResponseState: { errorStateId: OperationalState.ErrorState.NoError, errorStateDetails: 'Fully operational' },
148
152
  };
@@ -1,4 +1,6 @@
1
1
  import { PowerSourceServer } from '@matter/node/behaviors/power-source';
2
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
2
3
  export declare class MatterbridgePowerSourceServer extends PowerSourceServer {
4
+ readonly endpoint: MatterbridgeEndpoint;
3
5
  initialize(): Promise<void>;
4
6
  }
@@ -1,6 +1,7 @@
1
1
  import type { MaybePromise } from '@matter/general';
2
2
  import { PumpConfigurationAndControlServer } from '@matter/node/behaviors/pump-configuration-and-control';
3
3
  import { PumpConfigurationAndControl } from '@matter/types/clusters/pump-configuration-and-control';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgePumpConfigurationAndControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof PumpConfigurationAndControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<PumpConfigurationAndControl, {
5
6
  automatic: false;
6
7
  compensatedPressure: false;
@@ -12,6 +13,7 @@ declare const MatterbridgePumpConfigurationAndControlServer_base: import("@matte
12
13
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "pumpConfigurationAndControl">;
13
14
  export declare class MatterbridgePumpConfigurationAndControlServer extends MatterbridgePumpConfigurationAndControlServer_base {
14
15
  #private;
16
+ readonly endpoint: MatterbridgeEndpoint;
15
17
  protected internal: MatterbridgePumpConfigurationAndControlServer.Internal;
16
18
  initialize(): MaybePromise;
17
19
  }
@@ -1,5 +1,7 @@
1
1
  import { ServiceAreaServer } from '@matter/node/behaviors/service-area';
2
- import type { ServiceArea } from '@matter/types/clusters/service-area';
2
+ import { ServiceArea } from '@matter/types/clusters/service-area';
3
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
4
  export declare class MatterbridgeServiceAreaServer extends ServiceAreaServer {
5
+ readonly endpoint: MatterbridgeEndpoint;
4
6
  selectAreas(request: ServiceArea.SelectAreasRequest): Promise<ServiceArea.SelectAreasResponse>;
5
7
  }
@@ -1,4 +1,5 @@
1
1
  import { ServiceAreaServer } from '@matter/node/behaviors/service-area';
2
+ import { ServiceArea } from '@matter/types/clusters/service-area';
2
3
  import { MatterbridgeServer } from './matterbridgeServer.js';
3
4
  export class MatterbridgeServiceAreaServer extends ServiceAreaServer {
4
5
  async selectAreas(request) {
@@ -13,6 +14,9 @@ export class MatterbridgeServiceAreaServer extends ServiceAreaServer {
13
14
  context: this.context,
14
15
  });
15
16
  device.log.debug(`MatterbridgeServiceAreaServer: selectAreas called with [${request.newAreas.join(', ')}] (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
16
- return await super.selectAreas(request);
17
+ const response = await super.selectAreas(request);
18
+ if (response.status === ServiceArea.SelectAreasStatus.Success)
19
+ this.endpoint.emitCommand(ServiceArea, 'selectAreas', request, this.context);
20
+ return response;
17
21
  }
18
22
  }
@@ -1,12 +1,14 @@
1
1
  import { type Timer } from '@matter/general';
2
2
  import { SmokeCoAlarmServer } from '@matter/node/behaviors/smoke-co-alarm';
3
3
  import { SmokeCoAlarm } from '@matter/types/clusters/smoke-co-alarm';
4
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
5
  declare const MatterbridgeSmokeCoAlarmServer_base: import("@matter/node").ClusterBehavior.Type<typeof SmokeCoAlarmServer, import("@matter/types").ClusterType.WithSupportedFeatures<SmokeCoAlarm, {
5
6
  coAlarm: true;
6
7
  smokeAlarm: true;
7
8
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "smokeCoAlarm">;
8
9
  export declare class MatterbridgeSmokeCoAlarmServer extends MatterbridgeSmokeCoAlarmServer_base {
9
10
  #private;
11
+ readonly endpoint: MatterbridgeEndpoint;
10
12
  protected internal: MatterbridgeSmokeCoAlarmServer.Internal;
11
13
  static selfTestDurationSeconds: number;
12
14
  selfTestRequest(): Promise<void>;
@@ -17,12 +17,13 @@ export class MatterbridgeSmokeCoAlarmServer extends SmokeCoAlarmServer.with(Smok
17
17
  context: this.context,
18
18
  });
19
19
  if (this.state.expressedState !== SmokeCoAlarm.ExpressedState.Normal || this.state.testInProgress) {
20
- throw new StatusResponseError(`MatterbridgeSmokeCoAlarmServer: SmokeCOAlarm self-test is busy (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`, Status.Busy);
20
+ throw new StatusResponseError(`MatterbridgeSmokeCoAlarmServer: self-test is busy (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`, Status.Busy);
21
21
  }
22
22
  this.state.testInProgress = true;
23
23
  this.state.expressedState = SmokeCoAlarm.ExpressedState.Testing;
24
24
  this.#scheduleSelfTestComplete();
25
25
  device.log.debug(`MatterbridgeSmokeCoAlarmServer: selfTestRequest called (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
26
+ this.endpoint.emitCommand(SmokeCoAlarm, 'selfTestRequest', {}, this.context);
26
27
  }
27
28
  #stopSelfTestTimer() {
28
29
  this.internal.selfTestTimer?.stop();
@@ -1,4 +1,6 @@
1
1
  import { SwitchServer } from '@matter/node/behaviors/switch';
2
+ import type { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
2
3
  export declare class MatterbridgeSwitchServer extends SwitchServer {
4
+ readonly endpoint: MatterbridgeEndpoint;
3
5
  initialize(): void;
4
6
  }