@matterbridge/core 3.6.2-dev-20260317-e291a17 → 3.7.0-dev-20260318-5bb831c
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/devices/basicVideoPlayer.d.ts +8 -9
- package/dist/devices/basicVideoPlayer.js +64 -16
- package/dist/devices/closure.d.ts +2 -3
- package/dist/devices/closure.js +16 -4
- package/dist/devices/closurePanel.d.ts +2 -3
- package/dist/devices/closurePanel.js +16 -4
- package/dist/devices/dishwasher.d.ts +1 -2
- package/dist/devices/dishwasher.js +8 -2
- package/dist/devices/evse.d.ts +3 -3
- package/dist/devices/evse.js +24 -6
- package/dist/devices/laundryWasher.d.ts +1 -2
- package/dist/devices/laundryWasher.js +8 -2
- package/dist/devices/microwaveOven.d.ts +1 -2
- package/dist/devices/microwaveOven.js +15 -3
- package/dist/devices/roboticVacuumCleaner.d.ts +5 -6
- package/dist/devices/roboticVacuumCleaner.js +40 -10
- package/dist/devices/temperatureControl.d.ts +2 -3
- package/dist/devices/temperatureControl.js +16 -4
- package/dist/devices/waterHeater.d.ts +3 -4
- package/dist/devices/waterHeater.js +24 -6
- package/dist/export.d.ts +1 -0
- package/dist/export.js +1 -0
- package/dist/jestutils/jestHelpers.js +1 -1
- package/dist/matterbridgeBehaviorsServer.d.ts +55 -53
- package/dist/matterbridgeBehaviorsServer.js +403 -139
- package/dist/matterbridgeEndpoint.d.ts +9 -7
- package/dist/matterbridgeEndpoint.js +11 -6
- package/dist/matterbridgeEndpointCommandHandler.d.ts +806 -0
- package/dist/matterbridgeEndpointCommandHandler.js +31 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +2 -2
- package/dist/matterbridgeEndpointHelpers.js +1 -0
- package/dist/matterbridgeEndpointTypes.d.ts +0 -83
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AtLeastOne
|
|
1
|
+
import { AtLeastOne } from '@matter/general';
|
|
2
2
|
import { ActionContext, Behavior, Endpoint, ServerNode } from '@matter/node';
|
|
3
3
|
import { ClusterType } from '@matter/types/cluster';
|
|
4
4
|
import { AirQuality } from '@matter/types/clusters/air-quality';
|
|
@@ -24,7 +24,8 @@ import { ClusterId, EndpointNumber } from '@matter/types/datatype';
|
|
|
24
24
|
import { Semtag } from '@matter/types/globals';
|
|
25
25
|
import { AnsiLogger, LogLevel } from 'node-ansi-logger';
|
|
26
26
|
import { DeviceTypeDefinition } from './matterbridgeDeviceTypes.js';
|
|
27
|
-
import {
|
|
27
|
+
import { CommandHandler, CommandHandlerData, CommandHandlerFunction, CommandHandlers } from './matterbridgeEndpointCommandHandler.js';
|
|
28
|
+
import { MatterbridgeEndpointOptions, SerializedMatterbridgeEndpoint } from './matterbridgeEndpointTypes.js';
|
|
28
29
|
type BehaviorCommandName<T extends Behavior.Type> = {
|
|
29
30
|
[K in keyof CommandsOfBehavior<T>]: K;
|
|
30
31
|
}[keyof CommandsOfBehavior<T>] & string;
|
|
@@ -58,7 +59,7 @@ export declare class MatterbridgeEndpoint extends Endpoint {
|
|
|
58
59
|
name: string | undefined;
|
|
59
60
|
deviceType: number | undefined;
|
|
60
61
|
readonly deviceTypes: Map<number, DeviceTypeDefinition>;
|
|
61
|
-
readonly commandHandler:
|
|
62
|
+
readonly commandHandler: CommandHandler;
|
|
62
63
|
constructor(definition: DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>, options?: MatterbridgeEndpointOptions, debug?: boolean);
|
|
63
64
|
static loadInstance(definition: DeviceTypeDefinition | AtLeastOne<DeviceTypeDefinition>, options?: MatterbridgeEndpointOptions, debug?: boolean): Promise<MatterbridgeEndpoint>;
|
|
64
65
|
getDeviceTypes(): DeviceTypeDefinition[];
|
|
@@ -87,13 +88,14 @@ export declare class MatterbridgeEndpoint extends Endpoint {
|
|
|
87
88
|
addClusterServers(serverList: ClusterId[]): this;
|
|
88
89
|
addFixedLabel(label: string, value: string): Promise<this>;
|
|
89
90
|
addUserLabel(label: string, value: string): Promise<this>;
|
|
90
|
-
addCommandHandler(command:
|
|
91
|
-
|
|
91
|
+
addCommandHandler<C extends CommandHandlers>(command: C, handler: CommandHandlerFunction<C>): this;
|
|
92
|
+
removeCommandHandler<C extends CommandHandlers>(command: C, handler: CommandHandlerFunction<C>): this;
|
|
93
|
+
executeCommandHandler<C extends CommandHandlers>(command: C, request: CommandHandlerData<C>['request'], cluster: CommandHandlerData<C>['cluster'], attributes: CommandHandlerData<C>['attributes'], endpoint: CommandHandlerData<C>['endpoint']): Promise<void>;
|
|
92
94
|
invokeBehaviorCommand<T extends Behavior.Type, C extends BehaviorCommandName<T>>(cluster: T, command: C, params?: BehaviorCommandParams<T, C>): Promise<void>;
|
|
93
95
|
invokeBehaviorCommand<T extends ClusterType, C extends keyof ClusterType.CommandsOf<T>>(cluster: T, command: C, params?: ClusterType.CommandsOf<T>[C] extends {
|
|
94
96
|
requestSchema: infer S extends import('@matter/types/tlv').TlvSchema<unknown>;
|
|
95
97
|
} ? import('@matter/types/tlv').TypeFromSchema<S> : never): Promise<void>;
|
|
96
|
-
invokeBehaviorCommand(cluster: ClusterId | string, command:
|
|
98
|
+
invokeBehaviorCommand(cluster: ClusterId | string, command: CommandHandlers, params?: Record<string, boolean | number | bigint | string | object | null>): Promise<void>;
|
|
97
99
|
addRequiredClusterServers(): MatterbridgeEndpoint;
|
|
98
100
|
addOptionalClusterServers(): MatterbridgeEndpoint;
|
|
99
101
|
getAllClusterServers(): Behavior.Type[];
|
|
@@ -145,7 +147,7 @@ export declare class MatterbridgeEndpoint extends Endpoint {
|
|
|
145
147
|
setWindowCoveringTargetAndCurrentPosition(liftPosition: number, tiltPosition?: number): Promise<void>;
|
|
146
148
|
createDefaultThermostatClusterServer(localTemperature?: number, occupiedHeatingSetpoint?: number, occupiedCoolingSetpoint?: number, minSetpointDeadBand?: number, minHeatSetpointLimit?: number, maxHeatSetpointLimit?: number, minCoolSetpointLimit?: number, maxCoolSetpointLimit?: number, unoccupiedHeatingSetpoint?: number | undefined, unoccupiedCoolingSetpoint?: number | undefined, occupied?: boolean | undefined, outdoorTemperature?: number | null | undefined): this;
|
|
147
149
|
createDefaultHeatingThermostatClusterServer(localTemperature?: number, occupiedHeatingSetpoint?: number, minHeatSetpointLimit?: number, maxHeatSetpointLimit?: number, unoccupiedHeatingSetpoint?: number | undefined, occupied?: boolean | undefined, outdoorTemperature?: number | null | undefined): this;
|
|
148
|
-
createDefaultPresetsThermostatClusterServer(localTemperature?: number, occupiedHeatingSetpoint?: number, occupiedCoolingSetpoint?: number, minSetpointDeadBand?: number, minHeatSetpointLimit?: number, maxHeatSetpointLimit?: number, minCoolSetpointLimit?: number, maxCoolSetpointLimit?: number, unoccupiedHeatingSetpoint?: number | undefined, unoccupiedCoolingSetpoint?: number | undefined, occupied?: boolean | undefined, outdoorTemperature?: number | null | undefined, activePresetHandle?:
|
|
150
|
+
createDefaultPresetsThermostatClusterServer(localTemperature?: number, occupiedHeatingSetpoint?: number, occupiedCoolingSetpoint?: number, minSetpointDeadBand?: number, minHeatSetpointLimit?: number, maxHeatSetpointLimit?: number, minCoolSetpointLimit?: number, maxCoolSetpointLimit?: number, unoccupiedHeatingSetpoint?: number | undefined, unoccupiedCoolingSetpoint?: number | undefined, occupied?: boolean | undefined, outdoorTemperature?: number | null | undefined, activePresetHandle?: Uint8Array | null, presetsList?: Thermostat.Preset[] | null | undefined, presetTypes?: Thermostat.PresetType[] | null | undefined): this;
|
|
149
151
|
createDefaultCoolingThermostatClusterServer(localTemperature?: number, occupiedCoolingSetpoint?: number, minCoolSetpointLimit?: number, maxCoolSetpointLimit?: number, unoccupiedCoolingSetpoint?: number | undefined, occupied?: boolean | undefined, outdoorTemperature?: number | null | undefined): this;
|
|
150
152
|
createDefaultThermostatUserInterfaceConfigurationClusterServer(temperatureDisplayMode?: ThermostatUserInterfaceConfiguration.TemperatureDisplayMode, keypadLockout?: ThermostatUserInterfaceConfiguration.KeypadLockout, scheduleProgrammingVisibility?: ThermostatUserInterfaceConfiguration.ScheduleProgrammingVisibility): this;
|
|
151
153
|
createDefaultFanControlClusterServer(fanMode?: FanControl.FanMode, fanModeSequence?: FanControl.FanModeSequence, percentSetting?: number, percentCurrent?: number): this;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
if (process.argv.includes('--loader') || process.argv.includes('-loader'))
|
|
2
2
|
console.log('\u001B[32mMatterbridgeEndpoint loaded.\u001B[40;0m');
|
|
3
|
-
import { Lifecycle,
|
|
3
|
+
import { Lifecycle, UINT16_MAX, UINT32_MAX } from '@matter/general';
|
|
4
4
|
import { Endpoint, MutableEndpoint, SupportedBehaviors } from '@matter/node';
|
|
5
5
|
import { AirQualityServer } from '@matter/node/behaviors/air-quality';
|
|
6
6
|
import { BooleanStateServer } from '@matter/node/behaviors/boolean-state';
|
|
@@ -63,6 +63,7 @@ import { inspectError } from '@matterbridge/utils/error';
|
|
|
63
63
|
import { isValidNumber, isValidObject, isValidString } from '@matterbridge/utils/validate';
|
|
64
64
|
import { AnsiLogger, CYAN, db, debugStringify, hk, or, YELLOW, zb } from 'node-ansi-logger';
|
|
65
65
|
import { MatterbridgeActivatedCarbonFilterMonitoringServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeColorControlServer, MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeDoorLockServer, MatterbridgeEnhancedColorControlServer, MatterbridgeFanControlServer, MatterbridgeHepaFilterMonitoringServer, MatterbridgeIdentifyServer, MatterbridgeLevelControlServer, MatterbridgeLiftTiltWindowCoveringServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeModeSelectServer, MatterbridgeOnOffServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer, MatterbridgePresetThermostatServer, MatterbridgeServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeSwitchServer, MatterbridgeThermostatServer, MatterbridgeValveConfigurationAndControlServer, } from './matterbridgeBehaviorsServer.js';
|
|
66
|
+
import { CommandHandler } from './matterbridgeEndpointCommandHandler.js';
|
|
66
67
|
import { addClusterServers, addFixedLabel, addOptionalClusterServers, addRequiredClusterServers, addUserLabel, checkNotLatinCharacters, createUniqueId, featuresFor, generateUniqueId, getApparentElectricalPowerMeasurementClusterServer, getAttribute, getAttributeId, getBehavior, getBehaviourTypesFromClusterClientIds, getBehaviourTypesFromClusterServerIds, getCluster, getClusterId, getDefaultDeviceEnergyManagementClusterServer, getDefaultDeviceEnergyManagementModeClusterServer, getDefaultElectricalEnergyMeasurementClusterServer, getDefaultElectricalPowerMeasurementClusterServer, getDefaultFlowMeasurementClusterServer, getDefaultIlluminanceMeasurementClusterServer, getDefaultOccupancySensingClusterServer, getDefaultOperationalStateClusterServer, getDefaultPowerSourceBatteryClusterServer, getDefaultPowerSourceRechargeableBatteryClusterServer, getDefaultPowerSourceReplaceableBatteryClusterServer, getDefaultPowerSourceWiredClusterServer, getDefaultPressureMeasurementClusterServer, getDefaultRelativeHumidityMeasurementClusterServer, getDefaultTemperatureMeasurementClusterServer, invokeBehaviorCommand, lowercaseFirstLetter, setAttribute, setCluster, subscribeAttribute, triggerEvent, updateAttribute, } from './matterbridgeEndpointHelpers.js';
|
|
67
68
|
const MATTERBRIDGE_ENDPOINT_BRAND = Symbol('MatterbridgeEndpoint.brand');
|
|
68
69
|
export function isMatterbridgeEndpoint(value) {
|
|
@@ -104,7 +105,7 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
104
105
|
name = undefined;
|
|
105
106
|
deviceType = undefined;
|
|
106
107
|
deviceTypes = new Map();
|
|
107
|
-
commandHandler = new
|
|
108
|
+
commandHandler = new CommandHandler();
|
|
108
109
|
constructor(definition, options = {}, debug = false) {
|
|
109
110
|
let deviceTypeList = [];
|
|
110
111
|
const originalId = options.id;
|
|
@@ -237,8 +238,12 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
237
238
|
this.commandHandler.addHandler(command, handler);
|
|
238
239
|
return this;
|
|
239
240
|
}
|
|
241
|
+
removeCommandHandler(command, handler) {
|
|
242
|
+
this.commandHandler.removeHandler(command, handler);
|
|
243
|
+
return this;
|
|
244
|
+
}
|
|
240
245
|
async executeCommandHandler(command, request, cluster, attributes, endpoint) {
|
|
241
|
-
await this.commandHandler.executeHandler(command, { request, cluster, attributes, endpoint });
|
|
246
|
+
await this.commandHandler.executeHandler(command, { command, request, cluster, attributes, endpoint });
|
|
242
247
|
}
|
|
243
248
|
async invokeBehaviorCommand(cluster, command, params) {
|
|
244
249
|
await invokeBehaviorCommand(this, cluster, command, params);
|
|
@@ -887,7 +892,7 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
887
892
|
});
|
|
888
893
|
return this;
|
|
889
894
|
}
|
|
890
|
-
createDefaultPresetsThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 0, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50, unoccupiedHeatingSetpoint = undefined, unoccupiedCoolingSetpoint = undefined, occupied = undefined, outdoorTemperature = undefined, activePresetHandle =
|
|
895
|
+
createDefaultPresetsThermostatClusterServer(localTemperature = 23, occupiedHeatingSetpoint = 21, occupiedCoolingSetpoint = 25, minSetpointDeadBand = 0, minHeatSetpointLimit = 0, maxHeatSetpointLimit = 50, minCoolSetpointLimit = 0, maxCoolSetpointLimit = 50, unoccupiedHeatingSetpoint = undefined, unoccupiedCoolingSetpoint = undefined, occupied = undefined, outdoorTemperature = undefined, activePresetHandle = null, presetsList = undefined, presetTypes = undefined) {
|
|
891
896
|
this.behaviors.require(MatterbridgePresetThermostatServer.with(Thermostat.Feature.Heating, Thermostat.Feature.Cooling, Thermostat.Feature.AutoMode, ...(occupied !== undefined ? [Thermostat.Feature.Occupancy] : []), Thermostat.Feature.Presets), {
|
|
892
897
|
localTemperature: localTemperature * 100,
|
|
893
898
|
externalMeasuredIndoorTemperature: localTemperature * 100,
|
|
@@ -911,9 +916,9 @@ export class MatterbridgeEndpoint extends Endpoint {
|
|
|
911
916
|
...(occupied !== undefined ? { occupancy: { occupied } } : {}),
|
|
912
917
|
...(occupied !== undefined ? { externallyMeasuredOccupancy: true } : {}),
|
|
913
918
|
numberOfPresets: Math.max(Array.isArray(presetsList) ? presetsList.length : 0, 10),
|
|
914
|
-
activePresetHandle: activePresetHandle
|
|
919
|
+
activePresetHandle: activePresetHandle ? Uint8Array.from([activePresetHandle]) : null,
|
|
915
920
|
presets: (presetsList ?? []).map((p) => ({
|
|
916
|
-
presetHandle: Uint8Array.from(p.presetHandle
|
|
921
|
+
presetHandle: p.presetHandle ? Uint8Array.from(p.presetHandle) : null,
|
|
917
922
|
presetScenario: p.presetScenario,
|
|
918
923
|
name: p.name,
|
|
919
924
|
coolingSetpoint: p.coolingSetpoint,
|