UNPKG

matterbridge

Version:
820 lines • 164 kB
/** * 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