/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
/*** THIS FILE IS GENERATED, DO NOT EDIT ***/
import { MutableCluster } from "../cluster/mutation/MutableCluster.js";
import { Attribute, FixedAttribute, Command } from "../cluster/Cluster.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { TypeFromSchema } from "../tlv/TlvSchema.js";
import { Identity } from "#general";
export declare namespace TemperatureControl {
    /**
     * These are optional features supported by TemperatureControlCluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 8.2.4
     */
    enum Feature {
        /**
         * TemperatureNumber (TN)
         *
         * For devices that use an actual temperature value for the temperature setpoint, such as some water heaters,
         * the feature TN shall be used. Note that this cluster provides and supports temperatures in degrees Celsius
         * via the temperature data type.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.1
         */
        TemperatureNumber = "TemperatureNumber",
        /**
         * TemperatureLevel (TL)
         *
         * For devices that use vendor-specific temperature levels for the temperature setpoint, such as some washers,
         * the feature TL shall be used.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.2
         */
        TemperatureLevel = "TemperatureLevel",
        /**
         * TemperatureStep (STEP)
         *
         * For devices that support discrete temperature setpoints that are larger than the temperature resolution
         * imposed via the temperature data type, the Step feature may be used.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.3
         */
        TemperatureStep = "TemperatureStep"
    }
    /**
     * Input to the TemperatureControl setTemperature command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1
     */
    const TlvSetTemperatureRequest: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall specify the desired temperature setpoint that the server is to be set to.
         *
         * The TargetTemperature shall be from MinTemperature to MaxTemperature inclusive. If the Step attribute is
         * supported, TargetTemperature shall be such that (TargetTemperature - MinTemperature) % Step == 0.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.1
         */
        targetTemperature: import("../tlv/TlvObject.js").OptionalFieldType<number>;
        /**
         * This field shall specify the index of the list item in the SupportedTemperatureLevels list that represents
         * the desired temperature level setting of the server. The value of this field shall be between 0 and the
         * length of the SupportedTemperatureLevels list -1.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.2
         */
        targetTemperatureLevel: import("../tlv/TlvObject.js").OptionalFieldType<number>;
    }>;
    /**
     * Input to the TemperatureControl setTemperature command
     *
     * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1
     */
    interface SetTemperatureRequest extends TypeFromSchema<typeof TlvSetTemperatureRequest> {
    }
    /**
     * A TemperatureControlCluster supports these elements if it supports feature TemperatureNumber.
     */
    const TemperatureNumberComponent: {
        readonly attributes: {
            /**
             * Indicates the desired Temperature Setpoint on the device.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.1
             */
            readonly temperatureSetpoint: Attribute<number, any>;
            /**
             * Indicates the minimum temperature to which the TemperatureSetpoint attribute may be set.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.2
             */
            readonly minTemperature: FixedAttribute<number, any>;
            /**
             * Indicates the maximum temperature to which the TemperatureSetpoint attribute may be set.
             *
             * If the Step attribute is supported, this attribute shall be such that MaxTemperature = MinTemperature +
             * (Step * n), where n is an integer and n > 0. If the Step attribute is not supported, this attribute shall
             * be such that MaxTemperature > MinTemperature.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.3
             */
            readonly maxTemperature: FixedAttribute<number, any>;
        };
    };
    /**
     * A TemperatureControlCluster supports these elements if it supports feature TemperatureStep.
     */
    const TemperatureStepComponent: {
        readonly attributes: {
            /**
             * Indicates the discrete value by which the TemperatureSetpoint attribute can be changed via the
             * SetTemperature command.
             *
             * For example, if the value of MinTemperature is 25.00C (2500) and the Step value is 0.50C (50), valid
             * values of the TargetTemperature field of the SetTemperature command would be 25.50C (2550), 26.00C
             * (2600), 26.50C (2650), etc.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.4
             */
            readonly step: FixedAttribute<number, any>;
        };
    };
    /**
     * A TemperatureControlCluster supports these elements if it supports feature TemperatureLevel.
     */
    const TemperatureLevelComponent: {
        readonly attributes: {
            /**
             * Indicates the currently selected temperature level setting of the server. This attribute shall be the
             * positional index of the list item in the SupportedTemperatureLevels list that represents the currently
             * selected temperature level setting of the server.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.5
             */
            readonly selectedTemperatureLevel: Attribute<number, any>;
            /**
             * Indicates the list of supported temperature level settings that may be selected via the
             * TargetTemperatureLevel field in the SetTemperature command. Each string is readable text that describes
             * each temperature level setting in a way that can be easily understood by humans. For example, a washing
             * machine can have temperature levels like "Cold", "Warm", and "Hot". Each string is specified by the
             * manufacturer.
             *
             * Each item in this list shall represent a unique temperature level. Each entry in this list shall have a
             * unique value. The entries in this list shall appear in order of increasing temperature level with list
             * item 0 being the setting with the lowest temperature level.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.6
             */
            readonly supportedTemperatureLevels: Attribute<string[], any>;
        };
    };
    /**
     * These elements and properties are present in all TemperatureControl clusters.
     */
    const Base: {
        readonly id: 86;
        readonly name: "TemperatureControl";
        readonly revision: 1;
        readonly features: {
            /**
             * For devices that use an actual temperature value for the temperature setpoint, such as some water
             * heaters, the feature TN shall be used. Note that this cluster provides and supports temperatures in
             * degrees Celsius via the temperature data type.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.1
             */
            readonly temperatureNumber: BitFlag;
            /**
             * For devices that use vendor-specific temperature levels for the temperature setpoint, such as some
             * washers, the feature TL shall be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.2
             */
            readonly temperatureLevel: BitFlag;
            /**
             * For devices that support discrete temperature setpoints that are larger than the temperature resolution
             * imposed via the temperature data type, the Step feature may be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.3
             */
            readonly temperatureStep: BitFlag;
        };
        readonly commands: {
            /**
             * This command is used to set the temperature setpoint.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1
             */
            readonly setTemperature: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the desired temperature setpoint that the server is to be set to.
                 *
                 * The TargetTemperature shall be from MinTemperature to MaxTemperature inclusive. If the Step attribute is
                 * supported, TargetTemperature shall be such that (TargetTemperature - MinTemperature) % Step == 0.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.1
                 */
                targetTemperature: import("../tlv/TlvObject.js").OptionalFieldType<number>;
                /**
                 * This field shall specify the index of the list item in the SupportedTemperatureLevels list that represents
                 * the desired temperature level setting of the server. The value of this field shall be between 0 and the
                 * length of the SupportedTemperatureLevels list -1.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.2
                 */
                targetTemperatureLevel: import("../tlv/TlvObject.js").OptionalFieldType<number>;
            }>, void, any>;
        };
        /**
         * This metadata controls which TemperatureControlCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly temperatureNumber: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the desired Temperature Setpoint on the device.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.1
                     */
                    readonly temperatureSetpoint: Attribute<number, any>;
                    /**
                     * Indicates the minimum temperature to which the TemperatureSetpoint attribute may be set.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.2
                     */
                    readonly minTemperature: FixedAttribute<number, any>;
                    /**
                     * Indicates the maximum temperature to which the TemperatureSetpoint attribute may be set.
                     *
                     * If the Step attribute is supported, this attribute shall be such that MaxTemperature = MinTemperature +
                     * (Step * n), where n is an integer and n > 0. If the Step attribute is not supported, this attribute shall
                     * be such that MaxTemperature > MinTemperature.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.3
                     */
                    readonly maxTemperature: FixedAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureStep: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the discrete value by which the TemperatureSetpoint attribute can be changed via the
                     * SetTemperature command.
                     *
                     * For example, if the value of MinTemperature is 25.00C (2500) and the Step value is 0.50C (50), valid
                     * values of the TargetTemperature field of the SetTemperature command would be 25.50C (2550), 26.00C
                     * (2600), 26.50C (2650), etc.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.4
                     */
                    readonly step: FixedAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureLevel: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the currently selected temperature level setting of the server. This attribute shall be the
                     * positional index of the list item in the SupportedTemperatureLevels list that represents the currently
                     * selected temperature level setting of the server.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.5
                     */
                    readonly selectedTemperatureLevel: Attribute<number, any>;
                    /**
                     * Indicates the list of supported temperature level settings that may be selected via the
                     * TargetTemperatureLevel field in the SetTemperature command. Each string is readable text that describes
                     * each temperature level setting in a way that can be easily understood by humans. For example, a washing
                     * machine can have temperature levels like "Cold", "Warm", and "Hot". Each string is specified by the
                     * manufacturer.
                     *
                     * Each item in this list shall represent a unique temperature level. Each entry in this list shall have a
                     * unique value. The entries in this list shall appear in order of increasing temperature level with list
                     * item 0 being the setting with the lowest temperature level.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.6
                     */
                    readonly supportedTemperatureLevels: Attribute<string[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureStep: true;
                readonly temperatureNumber: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly temperatureNumber: true;
                readonly temperatureLevel: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly temperatureNumber: false;
                readonly temperatureLevel: false;
            };
            readonly component: false;
        }];
    };
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster.ExtensibleOnly<{
        readonly id: 86;
        readonly name: "TemperatureControl";
        readonly revision: 1;
        readonly features: {
            /**
             * For devices that use an actual temperature value for the temperature setpoint, such as some water
             * heaters, the feature TN shall be used. Note that this cluster provides and supports temperatures in
             * degrees Celsius via the temperature data type.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.1
             */
            readonly temperatureNumber: BitFlag;
            /**
             * For devices that use vendor-specific temperature levels for the temperature setpoint, such as some
             * washers, the feature TL shall be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.2
             */
            readonly temperatureLevel: BitFlag;
            /**
             * For devices that support discrete temperature setpoints that are larger than the temperature resolution
             * imposed via the temperature data type, the Step feature may be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.3
             */
            readonly temperatureStep: BitFlag;
        };
        readonly commands: {
            /**
             * This command is used to set the temperature setpoint.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1
             */
            readonly setTemperature: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the desired temperature setpoint that the server is to be set to.
                 *
                 * The TargetTemperature shall be from MinTemperature to MaxTemperature inclusive. If the Step attribute is
                 * supported, TargetTemperature shall be such that (TargetTemperature - MinTemperature) % Step == 0.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.1
                 */
                targetTemperature: import("../tlv/TlvObject.js").OptionalFieldType<number>;
                /**
                 * This field shall specify the index of the list item in the SupportedTemperatureLevels list that represents
                 * the desired temperature level setting of the server. The value of this field shall be between 0 and the
                 * length of the SupportedTemperatureLevels list -1.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.2
                 */
                targetTemperatureLevel: import("../tlv/TlvObject.js").OptionalFieldType<number>;
            }>, void, any>;
        };
        /**
         * This metadata controls which TemperatureControlCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly temperatureNumber: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the desired Temperature Setpoint on the device.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.1
                     */
                    readonly temperatureSetpoint: Attribute<number, any>;
                    /**
                     * Indicates the minimum temperature to which the TemperatureSetpoint attribute may be set.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.2
                     */
                    readonly minTemperature: FixedAttribute<number, any>;
                    /**
                     * Indicates the maximum temperature to which the TemperatureSetpoint attribute may be set.
                     *
                     * If the Step attribute is supported, this attribute shall be such that MaxTemperature = MinTemperature +
                     * (Step * n), where n is an integer and n > 0. If the Step attribute is not supported, this attribute shall
                     * be such that MaxTemperature > MinTemperature.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.3
                     */
                    readonly maxTemperature: FixedAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureStep: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the discrete value by which the TemperatureSetpoint attribute can be changed via the
                     * SetTemperature command.
                     *
                     * For example, if the value of MinTemperature is 25.00C (2500) and the Step value is 0.50C (50), valid
                     * values of the TargetTemperature field of the SetTemperature command would be 25.50C (2550), 26.00C
                     * (2600), 26.50C (2650), etc.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.4
                     */
                    readonly step: FixedAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureLevel: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * Indicates the currently selected temperature level setting of the server. This attribute shall be the
                     * positional index of the list item in the SupportedTemperatureLevels list that represents the currently
                     * selected temperature level setting of the server.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.5
                     */
                    readonly selectedTemperatureLevel: Attribute<number, any>;
                    /**
                     * Indicates the list of supported temperature level settings that may be selected via the
                     * TargetTemperatureLevel field in the SetTemperature command. Each string is readable text that describes
                     * each temperature level setting in a way that can be easily understood by humans. For example, a washing
                     * machine can have temperature levels like "Cold", "Warm", and "Hot". Each string is specified by the
                     * manufacturer.
                     *
                     * Each item in this list shall represent a unique temperature level. Each entry in this list shall have a
                     * unique value. The entries in this list shall appear in order of increasing temperature level with list
                     * item 0 being the setting with the lowest temperature level.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 8.2.5.6
                     */
                    readonly supportedTemperatureLevels: Attribute<string[], any>;
                };
            };
        }, {
            readonly flags: {
                readonly temperatureStep: true;
                readonly temperatureNumber: false;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly temperatureNumber: true;
                readonly temperatureLevel: true;
            };
            readonly component: false;
        }, {
            readonly flags: {
                readonly temperatureNumber: false;
                readonly temperatureLevel: false;
            };
            readonly component: false;
        }];
    }>;
    /**
     * This cluster provides an interface to the setpoint temperature on devices such as washers, refrigerators, and
     * water heaters. The setpoint temperature is the temperature to which a device using this cluster would attempt to
     * control to. This cluster does not provide access to the actual or physical temperature associated with any device
     * using this cluster. Access to the physical temperature associated with a device using this cluster would be
     * provided by other clusters as part of that devices device type definition.
     *
     * The values and constraints of the attributes communicated to clients SHOULD match the controls on any physical
     * interface on a device implementing this server. For example, the value of the Step attribute SHOULD match the
     * incremental value by which the temperature setpoint can be changed on the physical device.
     *
     * Per the Matter specification you cannot use {@link TemperatureControlCluster} without enabling certain feature
     * combinations. You must use the {@link with} factory method to obtain a working cluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 8.2
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: 86;
        readonly name: "TemperatureControl";
        readonly revision: 1;
        readonly features: {
            /**
             * For devices that use an actual temperature value for the temperature setpoint, such as some water
             * heaters, the feature TN shall be used. Note that this cluster provides and supports temperatures in
             * degrees Celsius via the temperature data type.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.1
             */
            readonly temperatureNumber: BitFlag;
            /**
             * For devices that use vendor-specific temperature levels for the temperature setpoint, such as some
             * washers, the feature TL shall be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.2
             */
            readonly temperatureLevel: BitFlag;
            /**
             * For devices that support discrete temperature setpoints that are larger than the temperature resolution
             * imposed via the temperature data type, the Step feature may be used.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.4.3
             */
            readonly temperatureStep: BitFlag;
        };
        readonly attributes: {
            readonly temperatureSetpoint: Attribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureNumber: boolean;
                }];
            };
            readonly minTemperature: FixedAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureNumber: boolean;
                }];
            };
            readonly maxTemperature: FixedAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureNumber: boolean;
                }];
            };
            readonly step: FixedAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureStep: boolean;
                }];
            };
            readonly selectedTemperatureLevel: Attribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureLevel: boolean;
                }];
            };
            readonly supportedTemperatureLevels: Attribute<string[], any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
                readonly mandatoryIf: [] | [{
                    temperatureLevel: boolean;
                }];
            };
        };
        readonly commands: {
            /**
             * This command is used to set the temperature setpoint.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1
             */
            readonly setTemperature: Command<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the desired temperature setpoint that the server is to be set to.
                 *
                 * The TargetTemperature shall be from MinTemperature to MaxTemperature inclusive. If the Step attribute is
                 * supported, TargetTemperature shall be such that (TargetTemperature - MinTemperature) % Step == 0.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.1
                 */
                targetTemperature: import("../tlv/TlvObject.js").OptionalFieldType<number>;
                /**
                 * This field shall specify the index of the list item in the SupportedTemperatureLevels list that represents
                 * the desired temperature level setting of the server. The value of this field shall be between 0 and the
                 * length of the SupportedTemperatureLevels list -1.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 8.2.6.1.2
                 */
                targetTemperatureLevel: import("../tlv/TlvObject.js").OptionalFieldType<number>;
            }>, void, any>;
        };
    }, []>;
    /**
     * This cluster supports all TemperatureControl features. It may support illegal feature combinations.
     *
     * If you use this cluster you must manually specify which features are active and ensure the set of active features
     * is legal per the Matter specification.
     */
    interface Complete extends Identity<typeof CompleteInstance> {
    }
    const Complete: Complete;
}
export type TemperatureControlCluster = TemperatureControl.Cluster;
export declare const TemperatureControlCluster: TemperatureControl.Cluster;
//# sourceMappingURL=temperature-control.d.ts.map