@matterbridge/core 3.10.6-dev-20260817-a8ee796 → 3.10.6-dev-20260818-c2c6349
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/behaviors/deviceEnergyManagementServer.d.ts +12 -0
- package/dist/behaviors/deviceEnergyManagementServer.js +81 -2
- package/dist/chipTestDevices.d.ts +2 -0
- package/dist/chipTestDevices.js +187 -0
- package/dist/{chipTest.d.ts → chipTests.d.ts} +1 -1
- package/dist/chipTests.js +557 -0
- package/dist/devices/irrigationSystem.d.ts +4 -1
- package/dist/devices/irrigationSystem.js +5 -3
- package/dist/frontend.js +39 -6
- package/dist/helpers.js +1 -7
- package/dist/matterbridge.js +9 -1
- package/package.json +5 -5
- package/dist/chipTest.js +0 -506
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Timer } from '@matter/general';
|
|
1
2
|
import { DeviceEnergyManagementServer } from '@matter/node/behaviors/device-energy-management';
|
|
2
3
|
import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
|
|
3
4
|
declare const MatterbridgeDeviceEnergyManagementServer_base: import("@matter/node").ClusterBehavior.Type<typeof DeviceEnergyManagementServer, import("@matter/types").ClusterType.WithSupportedFeatures<DeviceEnergyManagement, {
|
|
@@ -10,7 +11,18 @@ declare const MatterbridgeDeviceEnergyManagementServer_base: import("@matter/nod
|
|
|
10
11
|
stateForecastReporting: false;
|
|
11
12
|
}>, import("@matter/types").ClusterType.Concrete, new () => {}, "deviceEnergyManagement">;
|
|
12
13
|
export declare class MatterbridgeDeviceEnergyManagementServer extends MatterbridgeDeviceEnergyManagementServer_base {
|
|
14
|
+
#private;
|
|
15
|
+
protected internal: MatterbridgeDeviceEnergyManagementServer.Internal;
|
|
16
|
+
initialize(): Promise<void>;
|
|
13
17
|
powerAdjustRequest(request: DeviceEnergyManagement.PowerAdjustRequest): Promise<void>;
|
|
14
18
|
cancelPowerAdjustRequest(): Promise<void>;
|
|
15
19
|
}
|
|
20
|
+
export declare namespace MatterbridgeDeviceEnergyManagementServer {
|
|
21
|
+
class Internal {
|
|
22
|
+
powerAdjustActivationTimeMs: number | undefined;
|
|
23
|
+
powerAdjustPowerMw: number | undefined;
|
|
24
|
+
powerAdjustCompletionTimer: Timer | undefined;
|
|
25
|
+
powerAdjustCompletionCallback: (() => void) | undefined;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
16
28
|
export {};
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { Seconds, Time } from '@matter/general';
|
|
1
2
|
import { DeviceEnergyManagementServer } from '@matter/node/behaviors/device-energy-management';
|
|
3
|
+
import { Status, StatusResponseError } from '@matter/types';
|
|
2
4
|
import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
|
|
3
5
|
import { MatterbridgeServer } from './matterbridgeServer.js';
|
|
4
6
|
export class MatterbridgeDeviceEnergyManagementServer extends DeviceEnergyManagementServer.with(DeviceEnergyManagement.Feature.PowerForecastReporting, DeviceEnergyManagement.Feature.PowerAdjustment) {
|
|
7
|
+
async initialize() {
|
|
8
|
+
await super.initialize();
|
|
9
|
+
this.internal.powerAdjustCompletionCallback = this.callback(this.#completePowerAdjustmentOnTimeout, { lock: true });
|
|
10
|
+
this.reactTo(this.events.optOutState$Changed, this.#handleOptOutStateChanged);
|
|
11
|
+
}
|
|
5
12
|
async powerAdjustRequest(request) {
|
|
13
|
+
const { power, duration, cause } = request;
|
|
6
14
|
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
7
|
-
device.log.info(`Adjusting power to ${
|
|
15
|
+
device.log.info(`Adjusting power to ${power} duration ${duration} cause ${cause} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
|
|
8
16
|
await device.commandHandler.executeHandler('DeviceEnergyManagement.powerAdjustRequest', {
|
|
9
17
|
command: 'powerAdjustRequest',
|
|
10
18
|
request,
|
|
@@ -13,7 +21,37 @@ export class MatterbridgeDeviceEnergyManagementServer extends DeviceEnergyManage
|
|
|
13
21
|
endpoint: this.endpoint,
|
|
14
22
|
context: this.context,
|
|
15
23
|
});
|
|
16
|
-
device.log.debug(`MatterbridgeDeviceEnergyManagementServer powerAdjustRequest called with power ${
|
|
24
|
+
device.log.debug(`MatterbridgeDeviceEnergyManagementServer powerAdjustRequest called with power ${power} duration ${duration} cause ${cause}`);
|
|
25
|
+
const entries = (this.state.powerAdjustmentCapability?.powerAdjustCapability ?? []);
|
|
26
|
+
if (entries.length === 0) {
|
|
27
|
+
throw new StatusResponseError('No power adjustment capability available', Status.ConstraintError);
|
|
28
|
+
}
|
|
29
|
+
const minPower = Math.min(...entries.map((entry) => entry.minPower));
|
|
30
|
+
const maxPower = Math.max(...entries.map((entry) => entry.maxPower));
|
|
31
|
+
const minDuration = Math.min(...entries.map((entry) => entry.minDuration));
|
|
32
|
+
const maxDuration = Math.max(...entries.map((entry) => entry.maxDuration));
|
|
33
|
+
if (power < minPower || power > maxPower || duration < minDuration || duration > maxDuration) {
|
|
34
|
+
throw new StatusResponseError('Power or duration out of range', Status.ConstraintError);
|
|
35
|
+
}
|
|
36
|
+
const optOutBit = cause === DeviceEnergyManagement.AdjustmentCause.LocalOptimization ? DeviceEnergyManagement.OptOutState.LocalOptOut : DeviceEnergyManagement.OptOutState.GridOptOut;
|
|
37
|
+
if ((this.state.optOutState & optOutBit) !== 0) {
|
|
38
|
+
throw new StatusResponseError('User has opted out of this adjustment cause', Status.ConstraintError);
|
|
39
|
+
}
|
|
40
|
+
const wasActive = this.state.esaState === DeviceEnergyManagement.EsaState.PowerAdjustActive;
|
|
41
|
+
const adjustReason = cause === DeviceEnergyManagement.AdjustmentCause.LocalOptimization
|
|
42
|
+
? DeviceEnergyManagement.PowerAdjustReason.LocalOptimizationAdjustment
|
|
43
|
+
: DeviceEnergyManagement.PowerAdjustReason.GridOptimizationAdjustment;
|
|
44
|
+
this.internal.powerAdjustCompletionTimer?.stop();
|
|
45
|
+
this.internal.powerAdjustPowerMw = Number(power);
|
|
46
|
+
this.state.esaState = DeviceEnergyManagement.EsaState.PowerAdjustActive;
|
|
47
|
+
this.state.powerAdjustmentCapability = { powerAdjustCapability: entries, cause: adjustReason };
|
|
48
|
+
if (!wasActive) {
|
|
49
|
+
this.internal.powerAdjustActivationTimeMs = Time.nowMs;
|
|
50
|
+
this.events.powerAdjustStart.emit(undefined, this.context);
|
|
51
|
+
}
|
|
52
|
+
if (this.internal.powerAdjustCompletionCallback) {
|
|
53
|
+
this.internal.powerAdjustCompletionTimer = Time.getTimer('DeviceEnergyManagement power adjust completion', Seconds(duration), this.internal.powerAdjustCompletionCallback).start();
|
|
54
|
+
}
|
|
17
55
|
}
|
|
18
56
|
async cancelPowerAdjustRequest() {
|
|
19
57
|
const device = this.endpoint.stateOf(MatterbridgeServer);
|
|
@@ -27,5 +65,46 @@ export class MatterbridgeDeviceEnergyManagementServer extends DeviceEnergyManage
|
|
|
27
65
|
context: this.context,
|
|
28
66
|
});
|
|
29
67
|
device.log.debug(`MatterbridgeDeviceEnergyManagementServer cancelPowerAdjustRequest called`);
|
|
68
|
+
if (this.state.esaState !== DeviceEnergyManagement.EsaState.PowerAdjustActive) {
|
|
69
|
+
throw new StatusResponseError('No power adjustment is currently active', Status.InvalidInState);
|
|
70
|
+
}
|
|
71
|
+
this.#endPowerAdjustment(DeviceEnergyManagement.Cause.Cancelled);
|
|
72
|
+
}
|
|
73
|
+
#handleOptOutStateChanged(optOutState) {
|
|
74
|
+
if (this.state.esaState !== DeviceEnergyManagement.EsaState.PowerAdjustActive)
|
|
75
|
+
return;
|
|
76
|
+
const activeCause = this.state.powerAdjustmentCapability?.cause;
|
|
77
|
+
const optedOutOfActiveCause = (activeCause === DeviceEnergyManagement.PowerAdjustReason.LocalOptimizationAdjustment && (optOutState & DeviceEnergyManagement.OptOutState.LocalOptOut) !== 0) ||
|
|
78
|
+
(activeCause === DeviceEnergyManagement.PowerAdjustReason.GridOptimizationAdjustment && (optOutState & DeviceEnergyManagement.OptOutState.GridOptOut) !== 0);
|
|
79
|
+
if (!optedOutOfActiveCause)
|
|
80
|
+
return;
|
|
81
|
+
this.#endPowerAdjustment(DeviceEnergyManagement.Cause.UserOptOut);
|
|
82
|
+
}
|
|
83
|
+
#completePowerAdjustmentOnTimeout() {
|
|
84
|
+
this.internal.powerAdjustCompletionTimer = undefined;
|
|
85
|
+
this.#endPowerAdjustment(DeviceEnergyManagement.Cause.NormalCompletion);
|
|
86
|
+
}
|
|
87
|
+
#endPowerAdjustment(cause) {
|
|
88
|
+
this.internal.powerAdjustCompletionTimer?.stop();
|
|
89
|
+
this.internal.powerAdjustCompletionTimer = undefined;
|
|
90
|
+
const activationTimeMs = this.internal.powerAdjustActivationTimeMs ?? Time.nowMs;
|
|
91
|
+
const elapsedSeconds = Math.max(1, Math.round((Time.nowMs - activationTimeMs) / 1000));
|
|
92
|
+
const powerMw = Math.abs(this.internal.powerAdjustPowerMw ?? 0);
|
|
93
|
+
const energyUse = Math.max(1, Math.round((powerMw * elapsedSeconds) / 3600));
|
|
94
|
+
this.internal.powerAdjustActivationTimeMs = undefined;
|
|
95
|
+
this.internal.powerAdjustPowerMw = undefined;
|
|
96
|
+
const entries = (this.state.powerAdjustmentCapability?.powerAdjustCapability ?? []);
|
|
97
|
+
this.state.esaState = DeviceEnergyManagement.EsaState.Online;
|
|
98
|
+
this.state.powerAdjustmentCapability = { powerAdjustCapability: entries, cause: DeviceEnergyManagement.PowerAdjustReason.NoAdjustment };
|
|
99
|
+
this.events.powerAdjustEnd.emit({ cause, duration: elapsedSeconds, energyUse }, this.context);
|
|
30
100
|
}
|
|
31
101
|
}
|
|
102
|
+
(function (MatterbridgeDeviceEnergyManagementServer) {
|
|
103
|
+
class Internal {
|
|
104
|
+
powerAdjustActivationTimeMs;
|
|
105
|
+
powerAdjustPowerMw;
|
|
106
|
+
powerAdjustCompletionTimer;
|
|
107
|
+
powerAdjustCompletionCallback;
|
|
108
|
+
}
|
|
109
|
+
MatterbridgeDeviceEnergyManagementServer.Internal = Internal;
|
|
110
|
+
})(MatterbridgeDeviceEnergyManagementServer || (MatterbridgeDeviceEnergyManagementServer = {}));
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { CommonNumberTag } from '@matter/node';
|
|
2
|
+
import { EndpointNumber } from '@matter/types/datatype';
|
|
3
|
+
import { IrrigationSystem } from './devices/irrigationSystem.js';
|
|
4
|
+
import { getSupportedDeviceType } from './matterbridgeDeviceTypes.js';
|
|
5
|
+
import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
|
|
6
|
+
import { getSemtag } from './matterbridgeEndpointHelpers.js';
|
|
7
|
+
export async function createChipTestDevices(matterbridge) {
|
|
8
|
+
if (!process.env.MATTERBRIDGE_CHIP_TEST || !process.env.MATTERBRIDGE_CHIP_TEST_DEVICES || matterbridge.bridgeMode !== 'bridge' || !matterbridge.aggregatorNode)
|
|
9
|
+
return;
|
|
10
|
+
const serverNode = matterbridge.serverNode;
|
|
11
|
+
const aggregator = matterbridge.aggregatorNode;
|
|
12
|
+
if (!serverNode || !aggregator) {
|
|
13
|
+
matterbridge.log.error('CHIP test devices can only be created when the server node and aggregator node are available');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let ep;
|
|
17
|
+
matterbridge.plugins.set({
|
|
18
|
+
name: 'matterbridge-chip',
|
|
19
|
+
path: '',
|
|
20
|
+
type: 'DynamicPlatform',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
description: 'Chip test plugin',
|
|
23
|
+
author: 'Matterbridge',
|
|
24
|
+
enabled: false,
|
|
25
|
+
private: false,
|
|
26
|
+
registeredDevices: 0,
|
|
27
|
+
});
|
|
28
|
+
const registerDevice = async (device, deviceName, serialNumber) => {
|
|
29
|
+
device.createDefaultBridgedDeviceBasicInformationClusterServer(deviceName, serialNumber);
|
|
30
|
+
device.addRequiredClusters();
|
|
31
|
+
device.plugin = 'matterbridge-chip';
|
|
32
|
+
await matterbridge.addBridgedEndpoint('matterbridge-chip', device);
|
|
33
|
+
};
|
|
34
|
+
const bridgedNode = getSupportedDeviceType('BridgedNode');
|
|
35
|
+
const powerSource = getSupportedDeviceType('PowerSource');
|
|
36
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ElectricalSensor'), bridgedNode, powerSource], { id: 'ElectricalSensor', number: EndpointNumber(2_06) });
|
|
37
|
+
ep.createDefaultElectricalPowerMeasurementClusterServer(220_000, 1_000, 220_000_000, 50_000);
|
|
38
|
+
ep.createDefaultElectricalEnergyMeasurementClusterServer(100_000_000, 10_000_000);
|
|
39
|
+
await registerDevice(ep, 'Electrical Sensor', 'UTILITY-02-06');
|
|
40
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ElectricalSensor'), bridgedNode, powerSource], { id: 'ElectricalSensorImported', number: EndpointNumber(2_06_1) });
|
|
41
|
+
ep.createDefaultElectricalPowerMeasurementClusterServer(220_000, 1_000, 220_000_000, 50_000);
|
|
42
|
+
ep.createImportedElectricalEnergyMeasurementClusterServer(200_000_000);
|
|
43
|
+
await registerDevice(ep, 'Electrical Sensor Imported', 'UTILITY-02-06-1');
|
|
44
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ElectricalSensor'), bridgedNode, powerSource], { id: 'ElectricalSensorExported', number: EndpointNumber(2_06_2) });
|
|
45
|
+
ep.createDefaultElectricalPowerMeasurementClusterServer(220_000, 1_000, 220_000_000, 50_000);
|
|
46
|
+
ep.createExportedElectricalEnergyMeasurementClusterServer(50_000_000);
|
|
47
|
+
await registerDevice(ep, 'Electrical Sensor Exported', 'UTILITY-02-06-2');
|
|
48
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('DeviceEnergyManagement'), bridgedNode, powerSource], { id: 'DeviceEnergyManagement', number: EndpointNumber(2_07) });
|
|
49
|
+
ep.createDefaultDeviceEnergyManagementClusterServer();
|
|
50
|
+
ep.createDefaultDeviceEnergyManagementModeClusterServer();
|
|
51
|
+
await registerDevice(ep, 'Device Energy Management', 'UTILITY-02-07');
|
|
52
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('OnOffLight'), bridgedNode, powerSource], { id: 'OnOffLight', number: EndpointNumber(4_01) });
|
|
53
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
54
|
+
await registerDevice(ep, 'On/Off Light', 'LIGHTING-04-01');
|
|
55
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('DimmableLight'), bridgedNode, powerSource], { id: 'DimmableLight', number: EndpointNumber(4_02) });
|
|
56
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
57
|
+
await registerDevice(ep, 'Dimmable Light', 'LIGHTING-04-02');
|
|
58
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ColorTemperatureLight'), bridgedNode, powerSource], { id: 'ColorTemperatureLight', number: EndpointNumber(4_03) });
|
|
59
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
60
|
+
ep.createCtColorControlClusterServer();
|
|
61
|
+
await registerDevice(ep, 'Color Temperature Light', 'LIGHTING-04-03');
|
|
62
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ExtendedColorLight'), bridgedNode, powerSource], { id: 'ExtendedColorLightXYCT', number: EndpointNumber(4_04) });
|
|
63
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
64
|
+
ep.createXyColorControlClusterServer();
|
|
65
|
+
await registerDevice(ep, 'Extended Color Light XY CT', 'LIGHTING-04-04');
|
|
66
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ExtendedColorLight'), bridgedNode, powerSource], { id: 'ExtendedColorLightHSXYCT', number: EndpointNumber(4_04_1) });
|
|
67
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
68
|
+
ep.createDefaultColorControlClusterServer();
|
|
69
|
+
await registerDevice(ep, 'Extended Color Light HS XY CT', 'LIGHTING-04-04-01');
|
|
70
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ExtendedColorLight'), bridgedNode, powerSource], {
|
|
71
|
+
id: 'ExtendedColorLightEnhancedEHSXYCT',
|
|
72
|
+
number: EndpointNumber(4_04_2),
|
|
73
|
+
});
|
|
74
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
75
|
+
ep.createEnhancedColorControlClusterServer();
|
|
76
|
+
await registerDevice(ep, 'Extended Color Light EHS XY CT', 'LIGHTING-04-04-02');
|
|
77
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('OnOffPlugInUnit'), bridgedNode, powerSource], { id: 'OnOffPlugInUnit', number: EndpointNumber(5_01) });
|
|
78
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
79
|
+
await registerDevice(ep, 'On/Off Plug-in Unit', 'ACTUATOR-05-01');
|
|
80
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('DimmablePlugInUnit'), bridgedNode, powerSource], { id: 'DimmablePlugInUnit', number: EndpointNumber(5_02) });
|
|
81
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
82
|
+
await registerDevice(ep, 'Dimmable Plug-in Unit', 'ACTUATOR-05-02');
|
|
83
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('MountedOnOffControl'), bridgedNode, powerSource], { id: 'MountedOnOffControl', number: EndpointNumber(5_03) });
|
|
84
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
85
|
+
await registerDevice(ep, 'Mounted On/Off Control', 'ACTUATOR-05-03');
|
|
86
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('MountedDimmableLoadControl'), bridgedNode, powerSource], {
|
|
87
|
+
id: 'MountedDimmableLoadControl',
|
|
88
|
+
number: EndpointNumber(5_04),
|
|
89
|
+
});
|
|
90
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
91
|
+
await registerDevice(ep, 'Mounted Dimmable Load Control', 'ACTUATOR-05-04');
|
|
92
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('Pump'), bridgedNode, powerSource], { id: 'Pump', number: EndpointNumber(5_05) });
|
|
93
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
94
|
+
ep.createOnOffClusterServer();
|
|
95
|
+
await registerDevice(ep, 'Pump', 'ACTUATOR-05-05');
|
|
96
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('WaterValve'), bridgedNode, powerSource], { id: 'WaterValve', number: EndpointNumber(5_06) });
|
|
97
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
98
|
+
await registerDevice(ep, 'Water Valve', 'ACTUATOR-05-06');
|
|
99
|
+
ep = new IrrigationSystem('Irrigation System with 2 zones', 'ACTUATOR-05-07', { id: 'IrrigationSystem', number: EndpointNumber(5_07) });
|
|
100
|
+
ep.addZone(getSemtag(CommonNumberTag.One), 'IrrigationSystemZone1', EndpointNumber(5_07_1));
|
|
101
|
+
ep.addZone(getSemtag(CommonNumberTag.Two), 'IrrigationSystemZone2', EndpointNumber(5_07_2));
|
|
102
|
+
await registerDevice(ep, 'Irrigation System with 2 zones', 'ACTUATOR-05-07');
|
|
103
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('OnOffLightSwitch'), bridgedNode, powerSource], { id: 'OnOffLightSwitch', number: EndpointNumber(6_01) });
|
|
104
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
105
|
+
await registerDevice(ep, 'On/Off Light Switch', 'SWITCH-06-01');
|
|
106
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('DimmerSwitch'), bridgedNode, powerSource], { id: 'DimmerSwitch', number: EndpointNumber(6_02) });
|
|
107
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
108
|
+
await registerDevice(ep, 'Dimmer Switch', 'SWITCH-06-02');
|
|
109
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ColorDimmerSwitch'), bridgedNode, powerSource], { id: 'ColorDimmerSwitch', number: EndpointNumber(6_03) });
|
|
110
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
111
|
+
await registerDevice(ep, 'Color Dimmer Switch', 'SWITCH-06-03');
|
|
112
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ControlBridge'), bridgedNode, powerSource], { id: 'ControlBridge', number: EndpointNumber(6_04) });
|
|
113
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
114
|
+
await registerDevice(ep, 'Control Bridge', 'SWITCH-06-04');
|
|
115
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('PumpController'), bridgedNode, powerSource], { id: 'PumpController', number: EndpointNumber(6_05) });
|
|
116
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
117
|
+
await registerDevice(ep, 'Pump Controller', 'SWITCH-06-05');
|
|
118
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('GenericSwitch'), bridgedNode, powerSource], { id: 'GenericSwitch', number: EndpointNumber(6_06) });
|
|
119
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
120
|
+
await registerDevice(ep, 'Generic Switch', 'SWITCH-06-06');
|
|
121
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('ContactSensor'), bridgedNode, powerSource], { id: 'ContactSensor', number: EndpointNumber(7_01) });
|
|
122
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
123
|
+
ep.createDefaultBooleanStateClusterServer();
|
|
124
|
+
ep.createDefaultBooleanStateConfigurationClusterServer();
|
|
125
|
+
await registerDevice(ep, 'Contact Sensor', 'SENSOR-07-01');
|
|
126
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('LightSensor'), bridgedNode, powerSource], { id: 'LightSensor', number: EndpointNumber(7_02) });
|
|
127
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
128
|
+
ep.createDefaultIlluminanceMeasurementClusterServer(1000, 1, 65534);
|
|
129
|
+
await registerDevice(ep, 'Light Sensor', 'SENSOR-07-02');
|
|
130
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('OccupancySensor'), bridgedNode, powerSource], { id: 'OccupancySensor', number: EndpointNumber(7_03) });
|
|
131
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
132
|
+
await registerDevice(ep, 'Occupancy Sensor', 'SENSOR-07-03');
|
|
133
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('TemperatureSensor'), bridgedNode, powerSource], { id: 'TemperatureSensor', number: EndpointNumber(7_04) });
|
|
134
|
+
ep.createDefaultPowerSourceReplaceableBatteryClusterServer();
|
|
135
|
+
ep.createDefaultTemperatureMeasurementClusterServer(2000, -27315, 32767);
|
|
136
|
+
await registerDevice(ep, 'Temperature Sensor', 'SENSOR-07-04');
|
|
137
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('PressureSensor'), bridgedNode, powerSource], { id: 'PressureSensor', number: EndpointNumber(7_05) });
|
|
138
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
139
|
+
ep.createDefaultPressureMeasurementClusterServer(1013, 0, 2000);
|
|
140
|
+
await registerDevice(ep, 'Pressure Sensor', 'SENSOR-07-05');
|
|
141
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('FlowSensor'), bridgedNode, powerSource], { id: 'FlowSensor', number: EndpointNumber(7_06) });
|
|
142
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
143
|
+
ep.createDefaultFlowMeasurementClusterServer(100, 0, 1000);
|
|
144
|
+
await registerDevice(ep, 'Flow Sensor', 'SENSOR-07-06');
|
|
145
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('HumiditySensor'), bridgedNode, powerSource], { id: 'HumiditySensor', number: EndpointNumber(7_07) });
|
|
146
|
+
ep.createDefaultPowerSourceRechargeableBatteryClusterServer();
|
|
147
|
+
ep.createDefaultRelativeHumidityMeasurementClusterServer(5000, 0, 10000);
|
|
148
|
+
await registerDevice(ep, 'Humidity Sensor', 'SENSOR-07-07');
|
|
149
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('OnOffSensor'), bridgedNode, powerSource], { id: 'OnOffSensor', number: EndpointNumber(7_08) });
|
|
150
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
151
|
+
await registerDevice(ep, 'On/Off Sensor', 'SENSOR-07-08');
|
|
152
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('SmokeCOAlarm'), bridgedNode, powerSource], { id: 'SmokeCOAlarm', number: EndpointNumber(7_09) });
|
|
153
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
154
|
+
await registerDevice(ep, 'Smoke/CO Alarm', 'SENSOR-07-09');
|
|
155
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('SmokeCOAlarm'), bridgedNode, powerSource], { id: 'SmokeAlarm', number: EndpointNumber(7_09_1) });
|
|
156
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
157
|
+
ep.createSmokeOnlySmokeCOAlarmClusterServer();
|
|
158
|
+
await registerDevice(ep, 'Smoke Alarm', 'SENSOR-07-09-1');
|
|
159
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('SmokeCOAlarm'), bridgedNode, powerSource], { id: 'COAlarm', number: EndpointNumber(7_09_2) });
|
|
160
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
161
|
+
ep.createCoOnlySmokeCOAlarmClusterServer();
|
|
162
|
+
await registerDevice(ep, 'CO Alarm', 'SENSOR-07-09-2');
|
|
163
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('AirQualitySensor'), bridgedNode, powerSource], { id: 'AirQualitySensor', number: EndpointNumber(7_10) });
|
|
164
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
165
|
+
ep.createDefaultTvocMeasurementClusterServer(50, undefined, undefined, undefined, 0, 1000);
|
|
166
|
+
ep.addOptionalClusterServers();
|
|
167
|
+
await registerDevice(ep, 'Air Quality Sensor', 'SENSOR-07-10');
|
|
168
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('WaterFreezeDetector'), bridgedNode, powerSource], { id: 'WaterFreezeDetector', number: EndpointNumber(7_11) });
|
|
169
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
170
|
+
ep.createDefaultBooleanStateClusterServer(false);
|
|
171
|
+
ep.createDefaultBooleanStateConfigurationClusterServer();
|
|
172
|
+
await registerDevice(ep, 'Water Freeze Detector', 'SENSOR-07-11');
|
|
173
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('WaterLeakDetector'), bridgedNode, powerSource], { id: 'WaterLeakDetector', number: EndpointNumber(7_12) });
|
|
174
|
+
ep.createDefaultPowerSourceBatteryClusterServer();
|
|
175
|
+
ep.createDefaultBooleanStateClusterServer(false);
|
|
176
|
+
ep.createDefaultBooleanStateConfigurationClusterServer();
|
|
177
|
+
await registerDevice(ep, 'Water Leak Detector', 'SENSOR-07-12');
|
|
178
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('RainSensor'), bridgedNode, powerSource], { id: 'RainSensor', number: EndpointNumber(7_13) });
|
|
179
|
+
ep.createDefaultPowerSourceRechargeableBatteryClusterServer();
|
|
180
|
+
ep.createDefaultBooleanStateClusterServer(false);
|
|
181
|
+
ep.createDefaultBooleanStateConfigurationClusterServer();
|
|
182
|
+
await registerDevice(ep, 'Rain Sensor', 'SENSOR-07-13');
|
|
183
|
+
ep = new MatterbridgeEndpoint([getSupportedDeviceType('SoilSensor'), bridgedNode, powerSource], { id: 'SoilSensor', number: EndpointNumber(7_14) });
|
|
184
|
+
ep.createDefaultPowerSourceWiredClusterServer();
|
|
185
|
+
ep.createDefaultSoilMeasurementClusterServer(50);
|
|
186
|
+
await registerDevice(ep, 'Soil Sensor', 'SENSOR-07-14');
|
|
187
|
+
}
|
|
@@ -5,6 +5,6 @@ export declare const chipTestEnableKey: Uint8Array<ArrayBuffer>;
|
|
|
5
5
|
export declare class MatterbridgeGeneralDiagnosticsServer extends GeneralDiagnosticsServer {
|
|
6
6
|
initialize(): void;
|
|
7
7
|
testEventTrigger({ eventTrigger, enableKey }: GeneralDiagnostics.TestEventTriggerRequest): Promise<void>;
|
|
8
|
+
payloadTestRequest(request: GeneralDiagnostics.PayloadTestRequest): ReturnType<GeneralDiagnosticsServer['payloadTestRequest']>;
|
|
8
9
|
}
|
|
9
|
-
export declare function createChipTestDevices(matterbridge: Matterbridge): Promise<void>;
|
|
10
10
|
export declare function createChipTestAppPipe(matterbridge: Matterbridge): void;
|