/**
 * @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 { OptionalWritableAttribute, Attribute, FixedAttribute, OptionalFixedAttribute, OptionalEvent } from "../cluster/Cluster.js";
import { BitFlag } from "../schema/BitmapSchema.js";
import { TypeFromSchema } from "../tlv/TlvSchema.js";
import { Identity } from "@matter/general";
export declare namespace OccupancySensing {
    /**
     * These are optional features supported by OccupancySensingCluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.4
     */
    enum Feature {
        /**
         * Other (OTHER)
         *
         * Supports sensing using a modality not listed in the other bits
         */
        Other = "Other",
        /**
         * PassiveInfrared (PIR)
         *
         * Supports sensing using PIR (Passive InfraRed)
         */
        PassiveInfrared = "PassiveInfrared",
        /**
         * Ultrasonic (US)
         *
         * Supports sensing using UltraSound
         */
        Ultrasonic = "Ultrasonic",
        /**
         * PhysicalContact (PHY)
         *
         * Supports sensing using a physical contact
         */
        PhysicalContact = "PhysicalContact",
        /**
         * ActiveInfrared (AIR)
         *
         * Supports sensing using Active InfraRed measurement (e.g. time-of-flight or transflective/reflective IR
         * sensing)
         */
        ActiveInfrared = "ActiveInfrared",
        /**
         * Radar (RAD)
         *
         * Supports sensing using radar waves (microwave)
         */
        Radar = "Radar",
        /**
         * RfSensing (RFS)
         *
         * Supports sensing using analysis of radio signals, e.g.: RSSI, CSI and/or any other metric from the signal
         */
        RfSensing = "RfSensing",
        /**
         * Vision (VIS)
         *
         * Supports sensing based on analyzing images
         */
        Vision = "Vision"
    }
    /**
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1
     */
    const Occupancy: {
        /**
         * Indicates the sensed occupancy state
         *
         * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
         * unoccupied state.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
         */
        occupied: BitFlag;
    };
    /**
     * > [!NOTE]
     *
     * > This enum is as defined in ClusterRevision 4 and its definition shall NOT be extended; the feature flags
     *   provide the sensor modality (or modalities) for later cluster revisions. See Backward Compatibility section.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.3
     */
    enum OccupancySensorType {
        /**
         * Indicates a passive infrared sensor.
         */
        Pir = 0,
        /**
         * Indicates a ultrasonic sensor.
         */
        Ultrasonic = 1,
        /**
         * Indicates a passive infrared and ultrasonic sensor.
         */
        PirAndUltrasonic = 2,
        /**
         * Indicates a physical contact sensor.
         */
        PhysicalContact = 3
    }
    /**
     * > [!NOTE]
     *
     * > This enum is as defined in ClusterRevision 4 and its definition shall NOT be extended; the feature flags
     *   provide the sensor modality (or modalities) for later cluster revisions. See Backward Compatibility section.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.2
     */
    const OccupancySensorTypeBitmap: {
        /**
         * Indicates a passive infrared sensor.
         */
        pir: BitFlag;
        /**
         * Indicates a ultrasonic sensor.
         */
        ultrasonic: BitFlag;
        /**
         * Indicates a physical contact sensor.
         */
        physicalContact: BitFlag;
    };
    /**
     * This structure provides information on the server’s supported values for the HoldTime attribute.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4
     */
    const TlvHoldTimeLimits: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall specify the minimum value of the server’s supported value for the HoldTime attribute, in
         * seconds.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.1
         */
        holdTimeMin: import("../tlv/TlvObject.js").FieldType<number>;
        /**
         * This field shall specify the maximum value of the server’s supported value for the HoldTime attribute, in
         * seconds.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.2
         */
        holdTimeMax: import("../tlv/TlvObject.js").FieldType<number>;
        /**
         * This field shall specify the (manufacturer-determined) default value of the server’s HoldTime attribute, in
         * seconds. This is the value that a client who wants to reset the settings to a valid default SHOULD use.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.3
         */
        holdTimeDefault: import("../tlv/TlvObject.js").FieldType<number>;
    }>;
    /**
     * This structure provides information on the server’s supported values for the HoldTime attribute.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4
     */
    interface HoldTimeLimits extends TypeFromSchema<typeof TlvHoldTimeLimits> {
    }
    /**
     * Body of the OccupancySensing occupancyChanged event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1
     */
    const TlvOccupancyChangedEvent: import("../tlv/TlvObject.js").ObjectSchema<{
        /**
         * This field shall indicate the new value of the Occupancy attribute.
         *
         * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1.1
         */
        occupancy: import("../tlv/TlvObject.js").FieldType<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
            /**
             * Indicates the sensed occupancy state
             *
             * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
             * unoccupied state.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
             */
            occupied: BitFlag;
        }>>;
    }>;
    /**
     * Body of the OccupancySensing occupancyChanged event
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1
     */
    interface OccupancyChangedEvent extends TypeFromSchema<typeof TlvOccupancyChangedEvent> {
    }
    /**
     * A OccupancySensingCluster supports these elements if it supports feature PassiveInfrared.
     */
    const PassiveInfraredComponent: {
        readonly attributes: {
            /**
             * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its unoccupied
             * state after the last detection of occupancy in the sensed area.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.6
             */
            readonly pirOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its occupied
             * state after the first detection of occupancy in the sensed area.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.7
             */
            readonly pirUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the number of occupancy detection events that must occur in the period
             * PIRUnoccupiedToOccupiedDelay, before the PIR sensor changes to its occupied state.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.8
             */
            readonly pirUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
        };
    };
    /**
     * A OccupancySensingCluster supports these elements if it supports feature Ultrasonic.
     */
    const UltrasonicComponent: {
        readonly attributes: {
            /**
             * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
             * unoccupied state after the last detection of occupancy in the sensed area.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.9
             */
            readonly ultrasonicOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
             * occupied state after the first detection of occupancy in the sensed area.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.10
             */
            readonly ultrasonicUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the number of occupancy detection events that must occur in the period
             * UltrasonicUnoccupiedToOccupiedDelay, before the Ultrasonic sensor changes to its occupied state.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.11
             */
            readonly ultrasonicUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
        };
    };
    /**
     * A OccupancySensingCluster supports these elements if it supports feature PhysicalContact.
     */
    const PhysicalContactComponent: {
        readonly attributes: {
            /**
             * This attribute shall specify the time delay, in seconds, before the physical contact occupancy sensor
             * changes to its unoccupied state after detecting the unoccupied event.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.12
             */
            readonly physicalContactOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the physical contact sensor changes to
             * its occupied state after the first detection of the occupied event.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.13
             */
            readonly physicalContactUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
            /**
             * This attribute shall specify the number of occupancy detection events that must occur in the period
             * PhysicalContactUnoccupiedToOccupiedDelay, before the PhysicalContact sensor changes to its occupied
             * state.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.14
             */
            readonly physicalContactUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
        };
    };
    /**
     * These elements and properties are present in all OccupancySensing clusters.
     */
    const Base: {
        readonly id: 1030;
        readonly name: "OccupancySensing";
        readonly revision: 5;
        readonly features: {
            /**
             * Supports sensing using a modality not listed in the other bits
             */
            readonly other: BitFlag;
            /**
             * Supports sensing using PIR (Passive InfraRed)
             */
            readonly passiveInfrared: BitFlag;
            /**
             * Supports sensing using UltraSound
             */
            readonly ultrasonic: BitFlag;
            /**
             * Supports sensing using a physical contact
             */
            readonly physicalContact: BitFlag;
            /**
             * Supports sensing using Active InfraRed measurement (e.g. time-of-flight or transflective/reflective IR
             * sensing)
             */
            readonly activeInfrared: BitFlag;
            /**
             * Supports sensing using radar waves (microwave)
             */
            readonly radar: BitFlag;
            /**
             * Supports sensing using analysis of radio signals, e.g.: RSSI, CSI and/or any other metric from the signal
             */
            readonly rfSensing: BitFlag;
            /**
             * Supports sensing based on analyzing images
             */
            readonly vision: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the sensed (processed) status of occupancy. For compatibility reasons this is expressed as a
             * bitmap where the status is indicated in bit 0: a value of 1 means occupied, and 0 means unoccupied, with
             * the other bits set to 0; this can be considered equivalent to a boolean.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.1
             */
            readonly occupancy: Attribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates the sensed occupancy state
                 *
                 * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                 * unoccupied state.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                 */
                occupied: BitFlag;
            }>, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorType: FixedAttribute<OccupancySensorType, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorTypeBitmap: FixedAttribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates a passive infrared sensor.
                 */
                pir: BitFlag;
                /**
                 * Indicates a ultrasonic sensor.
                 */
                ultrasonic: BitFlag;
                /**
                 * Indicates a physical contact sensor.
                 */
                physicalContact: BitFlag;
            }>, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the sensor changes to its unoccupied
             * state after the last detection of occupancy in the sensed area. This is equivalent to the legacy
             * *OccupiedToUnoccupiedDelay attributes.
             *
             * Low values of HoldTime SHOULD be avoided since they could lead to many reporting messages. A value 0 for
             * HoldTime shall NOT be used.
             *
             * The figure below illustrates this with an example of how this attribute is used for a PIR sensor. It uses
             * threshold detection to generate an "internal detection" signal, which needs post-processing to become
             * usable for transmission (traffic shaping). The bit in the Occupancy attribute will be set to 1 when the
             * internal detection signal goes high, and will stay at 1 for HoldTime after the (last) instance where the
             * internal detection signal goes low.
             *
             * The top half of the figure shows the case of a single trigger: the bit in the Occupancy attribute will be
             * 1 for the duration of the PIR signal exceeding the threshold plus HoldTime. The bottom half of the figure
             * shows the case of multiple triggers: the second trigger starts before the HoldTime of the first trigger
             * has expired; this results in a single period of the bit in the Occupancy attribute being 1. The bit in
             * the Occupancy attribute will be set to 1 from the start of the first period where the PIR signal exceeds
             * the threshold until HoldTime after the last moment where the PIR exceeded the threshold.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.3
             */
            readonly holdTime: OptionalWritableAttribute<number, any>;
            /**
             * Indicates the server’s limits, and default value, for the HoldTime attribute.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.4
             */
            readonly holdTimeLimits: OptionalFixedAttribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the minimum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.1
                 */
                holdTimeMin: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the maximum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.2
                 */
                holdTimeMax: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the (manufacturer-determined) default value of the server’s HoldTime attribute, in
                 * seconds. This is the value that a client who wants to reset the settings to a valid default SHOULD use.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.3
                 */
                holdTimeDefault: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
        readonly events: {
            /**
             * If this event is supported, it shall be generated when the Occupancy attribute changes.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1
             */
            readonly occupancyChanged: OptionalEvent<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the Occupancy attribute.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1.1
                 */
                occupancy: import("../tlv/TlvObject.js").FieldType<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                    /**
                     * Indicates the sensed occupancy state
                     *
                     * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                     * unoccupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                     */
                    occupied: BitFlag;
                }>>;
            }>, any>;
        };
        /**
         * This metadata controls which OccupancySensingCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly passiveInfrared: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its unoccupied
                     * state after the last detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.6
                     */
                    readonly pirOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its occupied
                     * state after the first detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.7
                     */
                    readonly pirUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * PIRUnoccupiedToOccupiedDelay, before the PIR sensor changes to its occupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.8
                     */
                    readonly pirUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly ultrasonic: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
                     * unoccupied state after the last detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.9
                     */
                    readonly ultrasonicOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
                     * occupied state after the first detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.10
                     */
                    readonly ultrasonicUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * UltrasonicUnoccupiedToOccupiedDelay, before the Ultrasonic sensor changes to its occupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.11
                     */
                    readonly ultrasonicUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly physicalContact: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the physical contact occupancy sensor
                     * changes to its unoccupied state after detecting the unoccupied event.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.12
                     */
                    readonly physicalContactOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the physical contact sensor changes to
                     * its occupied state after the first detection of the occupied event.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.13
                     */
                    readonly physicalContactUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * PhysicalContactUnoccupiedToOccupiedDelay, before the PhysicalContact sensor changes to its occupied
                     * state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.14
                     */
                    readonly physicalContactUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly other: false;
                readonly passiveInfrared: false;
                readonly ultrasonic: false;
                readonly physicalContact: false;
                readonly activeInfrared: false;
                readonly radar: false;
                readonly rfSensing: false;
                readonly vision: false;
            };
            readonly component: false;
        }];
    };
    /**
     * @see {@link Cluster}
     */
    const ClusterInstance: MutableCluster.ExtensibleOnly<{
        readonly id: 1030;
        readonly name: "OccupancySensing";
        readonly revision: 5;
        readonly features: {
            /**
             * Supports sensing using a modality not listed in the other bits
             */
            readonly other: BitFlag;
            /**
             * Supports sensing using PIR (Passive InfraRed)
             */
            readonly passiveInfrared: BitFlag;
            /**
             * Supports sensing using UltraSound
             */
            readonly ultrasonic: BitFlag;
            /**
             * Supports sensing using a physical contact
             */
            readonly physicalContact: BitFlag;
            /**
             * Supports sensing using Active InfraRed measurement (e.g. time-of-flight or transflective/reflective IR
             * sensing)
             */
            readonly activeInfrared: BitFlag;
            /**
             * Supports sensing using radar waves (microwave)
             */
            readonly radar: BitFlag;
            /**
             * Supports sensing using analysis of radio signals, e.g.: RSSI, CSI and/or any other metric from the signal
             */
            readonly rfSensing: BitFlag;
            /**
             * Supports sensing based on analyzing images
             */
            readonly vision: BitFlag;
        };
        readonly attributes: {
            /**
             * Indicates the sensed (processed) status of occupancy. For compatibility reasons this is expressed as a
             * bitmap where the status is indicated in bit 0: a value of 1 means occupied, and 0 means unoccupied, with
             * the other bits set to 0; this can be considered equivalent to a boolean.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.1
             */
            readonly occupancy: Attribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates the sensed occupancy state
                 *
                 * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                 * unoccupied state.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                 */
                occupied: BitFlag;
            }>, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorType: FixedAttribute<OccupancySensorType, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorTypeBitmap: FixedAttribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates a passive infrared sensor.
                 */
                pir: BitFlag;
                /**
                 * Indicates a ultrasonic sensor.
                 */
                ultrasonic: BitFlag;
                /**
                 * Indicates a physical contact sensor.
                 */
                physicalContact: BitFlag;
            }>, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the sensor changes to its unoccupied
             * state after the last detection of occupancy in the sensed area. This is equivalent to the legacy
             * *OccupiedToUnoccupiedDelay attributes.
             *
             * Low values of HoldTime SHOULD be avoided since they could lead to many reporting messages. A value 0 for
             * HoldTime shall NOT be used.
             *
             * The figure below illustrates this with an example of how this attribute is used for a PIR sensor. It uses
             * threshold detection to generate an "internal detection" signal, which needs post-processing to become
             * usable for transmission (traffic shaping). The bit in the Occupancy attribute will be set to 1 when the
             * internal detection signal goes high, and will stay at 1 for HoldTime after the (last) instance where the
             * internal detection signal goes low.
             *
             * The top half of the figure shows the case of a single trigger: the bit in the Occupancy attribute will be
             * 1 for the duration of the PIR signal exceeding the threshold plus HoldTime. The bottom half of the figure
             * shows the case of multiple triggers: the second trigger starts before the HoldTime of the first trigger
             * has expired; this results in a single period of the bit in the Occupancy attribute being 1. The bit in
             * the Occupancy attribute will be set to 1 from the start of the first period where the PIR signal exceeds
             * the threshold until HoldTime after the last moment where the PIR exceeded the threshold.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.3
             */
            readonly holdTime: OptionalWritableAttribute<number, any>;
            /**
             * Indicates the server’s limits, and default value, for the HoldTime attribute.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.4
             */
            readonly holdTimeLimits: OptionalFixedAttribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the minimum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.1
                 */
                holdTimeMin: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the maximum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.2
                 */
                holdTimeMax: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the (manufacturer-determined) default value of the server’s HoldTime attribute, in
                 * seconds. This is the value that a client who wants to reset the settings to a valid default SHOULD use.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.3
                 */
                holdTimeDefault: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
        readonly events: {
            /**
             * If this event is supported, it shall be generated when the Occupancy attribute changes.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1
             */
            readonly occupancyChanged: OptionalEvent<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the Occupancy attribute.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1.1
                 */
                occupancy: import("../tlv/TlvObject.js").FieldType<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                    /**
                     * Indicates the sensed occupancy state
                     *
                     * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                     * unoccupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                     */
                    occupied: BitFlag;
                }>>;
            }>, any>;
        };
        /**
         * This metadata controls which OccupancySensingCluster elements matter.js activates for specific feature
         * combinations.
         */
        readonly extensions: readonly [{
            readonly flags: {
                readonly passiveInfrared: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its unoccupied
                     * state after the last detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.6
                     */
                    readonly pirOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the PIR sensor changes to its occupied
                     * state after the first detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.7
                     */
                    readonly pirUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * PIRUnoccupiedToOccupiedDelay, before the PIR sensor changes to its occupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.8
                     */
                    readonly pirUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly ultrasonic: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
                     * unoccupied state after the last detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.9
                     */
                    readonly ultrasonicOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the Ultrasonic sensor changes to its
                     * occupied state after the first detection of occupancy in the sensed area.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.10
                     */
                    readonly ultrasonicUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * UltrasonicUnoccupiedToOccupiedDelay, before the Ultrasonic sensor changes to its occupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.11
                     */
                    readonly ultrasonicUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly physicalContact: true;
            };
            readonly component: {
                readonly attributes: {
                    /**
                     * This attribute shall specify the time delay, in seconds, before the physical contact occupancy sensor
                     * changes to its unoccupied state after detecting the unoccupied event.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.12
                     */
                    readonly physicalContactOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the time delay, in seconds, before the physical contact sensor changes to
                     * its occupied state after the first detection of the occupied event.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.13
                     */
                    readonly physicalContactUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any>;
                    /**
                     * This attribute shall specify the number of occupancy detection events that must occur in the period
                     * PhysicalContactUnoccupiedToOccupiedDelay, before the PhysicalContact sensor changes to its occupied
                     * state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.14
                     */
                    readonly physicalContactUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any>;
                };
            };
        }, {
            readonly flags: {
                readonly other: false;
                readonly passiveInfrared: false;
                readonly ultrasonic: false;
                readonly physicalContact: false;
                readonly activeInfrared: false;
                readonly radar: false;
                readonly rfSensing: false;
                readonly vision: false;
            };
            readonly component: false;
        }];
    }>;
    /**
     * The server cluster provides an interface to occupancy sensing functionality based on one or more sensing
     * modalities, including configuration and provision of notifications of occupancy status.
     *
     * Per the Matter specification you cannot use {@link OccupancySensingCluster} without enabling certain feature
     * combinations. You must use the {@link with} factory method to obtain a working cluster.
     *
     * @see {@link MatterSpecification.v142.Cluster} § 2.7
     */
    interface Cluster extends Identity<typeof ClusterInstance> {
    }
    const Cluster: Cluster;
    /**
     * @see {@link Complete}
     */
    const CompleteInstance: MutableCluster<{
        readonly id: 1030;
        readonly name: "OccupancySensing";
        readonly revision: 5;
        readonly features: {
            /**
             * Supports sensing using a modality not listed in the other bits
             */
            readonly other: BitFlag;
            /**
             * Supports sensing using PIR (Passive InfraRed)
             */
            readonly passiveInfrared: BitFlag;
            /**
             * Supports sensing using UltraSound
             */
            readonly ultrasonic: BitFlag;
            /**
             * Supports sensing using a physical contact
             */
            readonly physicalContact: BitFlag;
            /**
             * Supports sensing using Active InfraRed measurement (e.g. time-of-flight or transflective/reflective IR
             * sensing)
             */
            readonly activeInfrared: BitFlag;
            /**
             * Supports sensing using radar waves (microwave)
             */
            readonly radar: BitFlag;
            /**
             * Supports sensing using analysis of radio signals, e.g.: RSSI, CSI and/or any other metric from the signal
             */
            readonly rfSensing: BitFlag;
            /**
             * Supports sensing based on analyzing images
             */
            readonly vision: BitFlag;
        };
        readonly attributes: {
            readonly pirOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    passiveInfrared: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly pirUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    passiveInfrared: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly pirUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    passiveInfrared: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly ultrasonicOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    ultrasonic: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly ultrasonicUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    ultrasonic: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly ultrasonicUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    ultrasonic: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly physicalContactOccupiedToUnoccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    physicalContact: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly physicalContactUnoccupiedToOccupiedDelay: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    physicalContact: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            readonly physicalContactUnoccupiedToOccupiedThreshold: OptionalWritableAttribute<number, any> & {
                readonly optional: true;
                readonly isConditional: true;
                readonly optionalIf: [] | [{
                    physicalContact: boolean;
                }];
                readonly mandatoryIf: [] | import("../cluster/Cluster.js").ConditionalFeatureList<import("../schema/BitmapSchema.js").BitSchema>;
            };
            /**
             * Indicates the sensed (processed) status of occupancy. For compatibility reasons this is expressed as a
             * bitmap where the status is indicated in bit 0: a value of 1 means occupied, and 0 means unoccupied, with
             * the other bits set to 0; this can be considered equivalent to a boolean.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.1
             */
            readonly occupancy: Attribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates the sensed occupancy state
                 *
                 * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                 * unoccupied state.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                 */
                occupied: BitFlag;
            }>, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorType: FixedAttribute<OccupancySensorType, any>;
            /**
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6
             */
            readonly occupancySensorTypeBitmap: FixedAttribute<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                /**
                 * Indicates a passive infrared sensor.
                 */
                pir: BitFlag;
                /**
                 * Indicates a ultrasonic sensor.
                 */
                ultrasonic: BitFlag;
                /**
                 * Indicates a physical contact sensor.
                 */
                physicalContact: BitFlag;
            }>, any>;
            /**
             * This attribute shall specify the time delay, in seconds, before the sensor changes to its unoccupied
             * state after the last detection of occupancy in the sensed area. This is equivalent to the legacy
             * *OccupiedToUnoccupiedDelay attributes.
             *
             * Low values of HoldTime SHOULD be avoided since they could lead to many reporting messages. A value 0 for
             * HoldTime shall NOT be used.
             *
             * The figure below illustrates this with an example of how this attribute is used for a PIR sensor. It uses
             * threshold detection to generate an "internal detection" signal, which needs post-processing to become
             * usable for transmission (traffic shaping). The bit in the Occupancy attribute will be set to 1 when the
             * internal detection signal goes high, and will stay at 1 for HoldTime after the (last) instance where the
             * internal detection signal goes low.
             *
             * The top half of the figure shows the case of a single trigger: the bit in the Occupancy attribute will be
             * 1 for the duration of the PIR signal exceeding the threshold plus HoldTime. The bottom half of the figure
             * shows the case of multiple triggers: the second trigger starts before the HoldTime of the first trigger
             * has expired; this results in a single period of the bit in the Occupancy attribute being 1. The bit in
             * the Occupancy attribute will be set to 1 from the start of the first period where the PIR signal exceeds
             * the threshold until HoldTime after the last moment where the PIR exceeded the threshold.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.3
             */
            readonly holdTime: OptionalWritableAttribute<number, any>;
            /**
             * Indicates the server’s limits, and default value, for the HoldTime attribute.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.6.4
             */
            readonly holdTimeLimits: OptionalFixedAttribute<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall specify the minimum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.1
                 */
                holdTimeMin: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the maximum value of the server’s supported value for the HoldTime attribute, in
                 * seconds.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.2
                 */
                holdTimeMax: import("../tlv/TlvObject.js").FieldType<number>;
                /**
                 * This field shall specify the (manufacturer-determined) default value of the server’s HoldTime attribute, in
                 * seconds. This is the value that a client who wants to reset the settings to a valid default SHOULD use.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.4.3
                 */
                holdTimeDefault: import("../tlv/TlvObject.js").FieldType<number>;
            }>, any>;
        };
        readonly events: {
            /**
             * If this event is supported, it shall be generated when the Occupancy attribute changes.
             *
             * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1
             */
            readonly occupancyChanged: OptionalEvent<import("../tlv/TlvObject.js").TypeFromFields<{
                /**
                 * This field shall indicate the new value of the Occupancy attribute.
                 *
                 * @see {@link MatterSpecification.v142.Cluster} § 2.7.7.1.1
                 */
                occupancy: import("../tlv/TlvObject.js").FieldType<import("../schema/BitmapSchema.js").TypeFromPartialBitSchema<{
                    /**
                     * Indicates the sensed occupancy state
                     *
                     * If this bit is set, it shall indicate the occupied state else if the bit if not set, it shall indicate the
                     * unoccupied state.
                     *
                     * @see {@link MatterSpecification.v142.Cluster} § 2.7.5.1.1
                     */
                    occupied: BitFlag;
                }>>;
            }>, any>;
        };
    }, []>;
    /**
     * This cluster supports all OccupancySensing 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 OccupancySensingCluster = OccupancySensing.Cluster;
export declare const OccupancySensingCluster: OccupancySensing.Cluster;
//# sourceMappingURL=occupancy-sensing.d.ts.map