matterbridge
Version:
Matterbridge plugin manager for Matter
820 lines • 164 kB
TypeScript
/**
* This file contains the helpers for the class MatterbridgeEndpoint.
*
* @file matterbridgeEndpointHelpers.ts
* @author Luca Liguori
* @date 2024-10-01
* @version 2.1.0
*
* Copyright 2024, 2025, 2026 Luca Liguori.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. *
*/
import { ActionContext, Behavior, ClusterBehavior, ClusterId, Endpoint } from '@matter/main';
import { ClusterType } from '@matter/main/types';
import { PowerSource } from '@matter/main/clusters/power-source';
import { OnOff } from '@matter/main/clusters/on-off';
import { LevelControl } from '@matter/main/clusters/level-control';
import { WindowCovering } from '@matter/main/clusters/window-covering';
import { Thermostat } from '@matter/main/clusters/thermostat';
import { ValveConfigurationAndControl } from '@matter/main/clusters/valve-configuration-and-control';
import { PumpConfigurationAndControl } from '@matter/main/clusters/pump-configuration-and-control';
import { SmokeCoAlarm } from '@matter/main/clusters/smoke-co-alarm';
import { BooleanState } from '@matter/main/clusters/boolean-state';
import { ElectricalPowerMeasurement } from '@matter/main/clusters/electrical-power-measurement';
import { AirQuality } from '@matter/main/clusters/air-quality';
import { OperationalState } from '@matter/main/clusters/operational-state';
import { DeviceEnergyManagement } from '@matter/main/clusters/device-energy-management';
import { PowerSourceServer } from '@matter/main/behaviors/power-source';
import { UserLabelServer } from '@matter/main/behaviors/user-label';
import { FixedLabelServer } from '@matter/main/behaviors/fixed-label';
import { BasicInformationServer } from '@matter/main/behaviors/basic-information';
import { BridgedDeviceBasicInformationServer } from '@matter/main/behaviors/bridged-device-basic-information';
import { GroupsServer } from '@matter/main/behaviors/groups';
import { PumpConfigurationAndControlServer } from '@matter/main/behaviors/pump-configuration-and-control';
import { SwitchServer } from '@matter/main/behaviors/switch';
import { BooleanStateServer } from '@matter/main/behaviors/boolean-state';
import { PowerTopologyServer } from '@matter/main/behaviors/power-topology';
import { ElectricalPowerMeasurementServer } from '@matter/main/behaviors/electrical-power-measurement';
import { ElectricalEnergyMeasurementServer } from '@matter/main/behaviors/electrical-energy-measurement';
import { TemperatureMeasurementServer } from '@matter/main/behaviors/temperature-measurement';
import { RelativeHumidityMeasurementServer } from '@matter/main/behaviors/relative-humidity-measurement';
import { PressureMeasurementServer } from '@matter/main/behaviors/pressure-measurement';
import { FlowMeasurementServer } from '@matter/main/behaviors/flow-measurement';
import { IlluminanceMeasurementServer } from '@matter/main/behaviors/illuminance-measurement';
import { OccupancySensingServer } from '@matter/main/behaviors/occupancy-sensing';
import { AirQualityServer } from '@matter/main/behaviors/air-quality';
import { CarbonMonoxideConcentrationMeasurementServer } from '@matter/main/behaviors/carbon-monoxide-concentration-measurement';
import { CarbonDioxideConcentrationMeasurementServer } from '@matter/main/behaviors/carbon-dioxide-concentration-measurement';
import { NitrogenDioxideConcentrationMeasurementServer } from '@matter/main/behaviors/nitrogen-dioxide-concentration-measurement';
import { OzoneConcentrationMeasurementServer } from '@matter/main/behaviors/ozone-concentration-measurement';
import { FormaldehydeConcentrationMeasurementServer } from '@matter/main/behaviors/formaldehyde-concentration-measurement';
import { Pm1ConcentrationMeasurementServer } from '@matter/main/behaviors/pm1-concentration-measurement';
import { Pm25ConcentrationMeasurementServer } from '@matter/main/behaviors/pm25-concentration-measurement';
import { Pm10ConcentrationMeasurementServer } from '@matter/main/behaviors/pm10-concentration-measurement';
import { RadonConcentrationMeasurementServer } from '@matter/main/behaviors/radon-concentration-measurement';
import { TotalVolatileOrganicCompoundsConcentrationMeasurementServer } from '@matter/main/behaviors/total-volatile-organic-compounds-concentration-measurement';
import { DeviceEnergyManagementServer } from '@matter/node/behaviors/device-energy-management';
import { AnsiLogger } from 'node-ansi-logger';
import { MatterbridgeEndpoint, MatterbridgeEndpointCommands } from './matterbridgeEndpoint.js';
import { MatterbridgeIdentifyServer, MatterbridgeOnOffServer, MatterbridgeLevelControlServer, MatterbridgeColorControlServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeThermostatServer, MatterbridgeFanControlServer, MatterbridgeDoorLockServer, MatterbridgeModeSelectServer, MatterbridgeValveConfigurationAndControlServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeOperationalStateServer, MatterbridgeDeviceEnergyManagementModeServer } from './matterbridgeBehaviors.js';
export declare function capitalizeFirstLetter(name: string): string;
export declare function lowercaseFirstLetter(name: string): string;
export declare function checkNotLatinCharacters(deviceName: string): boolean;
export declare function generateUniqueId(deviceName: string): string;
export declare function createUniqueId(param1: string, param2: string, param3: string, param4: string): string;
export declare function getBehaviourTypesFromClusterServerIds(clusterServerList: ClusterId[]): Behavior.Type[];
export declare function getBehaviourTypesFromClusterClientIds(clusterClientList: ClusterId[]): Behavior.Type[];
export declare function getBehaviourTypeFromClusterServerId(clusterId: ClusterId): typeof MatterbridgeIdentifyServer | typeof MatterbridgeColorControlServer | typeof MatterbridgeDoorLockServer | typeof MatterbridgeFanControlServer | typeof MatterbridgeBooleanStateConfigurationServer | typeof MatterbridgeOperationalStateServer | typeof MatterbridgeModeSelectServer | typeof MatterbridgeDeviceEnergyManagementModeServer | ClusterBehavior.Type<import("@matter/main/types").ClusterComposer.WithFeatures<ClusterType.Of<{
readonly id: 47;
readonly name: "PowerSource";
readonly revision: 3;
readonly features: {
readonly wired: import("@matter/main/types").BitFlag;
readonly battery: import("@matter/main/types").BitFlag;
readonly rechargeable: import("@matter/main/types").BitFlag;
readonly replaceable: import("@matter/main/types").BitFlag;
};
readonly attributes: {
readonly status: import("@matter/main/types").Attribute<PowerSource.PowerSourceStatus, any>;
readonly order: import("@matter/main/types").Attribute<number, any>;
readonly description: import("@matter/main/types").FixedAttribute<string, any>;
readonly endpointList: import("@matter/main/types").Attribute<import("@matter/main").EndpointNumber[], any>;
};
readonly extensions: readonly [{
readonly flags: {
readonly wired: true;
};
readonly component: {
readonly attributes: {
readonly wiredAssessedInputVoltage: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly wiredAssessedInputFrequency: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly wiredCurrentType: import("@matter/main/types").FixedAttribute<PowerSource.WiredCurrentType, any>;
readonly wiredAssessedCurrent: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly wiredNominalVoltage: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly wiredMaximumCurrent: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly wiredPresent: import("@matter/main/types").OptionalAttribute<boolean, any>;
readonly activeWiredFaults: import("@matter/main/types").OptionalAttribute<PowerSource.WiredFault[], any>;
};
readonly events: {
readonly wiredFaultChange: import("@matter/main/types").OptionalEvent<import("@matter/main/types").TypeFromFields<{
current: import("@matter/main/types").FieldType<PowerSource.WiredFault[]>;
previous: import("@matter/main/types").FieldType<PowerSource.WiredFault[]>;
}>, any>;
};
};
}, {
readonly flags: {
readonly battery: true;
};
readonly component: {
readonly attributes: {
readonly batVoltage: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly batPercentRemaining: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly batTimeRemaining: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly batChargeLevel: import("@matter/main/types").Attribute<PowerSource.BatChargeLevel, any>;
readonly batReplacementNeeded: import("@matter/main/types").Attribute<boolean, any>;
readonly batReplaceability: import("@matter/main/types").FixedAttribute<PowerSource.BatReplaceability, any>;
readonly batPresent: import("@matter/main/types").OptionalAttribute<boolean, any>;
readonly activeBatFaults: import("@matter/main/types").OptionalAttribute<PowerSource.BatFault[], any>;
};
readonly events: {
readonly batFaultChange: import("@matter/main/types").OptionalEvent<import("@matter/main/types").TypeFromFields<{
current: import("@matter/main/types").FieldType<PowerSource.BatFault[]>;
previous: import("@matter/main/types").FieldType<PowerSource.BatFault[]>;
}>, any>;
};
};
}, {
readonly flags: {
readonly replaceable: true;
};
readonly component: {
readonly attributes: {
readonly batReplacementDescription: import("@matter/main/types").FixedAttribute<string, any>;
readonly batCommonDesignation: import("@matter/main/types").OptionalFixedAttribute<PowerSource.BatCommonDesignation, any>;
readonly batAnsiDesignation: import("@matter/main/types").OptionalFixedAttribute<string, any>;
readonly batIecDesignation: import("@matter/main/types").OptionalFixedAttribute<string, any>;
readonly batApprovedChemistry: import("@matter/main/types").OptionalFixedAttribute<PowerSource.BatApprovedChemistry, any>;
readonly batQuantity: import("@matter/main/types").FixedAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly replaceable: true;
};
readonly component: {
readonly attributes: {
readonly batCapacity: import("@matter/main/types").OptionalFixedAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly rechargeable: true;
};
readonly component: {
readonly attributes: {
readonly batCapacity: import("@matter/main/types").OptionalFixedAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly rechargeable: true;
};
readonly component: {
readonly attributes: {
readonly batChargeState: import("@matter/main/types").Attribute<PowerSource.BatChargeState, any>;
readonly batTimeToFullCharge: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly batFunctionalWhileCharging: import("@matter/main/types").Attribute<boolean, any>;
readonly batChargingCurrent: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly activeBatChargeFaults: import("@matter/main/types").OptionalAttribute<PowerSource.BatChargeFault[], any>;
};
readonly events: {
readonly batChargeFaultChange: import("@matter/main/types").OptionalEvent<import("@matter/main/types").TypeFromFields<{
current: import("@matter/main/types").FieldType<PowerSource.BatChargeFault[]>;
previous: import("@matter/main/types").FieldType<PowerSource.BatChargeFault[]>;
}>, any>;
};
};
}, {
readonly flags: {
readonly rechargeable: true;
readonly battery: false;
};
readonly component: false;
}, {
readonly flags: {
readonly replaceable: true;
readonly battery: false;
};
readonly component: false;
}, {
readonly flags: {
readonly wired: true;
readonly battery: true;
};
readonly component: false;
}, {
readonly flags: {
readonly wired: false;
readonly battery: false;
};
readonly component: false;
}];
}>, readonly [PowerSource.Feature.Wired]>, typeof PowerSourceServer, {
components: never[];
}> | typeof UserLabelServer | typeof FixedLabelServer | typeof BasicInformationServer | typeof BridgedDeviceBasicInformationServer | typeof GroupsServer | ClusterBehavior.Type<import("@matter/main/types").ClusterComposer.WithFeatures<import("@matter/main/types").ClusterComposer.WithFeatures<import("@matter/main/types").ClusterComposer.WithFeatures<OnOff.Cluster, readonly [OnOff.Feature.Lighting]>, readonly []>, readonly ["Lighting"]>, typeof MatterbridgeOnOffServer, import("@matter/node/behaviors").OnOffInterface> | ClusterBehavior.Type<import("@matter/main/types").ClusterComposer.WithFeatures<ClusterType.Of<{
readonly id: 8;
readonly name: "LevelControl";
readonly revision: 6;
readonly features: {
readonly onOff: import("@matter/main/types").BitFlag;
readonly lighting: import("@matter/main/types").BitFlag;
readonly frequency: import("@matter/main/types").BitFlag;
};
readonly attributes: {
readonly currentLevel: import("@matter/main/types").Attribute<number | null, any>;
readonly maxLevel: import("@matter/main/types").OptionalAttribute<number, any>;
readonly options: import("@matter/main/types").WritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>, any>;
readonly onOffTransitionTime: import("@matter/main/types").OptionalWritableAttribute<number, any>;
readonly onLevel: import("@matter/main/types").WritableAttribute<number | null, any>;
readonly onTransitionTime: import("@matter/main/types").OptionalWritableAttribute<number | null, any>;
readonly offTransitionTime: import("@matter/main/types").OptionalWritableAttribute<number | null, any>;
readonly defaultMoveRate: import("@matter/main/types").OptionalWritableAttribute<number | null, any>;
};
readonly commands: {
readonly moveToLevel: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
level: import("@matter/main/types").FieldType<number>;
transitionTime: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly move: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
moveMode: import("@matter/main/types").FieldType<LevelControl.MoveMode>;
rate: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly step: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
stepMode: import("@matter/main/types").FieldType<LevelControl.StepMode>;
stepSize: import("@matter/main/types").FieldType<number>;
transitionTime: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly stop: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly moveToLevelWithOnOff: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
level: import("@matter/main/types").FieldType<number>;
transitionTime: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly moveWithOnOff: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
moveMode: import("@matter/main/types").FieldType<LevelControl.MoveMode>;
rate: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly stepWithOnOff: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
stepMode: import("@matter/main/types").FieldType<LevelControl.StepMode>;
stepSize: import("@matter/main/types").FieldType<number>;
transitionTime: import("@matter/main/types").FieldType<number | null>;
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
readonly stopWithOnOff: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
optionsMask: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
optionsOverride: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
executeIfOff: import("@matter/main/types").BitFlag;
coupleColorTempToLevel: import("@matter/main/types").BitFlag;
}>>;
}>, void, any>;
};
readonly extensions: readonly [{
readonly flags: {
readonly lighting: true;
};
readonly component: {
readonly attributes: {
readonly remainingTime: import("@matter/main/types").Attribute<number, any>;
readonly minLevel: import("@matter/main/types").OptionalAttribute<number, any>;
readonly startUpCurrentLevel: import("@matter/main/types").WritableAttribute<number | null, any>;
};
};
}, {
readonly flags: {
readonly lighting: false;
};
readonly component: {
readonly attributes: {
readonly minLevel: import("@matter/main/types").OptionalAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly frequency: true;
};
readonly component: {
readonly attributes: {
readonly currentFrequency: import("@matter/main/types").Attribute<number, any>;
readonly minFrequency: import("@matter/main/types").Attribute<number, any>;
readonly maxFrequency: import("@matter/main/types").Attribute<number, any>;
};
readonly commands: {
readonly moveToClosestFrequency: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
frequency: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}];
}>, readonly ["OnOff", "Lighting"]>, typeof MatterbridgeLevelControlServer, import("@matter/node/behaviors").LevelControlInterface> | ClusterBehavior.Type<import("@matter/main/types").ClusterComposer.WithFeatures<import("@matter/main/types").ClusterComposer.WithFeatures<ClusterType.Of<{
readonly id: 258;
readonly name: "WindowCovering";
readonly revision: 5;
readonly features: {
readonly lift: import("@matter/main/types").BitFlag;
readonly tilt: import("@matter/main/types").BitFlag;
readonly positionAwareLift: import("@matter/main/types").BitFlag;
readonly absolutePosition: import("@matter/main/types").BitFlag;
readonly positionAwareTilt: import("@matter/main/types").BitFlag;
};
readonly attributes: {
readonly type: import("@matter/main/types").FixedAttribute<WindowCovering.WindowCoveringType, any>;
readonly configStatus: import("@matter/main/types").Attribute<import("@matter/main/types").TypeFromPartialBitSchema<{
operational: import("@matter/main/types").BitFlag;
onlineReserved: import("@matter/main/types").BitFlag;
liftMovementReversed: import("@matter/main/types").BitFlag;
liftPositionAware: import("@matter/main/types").BitFlag;
tiltPositionAware: import("@matter/main/types").BitFlag;
liftEncoderControlled: import("@matter/main/types").BitFlag;
tiltEncoderControlled: import("@matter/main/types").BitFlag;
}>, any>;
readonly operationalStatus: import("@matter/main/types").Attribute<import("@matter/main/types").TypeFromPartialBitSchema<{
global: import("@matter/main/types").BitFieldEnum<WindowCovering.MovementStatus>;
lift: import("@matter/main/types").BitFieldEnum<WindowCovering.MovementStatus>;
tilt: import("@matter/main/types").BitFieldEnum<WindowCovering.MovementStatus>;
}>, any>;
readonly endProductType: import("@matter/main/types").FixedAttribute<WindowCovering.EndProductType, any>;
readonly mode: import("@matter/main/types").WritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
motorDirectionReversed: import("@matter/main/types").BitFlag;
calibrationMode: import("@matter/main/types").BitFlag;
maintenanceMode: import("@matter/main/types").BitFlag;
ledFeedback: import("@matter/main/types").BitFlag;
}>, any>;
readonly safetyStatus: import("@matter/main/types").OptionalAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
remoteLockout: import("@matter/main/types").BitFlag;
tamperDetection: import("@matter/main/types").BitFlag;
failedCommunication: import("@matter/main/types").BitFlag;
positionFailure: import("@matter/main/types").BitFlag;
thermalProtection: import("@matter/main/types").BitFlag;
obstacleDetected: import("@matter/main/types").BitFlag;
power: import("@matter/main/types").BitFlag;
stopInput: import("@matter/main/types").BitFlag;
motorJammed: import("@matter/main/types").BitFlag;
hardwareFailure: import("@matter/main/types").BitFlag;
manualOperation: import("@matter/main/types").BitFlag;
protection: import("@matter/main/types").BitFlag;
}>, any>;
};
readonly commands: {
readonly upOrOpen: import("@matter/main/types").Command<void, void, any>;
readonly downOrClose: import("@matter/main/types").Command<void, void, any>;
readonly stopMotion: import("@matter/main/types").Command<void, void, any>;
};
readonly extensions: readonly [{
readonly flags: {
readonly lift: true;
readonly positionAwareLift: true;
readonly absolutePosition: true;
};
readonly component: {
readonly attributes: {
readonly physicalClosedLimitLift: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly currentPositionLift: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly installedOpenLimitLift: import("@matter/main/types").Attribute<number, any>;
readonly installedClosedLimitLift: import("@matter/main/types").Attribute<number, any>;
};
};
}, {
readonly flags: {
readonly tilt: true;
readonly positionAwareTilt: true;
readonly absolutePosition: true;
};
readonly component: {
readonly attributes: {
readonly physicalClosedLimitTilt: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly currentPositionTilt: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly installedOpenLimitTilt: import("@matter/main/types").Attribute<number, any>;
readonly installedClosedLimitTilt: import("@matter/main/types").Attribute<number, any>;
};
};
}, {
readonly flags: {
readonly lift: true;
};
readonly component: {
readonly attributes: {
readonly numberOfActuationsLift: import("@matter/main/types").OptionalAttribute<number, any>;
};
readonly commands: {
readonly goToLiftPercentage: import("@matter/main/types").OptionalCommand<import("@matter/main/types").TypeFromFields<{
liftPercent100thsValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly tilt: true;
};
readonly component: {
readonly attributes: {
readonly numberOfActuationsTilt: import("@matter/main/types").OptionalAttribute<number, any>;
};
readonly commands: {
readonly goToTiltPercentage: import("@matter/main/types").OptionalCommand<import("@matter/main/types").TypeFromFields<{
tiltPercent100thsValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly lift: true;
readonly positionAwareLift: true;
};
readonly component: {
readonly attributes: {
readonly currentPositionLiftPercentage: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly targetPositionLiftPercent100ths: import("@matter/main/types").Attribute<number | null, any>;
readonly currentPositionLiftPercent100ths: import("@matter/main/types").Attribute<number | null, any>;
};
readonly commands: {
readonly goToLiftPercentage: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
liftPercent100thsValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly tilt: true;
readonly positionAwareTilt: true;
};
readonly component: {
readonly attributes: {
readonly currentPositionTiltPercentage: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly targetPositionTiltPercent100ths: import("@matter/main/types").Attribute<number | null, any>;
readonly currentPositionTiltPercent100ths: import("@matter/main/types").Attribute<number | null, any>;
};
readonly commands: {
readonly goToTiltPercentage: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
tiltPercent100thsValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly lift: true;
readonly absolutePosition: true;
};
readonly component: {
readonly commands: {
readonly goToLiftValue: import("@matter/main/types").OptionalCommand<import("@matter/main/types").TypeFromFields<{
liftValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly tilt: true;
readonly absolutePosition: true;
};
readonly component: {
readonly commands: {
readonly goToTiltValue: import("@matter/main/types").OptionalCommand<import("@matter/main/types").TypeFromFields<{
tiltValue: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
};
}, {
readonly flags: {
readonly positionAwareLift: true;
readonly lift: false;
};
readonly component: false;
}, {
readonly flags: {
readonly positionAwareTilt: true;
readonly tilt: false;
};
readonly component: false;
}, {
readonly flags: {
readonly lift: false;
readonly tilt: false;
};
readonly component: false;
}];
}>, readonly [WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift]>, readonly ["Lift", "PositionAwareLift"]>, typeof MatterbridgeLiftWindowCoveringServer, import("@matter/node/behaviors").WindowCoveringInterface> | ClusterBehavior.Type<import("@matter/main/types").ClusterComposer.WithFeatures<import("@matter/main/types").ClusterComposer.WithFeatures<ClusterType.Of<{
readonly id: 513;
readonly name: "Thermostat";
readonly revision: 8;
readonly features: {
readonly heating: import("@matter/main/types").BitFlag;
readonly cooling: import("@matter/main/types").BitFlag;
readonly occupancy: import("@matter/main/types").BitFlag;
readonly scheduleConfiguration: import("@matter/main/types").BitFlag;
readonly setback: import("@matter/main/types").BitFlag;
readonly autoMode: import("@matter/main/types").BitFlag;
readonly localTemperatureNotExposed: import("@matter/main/types").BitFlag;
readonly matterScheduleConfiguration: import("@matter/main/types").BitFlag;
readonly presets: import("@matter/main/types").BitFlag;
};
readonly attributes: {
readonly localTemperature: import("@matter/main/types").Attribute<number | null, any>;
readonly outdoorTemperature: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly hvacSystemTypeConfiguration: import("@matter/main/types").OptionalWritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
coolingStage: import("@matter/main/types").BitField;
heatingStage: import("@matter/main/types").BitField;
heatingIsHeatPump: import("@matter/main/types").BitFlag;
heatingUsesFuel: import("@matter/main/types").BitFlag;
}>, any>;
readonly remoteSensing: import("@matter/main/types").OptionalWritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
localTemperature: import("@matter/main/types").BitFlag;
outdoorTemperature: import("@matter/main/types").BitFlag;
occupancy: import("@matter/main/types").BitFlag;
}>, any>;
readonly controlSequenceOfOperation: import("@matter/main/types").WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
readonly systemMode: import("@matter/main/types").WritableAttribute<Thermostat.SystemMode, any>;
readonly temperatureSetpointHold: import("@matter/main/types").OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
readonly temperatureSetpointHoldDuration: import("@matter/main/types").OptionalWritableAttribute<number | null, any>;
readonly thermostatProgrammingOperationMode: import("@matter/main/types").OptionalWritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
scheduleActive: import("@matter/main/types").BitFlag;
autoRecovery: import("@matter/main/types").BitFlag;
economy: import("@matter/main/types").BitFlag;
}>, any>;
readonly thermostatRunningState: import("@matter/main/types").OptionalAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
heat: import("@matter/main/types").BitFlag;
cool: import("@matter/main/types").BitFlag;
fan: import("@matter/main/types").BitFlag;
heatStage2: import("@matter/main/types").BitFlag;
coolStage2: import("@matter/main/types").BitFlag;
fanStage2: import("@matter/main/types").BitFlag;
fanStage3: import("@matter/main/types").BitFlag;
}>, any>;
readonly setpointChangeSource: import("@matter/main/types").OptionalAttribute<Thermostat.SetpointChangeSource, any>;
readonly setpointChangeAmount: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly setpointChangeSourceTimestamp: import("@matter/main/types").OptionalAttribute<number, any>;
readonly emergencyHeatDelta: import("@matter/main/types").OptionalWritableAttribute<number, any>;
readonly acType: import("@matter/main/types").OptionalWritableAttribute<Thermostat.AcType, any>;
readonly acCapacity: import("@matter/main/types").OptionalWritableAttribute<number, any>;
readonly acRefrigerantType: import("@matter/main/types").OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
readonly acCompressorType: import("@matter/main/types").OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
readonly acErrorCode: import("@matter/main/types").OptionalWritableAttribute<import("@matter/main/types").TypeFromPartialBitSchema<{
compressorFail: import("@matter/main/types").BitFlag;
roomSensorFail: import("@matter/main/types").BitFlag;
outdoorSensorFail: import("@matter/main/types").BitFlag;
coilSensorFail: import("@matter/main/types").BitFlag;
fanFail: import("@matter/main/types").BitFlag;
}>, any>;
readonly acLouverPosition: import("@matter/main/types").OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
readonly acCoilTemperature: import("@matter/main/types").OptionalAttribute<number | null, any>;
readonly acCapacityFormat: import("@matter/main/types").OptionalWritableAttribute<Thermostat.AcCapacityFormat, any>;
readonly setpointHoldExpiryTimestamp: import("@matter/main/types").OptionalAttribute<number | null, any>;
};
readonly commands: {
readonly setpointRaiseLower: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
mode: import("@matter/main/types").FieldType<Thermostat.SetpointRaiseLowerMode>;
amount: import("@matter/main/types").FieldType<number>;
}>, void, any>;
};
readonly extensions: readonly [{
readonly flags: {
readonly occupancy: true;
};
readonly component: {
readonly attributes: {
readonly occupancy: import("@matter/main/types").Attribute<import("@matter/main/types").TypeFromPartialBitSchema<{
occupied: import("@matter/main/types").BitFlag;
}>, any>;
};
};
}, {
readonly flags: {
readonly heating: true;
};
readonly component: {
readonly attributes: {
readonly absMinHeatSetpointLimit: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly absMaxHeatSetpointLimit: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly piHeatingDemand: import("@matter/main/types").OptionalAttribute<number, any>;
readonly occupiedHeatingSetpoint: import("@matter/main/types").WritableAttribute<number, any>;
readonly minHeatSetpointLimit: import("@matter/main/types").OptionalWritableAttribute<number, any>;
readonly maxHeatSetpointLimit: import("@matter/main/types").OptionalWritableAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly cooling: true;
};
readonly component: {
readonly attributes: {
readonly absMinCoolSetpointLimit: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly absMaxCoolSetpointLimit: import("@matter/main/types").OptionalFixedAttribute<number, any>;
readonly piCoolingDemand: import("@matter/main/types").OptionalAttribute<number, any>;
readonly occupiedCoolingSetpoint: import("@matter/main/types").WritableAttribute<number, any>;
readonly minCoolSetpointLimit: import("@matter/main/types").OptionalWritableAttribute<number, any>;
readonly maxCoolSetpointLimit: import("@matter/main/types").OptionalWritableAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly localTemperatureNotExposed: false;
};
readonly component: {
readonly attributes: {
readonly localTemperatureCalibration: import("@matter/main/types").OptionalWritableAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly cooling: true;
readonly occupancy: true;
};
readonly component: {
readonly attributes: {
readonly unoccupiedCoolingSetpoint: import("@matter/main/types").WritableAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly heating: true;
readonly occupancy: true;
};
readonly component: {
readonly attributes: {
readonly unoccupiedHeatingSetpoint: import("@matter/main/types").WritableAttribute<number, any>;
};
};
}, {
readonly flags: {
readonly autoMode: true;
};
readonly component: {
readonly attributes: {
readonly minSetpointDeadBand: import("@matter/main/types").WritableAttribute<number, any>;
readonly thermostatRunningMode: import("@matter/main/types").OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
};
};
}, {
readonly flags: {
readonly scheduleConfiguration: true;
};
readonly component: {
readonly attributes: {
readonly startOfWeek: import("@matter/main/types").FixedAttribute<Thermostat.StartOfWeek, any>;
readonly numberOfWeeklyTransitions: import("@matter/main/types").FixedAttribute<number, any>;
readonly numberOfDailyTransitions: import("@matter/main/types").FixedAttribute<number, any>;
};
readonly commands: {
readonly setWeeklySchedule: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
numberOfTransitionsForSequence: import("@matter/main/types").FieldType<number>;
dayOfWeekForSequence: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
sunday: import("@matter/main/types").BitFlag;
monday: import("@matter/main/types").BitFlag;
tuesday: import("@matter/main/types").BitFlag;
wednesday: import("@matter/main/types").BitFlag;
thursday: import("@matter/main/types").BitFlag;
friday: import("@matter/main/types").BitFlag;
saturday: import("@matter/main/types").BitFlag;
away: import("@matter/main/types").BitFlag;
}>>;
modeForSequence: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
heatSetpointPresent: import("@matter/main/types").BitFlag;
coolSetpointPresent: import("@matter/main/types").BitFlag;
}>>;
transitions: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromFields<{
transitionTime: import("@matter/main/types").FieldType<number>;
heatSetpoint: import("@matter/main/types").FieldType<number | null>;
coolSetpoint: import("@matter/main/types").FieldType<number | null>;
}>[]>;
}>, void, any>;
readonly getWeeklySchedule: import("@matter/main/types").Command<import("@matter/main/types").TypeFromFields<{
daysToReturn: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
sunday: import("@matter/main/types").BitFlag;
monday: import("@matter/main/types").BitFlag;
tuesday: import("@matter/main/types").BitFlag;
wednesday: import("@matter/main/types").BitFlag;
thursday: import("@matter/main/types").BitFlag;
friday: import("@matter/main/types").BitFlag;
saturday: import("@matter/main/types").BitFlag;
away: import("@matter/main/types").BitFlag;
}>>;
modeToReturn: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
heatSetpointPresent: import("@matter/main/types").BitFlag;
coolSetpointPresent: import("@matter/main/types").BitFlag;
}>>;
}>, import("@matter/main/types").TypeFromFields<{
numberOfTransitionsForSequence: import("@matter/main/types").FieldType<number>;
dayOfWeekForSequence: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
sunday: import("@matter/main/types").BitFlag;
monday: import("@matter/main/types").BitFlag;
tuesday: import("@matter/main/types").BitFlag;
wednesday: import("@matter/main/types").BitFlag;
thursday: import("@matter/main/types").BitFlag;
friday: import("@matter/main/types").BitFlag;
saturday: import("@matter/main/types").BitFlag;
away: import("@matter/main/types").BitFlag;
}>>;
modeForSequence: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
heatSetpointPresent: import("@matter/main/types").BitFlag;
coolSetpointPresent: import("@matter/main/types").BitFlag;
}>>;
transitions: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromFields<{
transitionTime: import("@matter/main/types").FieldType<number>;
heatSetpoint: import("@matter/main/types").FieldType<number | null>;
coolSetpoint: import("@matter/main/types").FieldType<number | null>;
}>[]>;
}>, any>;
readonly clearWeeklySchedule: import("@matter/main/types").Command<void, void, any>;
};
};
}, {
readonly flags: {
readonly setback: true;
};
readonly component: {
readonly attributes: {
readonly occupiedSetback: import("@matter/main/types").WritableAttribute<number | null, any>;
readonly occupiedSetbackMin: import("@matter/main/types").FixedAttribute<number | null, any>;
readonly occupiedSetbackMax: import("@matter/main/types").FixedAttribute<number | null, any>;
};
};
}, {
readonly flags: {
readonly setback: true;
readonly occupancy: true;
};
readonly component: {
readonly attributes: {
readonly unoccupiedSetback: import("@matter/main/types").WritableAttribute<number | null, any>;
readonly unoccupiedSetbackMin: import("@matter/main/types").FixedAttribute<number | null, any>;
readonly unoccupiedSetbackMax: import("@matter/main/types").FixedAttribute<number | null, any>;
};
};
}, {
readonly flags: {
readonly presets: true;
};
readonly component: {
readonly attributes: {
readonly presetTypes: import("@matter/main/types").FixedAttribute<import("@matter/main/types").TypeFromFields<{
presetScenario: import("@matter/main/types").FieldType<Thermostat.PresetScenario>;
numberOfPresets: import("@matter/main/types").FieldType<number>;
presetTypeFeatures: import("@matter/main/types").FieldType<import("@matter/main/types").TypeFromPartialBitSchema<{
automatic: import("@matter/main/types").BitFlag;
supportsNames: import("@matter/main/types").BitFlag;
}>>;
}>[], any>;
readonly numberOfPresets: import("@matter/main/types").FixedAttribute<number, any>;
readonly activePresetHandle: impo