@matterbridge/core 3.7.1-dev-20260324-7b86640 → 3.7.1-dev-20260325-72b7b24
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/helpers.js +11 -8
- package/dist/matterbridge.js +5 -5
- package/dist/matterbridgeBehaviorsServer.d.ts +9 -3
- package/dist/matterbridgeBehaviorsServer.js +64 -9
- package/dist/matterbridgeEndpoint.d.ts +1 -0
- package/dist/matterbridgeEndpoint.js +21 -1
- package/dist/matterbridgeEndpointCommandHandler.d.ts +90 -0
- package/package.json +5 -5
package/dist/helpers.js
CHANGED
|
@@ -13,6 +13,8 @@ import { Identify } from '@matter/types/clusters/identify';
|
|
|
13
13
|
import { OnOff } from '@matter/types/clusters/on-off';
|
|
14
14
|
import { VendorId } from '@matter/types/datatype';
|
|
15
15
|
import { hasParameter } from '@matterbridge/utils/cli';
|
|
16
|
+
import { doorLockDevice } from './matterbridgeDeviceTypes.js';
|
|
17
|
+
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
16
18
|
export async function addVirtualDevice(aggregatorEndpoint, name, type, callback) {
|
|
17
19
|
let deviceType;
|
|
18
20
|
switch (type) {
|
|
@@ -36,7 +38,7 @@ export async function addVirtualDevice(aggregatorEndpoint, name, type, callback)
|
|
|
36
38
|
vendorName: 'Matterbridge',
|
|
37
39
|
productName: 'Matterbridge Virtual Device',
|
|
38
40
|
nodeLabel: name.slice(0, 32),
|
|
39
|
-
softwareVersion:
|
|
41
|
+
softwareVersion: 20000,
|
|
40
42
|
softwareVersionString: '2.0.0',
|
|
41
43
|
},
|
|
42
44
|
onOff: { onOff: false },
|
|
@@ -71,6 +73,13 @@ export async function addVirtualDevice(aggregatorEndpoint, name, type, callback)
|
|
|
71
73
|
return device;
|
|
72
74
|
}
|
|
73
75
|
export async function addVirtualDevices(matterbridge, aggregatorEndpoint) {
|
|
76
|
+
if (hasParameter('experimental') && matterbridge.bridgeMode === 'bridge' && aggregatorEndpoint) {
|
|
77
|
+
const lock = new MatterbridgeEndpoint(doorLockDevice, { id: 'system_lock' });
|
|
78
|
+
lock.createDefaultBridgedDeviceBasicInformationClusterServer('Matterbridge System Lock', 'sn_system_lock', 0xfff1, 'Matterbridge', 'Matterbridge Virtual Device', 20000, '2.0.0');
|
|
79
|
+
lock.createPinDoorLockClusterServer();
|
|
80
|
+
lock.addRequiredClusterServers();
|
|
81
|
+
await aggregatorEndpoint.add(lock);
|
|
82
|
+
}
|
|
74
83
|
if (matterbridge.virtualMode !== 'disabled' && matterbridge.bridgeMode === 'bridge' && aggregatorEndpoint) {
|
|
75
84
|
matterbridge.log.notice(`Creating virtual devices for Matterbridge server node...`);
|
|
76
85
|
await addVirtualDevice(aggregatorEndpoint, 'Restart Matterbridge', matterbridge.virtualMode, async () => {
|
|
@@ -80,13 +89,7 @@ export async function addVirtualDevices(matterbridge, aggregatorEndpoint) {
|
|
|
80
89
|
await matterbridge.shutdownProcess();
|
|
81
90
|
});
|
|
82
91
|
await addVirtualDevice(aggregatorEndpoint, 'Update Matterbridge', matterbridge.virtualMode, async () => {
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
await matterbridge.updateProcess();
|
|
87
|
-
}
|
|
92
|
+
await matterbridge.updateProcess();
|
|
88
93
|
});
|
|
89
|
-
if (hasParameter('shelly')) {
|
|
90
|
-
}
|
|
91
94
|
}
|
|
92
95
|
}
|
package/dist/matterbridge.js
CHANGED
|
@@ -85,7 +85,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
85
85
|
logName: 'Matter',
|
|
86
86
|
logNameColor: '\x1b[34m',
|
|
87
87
|
logTimestampFormat: 4,
|
|
88
|
-
logLevel:
|
|
88
|
+
logLevel: "debug",
|
|
89
89
|
});
|
|
90
90
|
matterLogLevel = this.matterLog.logLevel;
|
|
91
91
|
matterFileLogger = false;
|
|
@@ -338,7 +338,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
338
338
|
await createDirectory(this.matterbridgeCertDirectory, 'Matterbridge Matter Certificate Directory', this.log);
|
|
339
339
|
const currentFileDirectory = path.dirname(fileURLToPath(import.meta.url));
|
|
340
340
|
this.rootDirectory = currentFileDirectory.includes(path.join('packages', 'core')) ? path.resolve(currentFileDirectory, '../', '../', '../') : path.resolve(currentFileDirectory, '../', '../', '..', '../');
|
|
341
|
-
this.environment.vars.set('log.level', MatterLogLevel.
|
|
341
|
+
this.environment.vars.set('log.level', MatterLogLevel.DEBUG);
|
|
342
342
|
this.environment.vars.set('log.format', hasParameter('no-ansi') || process.env.NO_COLOR === '1' ? MatterLogFormat.PLAIN : MatterLogFormat.ANSI);
|
|
343
343
|
this.environment.vars.set('path.root', path.join(this.matterbridgeDirectory, MATTER_STORAGE_NAME));
|
|
344
344
|
this.environment.vars.set('runtime.signals', false);
|
|
@@ -468,7 +468,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
468
468
|
}
|
|
469
469
|
}
|
|
470
470
|
else {
|
|
471
|
-
this.log.logLevel = await this.nodeContext.get('matterbridgeLogLevel',
|
|
471
|
+
this.log.logLevel = await this.nodeContext.get('matterbridgeLogLevel', "info");
|
|
472
472
|
}
|
|
473
473
|
this.logLevel = this.log.logLevel;
|
|
474
474
|
this.frontend.logLevel = this.log.logLevel;
|
|
@@ -508,9 +508,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
508
508
|
}
|
|
509
509
|
}
|
|
510
510
|
else {
|
|
511
|
-
Logger.level = (await this.nodeContext.get('matterLogLevel',
|
|
511
|
+
Logger.level = (await this.nodeContext.get('matterLogLevel', MatterLogLevel.INFO));
|
|
512
512
|
}
|
|
513
|
-
Logger.format = MatterLogFormat.ANSI;
|
|
513
|
+
Logger.format = hasParameter('no-ansi') || process.env.NO_COLOR === '1' ? MatterLogFormat.PLAIN : MatterLogFormat.ANSI;
|
|
514
514
|
this.matterLogLevel = MatterLogLevel.names[Logger.level];
|
|
515
515
|
if (hasParameter('matterfilelogger') || (await this.nodeContext.get('matterFileLog', false))) {
|
|
516
516
|
this.matterFileLogger = true;
|
|
@@ -24,6 +24,7 @@ import { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activate
|
|
|
24
24
|
import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
|
|
25
25
|
import { ColorControl } from '@matter/types/clusters/color-control';
|
|
26
26
|
import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
|
|
27
|
+
import { DoorLock } from '@matter/types/clusters/door-lock';
|
|
27
28
|
import { FanControl } from '@matter/types/clusters/fan-control';
|
|
28
29
|
import { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
|
|
29
30
|
import { Identify } from '@matter/types/clusters/identify';
|
|
@@ -1430,9 +1431,14 @@ declare const MatterbridgeLiftTiltWindowCoveringServer_base: import("@matter/nod
|
|
|
1430
1431
|
}>, readonly [WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt]>, readonly [WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt]>, typeof MatterbridgeWindowCoveringServer, import("@matter/node/behaviors/window-covering").WindowCoveringInterface>;
|
|
1431
1432
|
export declare class MatterbridgeLiftTiltWindowCoveringServer extends MatterbridgeLiftTiltWindowCoveringServer_base {
|
|
1432
1433
|
}
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1434
|
+
declare const MatterbridgeDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<DoorLock.Cluster, readonly [DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess]>, typeof DoorLockServer, import("@matter/node/behaviors/door-lock").DoorLockInterface>;
|
|
1435
|
+
export declare class MatterbridgeDoorLockServer extends MatterbridgeDoorLockServer_base {
|
|
1436
|
+
lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
|
|
1437
|
+
unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
|
|
1438
|
+
setPinCode(request: DoorLock.SetPinCodeRequest): Promise<void>;
|
|
1439
|
+
getPinCode(request: DoorLock.GetPinCodeRequest): Promise<DoorLock.GetPinCodeResponse>;
|
|
1440
|
+
clearPinCode(request: DoorLock.ClearPinCodeRequest): Promise<void>;
|
|
1441
|
+
clearAllPinCodes(): Promise<void>;
|
|
1436
1442
|
}
|
|
1437
1443
|
declare const MatterbridgeFanControlServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<FanControl.Cluster, readonly [FanControl.Feature.Auto, FanControl.Feature.Step]>, typeof FanControlServer, import("@matter/node/behaviors/fan-control").FanControlInterface>;
|
|
1438
1444
|
export declare class MatterbridgeFanControlServer extends MatterbridgeFanControlServer_base {
|
|
@@ -23,6 +23,7 @@ import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-
|
|
|
23
23
|
import { ColorControl } from '@matter/types/clusters/color-control';
|
|
24
24
|
import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
|
|
25
25
|
import { DeviceEnergyManagementMode } from '@matter/types/clusters/device-energy-management-mode';
|
|
26
|
+
import { DoorLock } from '@matter/types/clusters/door-lock';
|
|
26
27
|
import { FanControl } from '@matter/types/clusters/fan-control';
|
|
27
28
|
import { ModeBase } from '@matter/types/clusters/mode-base';
|
|
28
29
|
import { OperationalState } from '@matter/types/clusters/operational-state';
|
|
@@ -31,6 +32,7 @@ import { SmokeCoAlarm } from '@matter/types/clusters/smoke-co-alarm';
|
|
|
31
32
|
import { Thermostat } from '@matter/types/clusters/thermostat';
|
|
32
33
|
import { ValveConfigurationAndControl } from '@matter/types/clusters/valve-configuration-and-control';
|
|
33
34
|
import { WindowCovering } from '@matter/types/clusters/window-covering';
|
|
35
|
+
import { getEnumDescription } from '@matterbridge/utils';
|
|
34
36
|
export class MatterbridgeServer extends Behavior {
|
|
35
37
|
static id = 'matterbridge';
|
|
36
38
|
initialize() {
|
|
@@ -341,32 +343,85 @@ export class MatterbridgeLiftWindowCoveringServer extends MatterbridgeWindowCove
|
|
|
341
343
|
}
|
|
342
344
|
export class MatterbridgeLiftTiltWindowCoveringServer extends MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt) {
|
|
343
345
|
}
|
|
344
|
-
export class MatterbridgeDoorLockServer extends DoorLockServer {
|
|
345
|
-
async lockDoor() {
|
|
346
|
+
export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess) {
|
|
347
|
+
async lockDoor(request) {
|
|
346
348
|
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
347
|
-
device.log.info(`Locking door (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
349
|
+
device.log.info(`Locking door with pincode ${request.pinCode ? '0x' + Buffer.from(request.pinCode).toString('hex') : 'N/A'} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
348
350
|
await device.commandHandler.executeHandler('DoorLock.lockDoor', {
|
|
349
351
|
command: 'lockDoor',
|
|
350
|
-
request
|
|
352
|
+
request,
|
|
351
353
|
cluster: DoorLockServer.id,
|
|
352
354
|
attributes: this.state,
|
|
353
355
|
endpoint: this.endpoint,
|
|
354
356
|
});
|
|
355
357
|
device.log.debug(`MatterbridgeDoorLockServer: lockDoor called`);
|
|
356
|
-
await super.lockDoor();
|
|
358
|
+
await super.lockDoor(request);
|
|
357
359
|
}
|
|
358
|
-
async unlockDoor() {
|
|
360
|
+
async unlockDoor(request) {
|
|
359
361
|
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
360
|
-
device.log.info(`Unlocking door (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
362
|
+
device.log.info(`Unlocking door with pincode ${request.pinCode ? '0x' + Buffer.from(request.pinCode).toString('hex') : 'N/A'} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
361
363
|
await device.commandHandler.executeHandler('DoorLock.unlockDoor', {
|
|
362
364
|
command: 'unlockDoor',
|
|
363
|
-
request
|
|
365
|
+
request,
|
|
364
366
|
cluster: DoorLockServer.id,
|
|
365
367
|
attributes: this.state,
|
|
366
368
|
endpoint: this.endpoint,
|
|
367
369
|
});
|
|
368
370
|
device.log.debug(`MatterbridgeDoorLockServer: unlockDoor called`);
|
|
369
|
-
await super.unlockDoor();
|
|
371
|
+
await super.unlockDoor(request);
|
|
372
|
+
}
|
|
373
|
+
async setPinCode(request) {
|
|
374
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
375
|
+
device.log.info(`Setting pin code ${request.pin ? '0x' + Buffer.from(request.pin).toString('hex') : 'N/A'} for user ${request.userId} type ${getEnumDescription(DoorLock.UserType, request.userType)} status ${getEnumDescription(DoorLock.UserStatus, request.userStatus)} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
376
|
+
await device.commandHandler.executeHandler('DoorLock.setPinCode', {
|
|
377
|
+
command: 'setPinCode',
|
|
378
|
+
request,
|
|
379
|
+
cluster: DoorLockServer.id,
|
|
380
|
+
attributes: this.state,
|
|
381
|
+
endpoint: this.endpoint,
|
|
382
|
+
});
|
|
383
|
+
device.log.debug(`MatterbridgeDoorLockServer: setPinCode called for user ${request.userId}`);
|
|
384
|
+
}
|
|
385
|
+
async getPinCode(request) {
|
|
386
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
387
|
+
device.log.info(`Getting pin code for user ${request.userId} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
388
|
+
await device.commandHandler.executeHandler('DoorLock.getPinCode', {
|
|
389
|
+
command: 'getPinCode',
|
|
390
|
+
request,
|
|
391
|
+
cluster: DoorLockServer.id,
|
|
392
|
+
attributes: this.state,
|
|
393
|
+
endpoint: this.endpoint,
|
|
394
|
+
});
|
|
395
|
+
return {
|
|
396
|
+
userId: request.userId,
|
|
397
|
+
userStatus: DoorLock.UserStatus.Available,
|
|
398
|
+
userType: DoorLock.UserType.UnrestrictedUser,
|
|
399
|
+
pinCode: Buffer.from('1234'),
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
async clearPinCode(request) {
|
|
403
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
404
|
+
device.log.info(`Clearing pin code for ${request.pinSlotIndex === 0xfffe ? 'all slots' : 'slot ' + request.pinSlotIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
405
|
+
await device.commandHandler.executeHandler('DoorLock.clearPinCode', {
|
|
406
|
+
command: 'clearPinCode',
|
|
407
|
+
request,
|
|
408
|
+
cluster: DoorLockServer.id,
|
|
409
|
+
attributes: this.state,
|
|
410
|
+
endpoint: this.endpoint,
|
|
411
|
+
});
|
|
412
|
+
device.log.debug(`MatterbridgeDoorLockServer: clearPinCode called for ${request.pinSlotIndex === 0xfffe ? 'all PIN slots' : 'PIN slot ' + request.pinSlotIndex}`);
|
|
413
|
+
}
|
|
414
|
+
async clearAllPinCodes() {
|
|
415
|
+
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
416
|
+
device.log.info(`Clearing all pin codes (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
417
|
+
await device.commandHandler.executeHandler('DoorLock.clearAllPinCodes', {
|
|
418
|
+
command: 'clearAllPinCodes',
|
|
419
|
+
request: {},
|
|
420
|
+
cluster: DoorLockServer.id,
|
|
421
|
+
attributes: this.state,
|
|
422
|
+
endpoint: this.endpoint,
|
|
423
|
+
});
|
|
424
|
+
device.log.debug('MatterbridgeDoorLockServer: clearAllPinCodes called');
|
|
370
425
|
}
|
|
371
426
|
}
|
|
372
427
|
export class MatterbridgeFanControlServer extends FanControlServer.with(FanControl.Feature.Auto, FanControl.Feature.Step) {
|
|
@@ -172,6 +172,7 @@ export declare class MatterbridgeEndpoint extends Endpoint {
|
|
|
172
172
|
createDefaultHepaFilterMonitoringClusterServer(condition?: number, changeIndication?: ResourceMonitoring.ChangeIndication, inPlaceIndicator?: boolean | undefined, lastChangedTime?: number | null | undefined, replacementProductList?: ResourceMonitoring.ReplacementProduct[]): this;
|
|
173
173
|
createDefaultActivatedCarbonFilterMonitoringClusterServer(condition?: number, changeIndication?: ResourceMonitoring.ChangeIndication, inPlaceIndicator?: boolean | undefined, lastChangedTime?: number | null | undefined, replacementProductList?: ResourceMonitoring.ReplacementProduct[]): this;
|
|
174
174
|
createDefaultDoorLockClusterServer(lockState?: DoorLock.LockState, lockType?: DoorLock.LockType): this;
|
|
175
|
+
createPinDoorLockClusterServer(lockState?: DoorLock.LockState, lockType?: DoorLock.LockType): this;
|
|
175
176
|
createDefaultModeSelectClusterServer(description: string, supportedModes: ModeSelect.ModeOption[], currentMode?: number, startUpMode?: number): this;
|
|
176
177
|
createDefaultValveConfigurationAndControlClusterServer(valveState?: ValveConfigurationAndControl.ValveState, valveLevel?: number): this;
|
|
177
178
|
createDefaultPumpConfigurationAndControlClusterServer(pumpMode?: PumpConfigurationAndControl.OperationMode): this;
|
|
@@ -1048,7 +1048,7 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1048
1048
|
return this;
|
|
1049
1049
|
}
|
|
1050
1050
|
createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
|
|
1051
|
-
this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
|
|
1051
|
+
this.behaviors.require(MatterbridgeDoorLockServer.with().enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
|
|
1052
1052
|
lockState,
|
|
1053
1053
|
lockType,
|
|
1054
1054
|
actuatorEnabled: true,
|
|
@@ -1058,6 +1058,26 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
1058
1058
|
});
|
|
1059
1059
|
return this;
|
|
1060
1060
|
}
|
|
1061
|
+
createPinDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
|
|
1062
|
+
this.behaviors.require(MatterbridgeDoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess).enable({
|
|
1063
|
+
events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
|
|
1064
|
+
}), {
|
|
1065
|
+
lockState,
|
|
1066
|
+
lockType,
|
|
1067
|
+
actuatorEnabled: true,
|
|
1068
|
+
operatingMode: DoorLock.OperatingMode.Normal,
|
|
1069
|
+
supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: false, passage: true, alwaysSet: 2047 },
|
|
1070
|
+
autoRelockTime: 0,
|
|
1071
|
+
numberOfPinUsersSupported: 10,
|
|
1072
|
+
minPinCodeLength: 4,
|
|
1073
|
+
maxPinCodeLength: 10,
|
|
1074
|
+
sendPinOverTheAir: true,
|
|
1075
|
+
requirePinForRemoteOperation: true,
|
|
1076
|
+
wrongCodeEntryLimit: 5,
|
|
1077
|
+
userCodeTemporaryDisableTime: 60,
|
|
1078
|
+
});
|
|
1079
|
+
return this;
|
|
1080
|
+
}
|
|
1061
1081
|
createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
|
|
1062
1082
|
this.behaviors.require(MatterbridgeModeSelectServer, {
|
|
1063
1083
|
description: description,
|
|
@@ -71,6 +71,16 @@ export interface MatterbridgeEndpointCommands {
|
|
|
71
71
|
setTarget: HandlerFunction;
|
|
72
72
|
lockDoor: HandlerFunction;
|
|
73
73
|
unlockDoor: HandlerFunction;
|
|
74
|
+
setPinCode: HandlerFunction;
|
|
75
|
+
getPinCode: HandlerFunction;
|
|
76
|
+
clearPinCode: HandlerFunction;
|
|
77
|
+
clearAllPinCodes: HandlerFunction;
|
|
78
|
+
setUser: HandlerFunction;
|
|
79
|
+
getUser: HandlerFunction;
|
|
80
|
+
clearUser: HandlerFunction;
|
|
81
|
+
setCredential: HandlerFunction;
|
|
82
|
+
getCredentialStatus: HandlerFunction;
|
|
83
|
+
clearCredential: HandlerFunction;
|
|
74
84
|
setpointRaiseLower: HandlerFunction;
|
|
75
85
|
setActivePresetRequest: HandlerFunction;
|
|
76
86
|
step: HandlerFunction;
|
|
@@ -383,6 +393,16 @@ export type CommandHandlerDataMap = {
|
|
|
383
393
|
};
|
|
384
394
|
'lockDoor': CommandHandlerData<'DoorLock.lockDoor'>;
|
|
385
395
|
'unlockDoor': CommandHandlerData<'DoorLock.unlockDoor'>;
|
|
396
|
+
'setPinCode': CommandHandlerData<'DoorLock.setPinCode'>;
|
|
397
|
+
'getPinCode': CommandHandlerData<'DoorLock.getPinCode'>;
|
|
398
|
+
'clearPinCode': CommandHandlerData<'DoorLock.clearPinCode'>;
|
|
399
|
+
'clearAllPinCodes': CommandHandlerData<'DoorLock.clearAllPinCodes'>;
|
|
400
|
+
'setUser': CommandHandlerData<'DoorLock.setUser'>;
|
|
401
|
+
'getUser': CommandHandlerData<'DoorLock.getUser'>;
|
|
402
|
+
'clearUser': CommandHandlerData<'DoorLock.clearUser'>;
|
|
403
|
+
'setCredential': CommandHandlerData<'DoorLock.setCredential'>;
|
|
404
|
+
'getCredentialStatus': CommandHandlerData<'DoorLock.getCredentialStatus'>;
|
|
405
|
+
'clearCredential': CommandHandlerData<'DoorLock.clearCredential'>;
|
|
386
406
|
'DoorLock.lockDoor': {
|
|
387
407
|
command: 'lockDoor';
|
|
388
408
|
request: DoorLock.LockDoorRequest;
|
|
@@ -397,6 +417,76 @@ export type CommandHandlerDataMap = {
|
|
|
397
417
|
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
398
418
|
endpoint: MatterbridgeEndpoint;
|
|
399
419
|
};
|
|
420
|
+
'DoorLock.setPinCode': {
|
|
421
|
+
command: 'setPinCode';
|
|
422
|
+
request: DoorLock.SetPinCodeRequest;
|
|
423
|
+
cluster: 'doorLock';
|
|
424
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
425
|
+
endpoint: MatterbridgeEndpoint;
|
|
426
|
+
};
|
|
427
|
+
'DoorLock.getPinCode': {
|
|
428
|
+
command: 'getPinCode';
|
|
429
|
+
request: DoorLock.GetPinCodeRequest;
|
|
430
|
+
cluster: 'doorLock';
|
|
431
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
432
|
+
endpoint: MatterbridgeEndpoint;
|
|
433
|
+
};
|
|
434
|
+
'DoorLock.clearPinCode': {
|
|
435
|
+
command: 'clearPinCode';
|
|
436
|
+
request: DoorLock.ClearPinCodeRequest;
|
|
437
|
+
cluster: 'doorLock';
|
|
438
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
439
|
+
endpoint: MatterbridgeEndpoint;
|
|
440
|
+
};
|
|
441
|
+
'DoorLock.clearAllPinCodes': {
|
|
442
|
+
command: 'clearAllPinCodes';
|
|
443
|
+
request: {};
|
|
444
|
+
cluster: 'doorLock';
|
|
445
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
446
|
+
endpoint: MatterbridgeEndpoint;
|
|
447
|
+
};
|
|
448
|
+
'DoorLock.setUser': {
|
|
449
|
+
command: 'setUser';
|
|
450
|
+
request: DoorLock.SetUserRequest;
|
|
451
|
+
cluster: 'doorLock';
|
|
452
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
453
|
+
endpoint: MatterbridgeEndpoint;
|
|
454
|
+
};
|
|
455
|
+
'DoorLock.getUser': {
|
|
456
|
+
command: 'getUser';
|
|
457
|
+
request: DoorLock.GetUserRequest;
|
|
458
|
+
cluster: 'doorLock';
|
|
459
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
460
|
+
endpoint: MatterbridgeEndpoint;
|
|
461
|
+
};
|
|
462
|
+
'DoorLock.clearUser': {
|
|
463
|
+
command: 'clearUser';
|
|
464
|
+
request: DoorLock.ClearUserRequest;
|
|
465
|
+
cluster: 'doorLock';
|
|
466
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
467
|
+
endpoint: MatterbridgeEndpoint;
|
|
468
|
+
};
|
|
469
|
+
'DoorLock.setCredential': {
|
|
470
|
+
command: 'setCredential';
|
|
471
|
+
request: DoorLock.SetCredentialRequest;
|
|
472
|
+
cluster: 'doorLock';
|
|
473
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
474
|
+
endpoint: MatterbridgeEndpoint;
|
|
475
|
+
};
|
|
476
|
+
'DoorLock.getCredentialStatus': {
|
|
477
|
+
command: 'getCredentialStatus';
|
|
478
|
+
request: DoorLock.GetCredentialStatusRequest;
|
|
479
|
+
cluster: 'doorLock';
|
|
480
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
481
|
+
endpoint: MatterbridgeEndpoint;
|
|
482
|
+
};
|
|
483
|
+
'DoorLock.clearCredential': {
|
|
484
|
+
command: 'clearCredential';
|
|
485
|
+
request: DoorLock.ClearCredentialRequest;
|
|
486
|
+
cluster: 'doorLock';
|
|
487
|
+
attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
|
|
488
|
+
endpoint: MatterbridgeEndpoint;
|
|
489
|
+
};
|
|
400
490
|
'setpointRaiseLower': CommandHandlerData<'Thermostat.setpointRaiseLower'>;
|
|
401
491
|
'setActivePresetRequest': CommandHandlerData<'Thermostat.setActivePresetRequest'>;
|
|
402
492
|
'Thermostat.setpointRaiseLower': {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matterbridge/core",
|
|
3
|
-
"version": "3.7.1-dev-
|
|
3
|
+
"version": "3.7.1-dev-20260325-72b7b24",
|
|
4
4
|
"description": "Matterbridge core library",
|
|
5
5
|
"author": "https://github.com/Luligu",
|
|
6
6
|
"homepage": "https://matterbridge.io/",
|
|
@@ -122,10 +122,10 @@
|
|
|
122
122
|
],
|
|
123
123
|
"dependencies": {
|
|
124
124
|
"@matter/main": "0.16.10",
|
|
125
|
-
"@matterbridge/dgram": "3.7.1-dev-
|
|
126
|
-
"@matterbridge/thread": "3.7.1-dev-
|
|
127
|
-
"@matterbridge/types": "3.7.1-dev-
|
|
128
|
-
"@matterbridge/utils": "3.7.1-dev-
|
|
125
|
+
"@matterbridge/dgram": "3.7.1-dev-20260325-72b7b24",
|
|
126
|
+
"@matterbridge/thread": "3.7.1-dev-20260325-72b7b24",
|
|
127
|
+
"@matterbridge/types": "3.7.1-dev-20260325-72b7b24",
|
|
128
|
+
"@matterbridge/utils": "3.7.1-dev-20260325-72b7b24",
|
|
129
129
|
"express": "5.2.1",
|
|
130
130
|
"multer": "2.1.1",
|
|
131
131
|
"node-ansi-logger": "3.2.0",
|