/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */

/*** THIS FILE IS GENERATED, DO NOT EDIT ***/

import type { ClusterType, ClusterTyping } from "../cluster/ClusterType.js";
import type { ClusterId } from "../datatype/ClusterId.js";
import type { ClusterModel } from "@matter/model";
import type { EndpointNumber } from "../datatype/EndpointNumber.js";

/**
 * Definitions for the PowerSource cluster.
 *
 * This cluster is used to describe the configuration and capabilities of a physical power source that provides power to
 * one or more endpoints on a node. In case the node has multiple power sources, each shall be described by its own
 * cluster instance. Each instance of this cluster may be associated with one or more endpoints or the entire node.
 *
 * @see {@link MatterSpecification.v142.Core} § 11.7
 */
export declare namespace PowerSource {
    /**
     * The Matter protocol cluster identifier.
     */
    export const id: ClusterId & 0x002f;

    /**
     * Textual cluster identifier.
     */
    export const name: "PowerSource";

    /**
     * The cluster revision assigned by {@link MatterSpecification.v142.Cluster}.
     */
    export const revision: 3;

    /**
     * Canonical metadata for the PowerSource cluster.
     *
     * This is the exhaustive runtime metadata source that matter.js considers canonical.
     */
    export const schema: ClusterModel;

    /**
     * {@link PowerSource} always supports these elements.
     */
    export interface BaseAttributes {
        /**
         * Indicates the participation of this power source in providing power to the Node as specified in
         * PowerSourceStatusEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.1
         */
        status: PowerSourceStatus;

        /**
         * Indicates the relative preference with which the Node will select this source to provide power. A source with
         * a lower order shall be selected by the Node to provide power before any other source with a higher order, if
         * the lower order source is available (see Section 11.7.7.1, “Status Attribute”).
         *
         * Note, Order is read-only and therefore NOT intended to allow clients control over power source selection.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.2
         */
        order: number;

        /**
         * This attribute shall provide a user-facing description of this source, used to distinguish it from other
         * power sources, e.g. "DC Power", "Primary Battery" or "Battery back-up". This attribute shall NOT be used to
         * convey information such as battery form factor, or chemistry.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.3
         */
        description: string;

        /**
         * Indicates a list of endpoints that are powered by the source defined by this cluster. Multiple instances of
         * this cluster may list the same endpoint, because it is possible for power for an endpoint to come from
         * multiple sources. In that case the Order attribute indicates their priority.
         *
         * For each power source on a node, there shall only be one instance of this cluster.
         *
         * A cluster instance with an empty list shall indicate that the power source is for the entire node, which
         * includes all endpoints.
         *
         * A cluster instance with a non-empty list shall include the endpoint, upon which the cluster instance resides.
         *
         * The above rules allow that some endpoints can have an unknown power source, and therefore would not be
         * indicated by any instance of this cluster.
         *
         * ### Legacy Implementations
         *
         * Legacy implementations of this cluster before revision 2, before this attribute was defined, would have
         * implemented this cluster on an application endpoint without indicating it in EndpointList (since that
         * attribute did not exist in revision 1), because it represented a power source for the endpoint, not the
         * entire node.
         *
         * For example: Bridge implementations support endpoints for bridged devices that have different power sources.
         *
         * Such implementations followed device type requirements and semantics outside of this cluster, because this
         * attribute did not exist.
         *
         * Future updates of such a cluster instance on the same endpoint, would allow that same endpoint to be an entry
         * in the EndpointList attribute. Therefore it is valid to list the endpoint upon which the cluster instance
         * exists.
         *
         * Typically, there is one power source for the node. Also common is mains power for the node with battery
         * backup power for the node. In both these common cases, for each cluster instance described, the list is
         * empty.
         *
         * A node has a mains power source with Order as 0 (zero), but some application endpoints (not all) have a
         * battery back up source with Order as 1, which means this list is empty for the Power Source cluster
         * associated with the mains power, because it indicates the entire node, but the Power Source cluster instance
         * associated with the battery backup would list the endpoints that have a battery backup.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.32
         */
        endpointList: EndpointNumber[];
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Wired".
     */
    export interface WiredAttributes {
        /**
         * Indicates the type of current the Node expects to be provided by the hard-wired source as specified in
         * WiredCurrentTypeEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.6
         */
        wiredCurrentType: WiredCurrentType;

        /**
         * Indicates the assessed RMS or DC voltage currently provided by the hard-wired source, in mV (millivolts). A
         * value of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.4
         */
        wiredAssessedInputVoltage?: number | null;

        /**
         * Indicates the assessed frequency of the voltage, currently provided by the hard-wired source, in Hz. A value
         * of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.5
         */
        wiredAssessedInputFrequency?: number | null;

        /**
         * Indicates the assessed instantaneous current draw of the Node on the hard-wired source, in mA (milliamps). A
         * value of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.7
         */
        wiredAssessedCurrent?: number | null;

        /**
         * Indicates the nominal voltage, printed as part of the Node’s regulatory compliance label in mV (millivolts),
         * expected to be provided by the hard-wired source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.8
         */
        wiredNominalVoltage?: number;

        /**
         * Indicates the maximum current, printed as part of the Node’s regulatory compliance label in mA (milliamps),
         * expected to be provided by the hard-wired source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.9
         */
        wiredMaximumCurrent?: number;

        /**
         * Indicates if the Node detects that the hard-wired power source is properly connected.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.10
         */
        wiredPresent?: boolean;

        /**
         * Indicates the set of wired faults currently detected by the Node on this power source. This set is
         * represented as a list of WiredFaultEnum. When the Node detects a fault has been raised, the appropriate
         * WiredFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific WiredFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding WiredFaultEnum value shall be removed from this
         * list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD have
         * no significance. Clients interested in monitoring changes in active faults may subscribe to this attribute,
         * or they may subscribe to WiredFaultChange.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.11
         */
        activeWiredFaults?: WiredFault[];
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Battery".
     */
    export interface BatteryAttributes {
        /**
         * Indicates a coarse ranking of the charge level of the battery, used to indicate when intervention is required
         * as specified in BatChargeLevelEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.15
         */
        batChargeLevel: BatChargeLevel;

        /**
         * Indicates if the battery needs to be replaced. Replacement may be simple routine maintenance, such as with a
         * single use, non-rechargeable cell. Replacement, however, may also indicate end of life, or serious fault with
         * a rechargeable or even non-replaceable cell.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.16
         */
        batReplacementNeeded: boolean;

        /**
         * Indicates the replaceability of the battery as specified in BatReplaceabilityEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.17
         */
        batReplaceability: BatReplaceability;

        /**
         * Indicates the currently measured output voltage of the battery in mV (millivolts). A value of NULL shall
         * indicate the Node is currently unable to assess the value.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.12
         */
        batVoltage?: number | null;

        /**
         * Indicates the estimated percentage of battery charge remaining until the battery will no longer be able to
         * provide power to the Node. Values are expressed in half percent units, ranging from 0 to 200. E.g. a value of
         * 48 is equivalent to 24%. A value of NULL shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.13
         */
        batPercentRemaining?: number | null;

        /**
         * Indicates the estimated time in seconds before the battery will no longer be able to provide power to the
         * Node. A value of NULL shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.14
         */
        batTimeRemaining?: number | null;

        /**
         * Indicates whether the Node detects that the batteries are properly installed.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.18
         */
        batPresent?: boolean;

        /**
         * Indicates the set of battery faults currently detected by the Node on this power source. This set is
         * represented as a list of BatFaultEnum. When the Node detects a fault has been raised, the appropriate
         * BatFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific BatFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding BatFaultEnum value shall be removed from this
         * list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD have
         * no significance. Clients interested in monitoring changes in active faults may subscribe to this attribute,
         * or they may subscribe to BatFaultChange.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.19
         */
        activeBatFaults?: BatFault[];
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Replaceable".
     */
    export interface ReplaceableAttributes {
        /**
         * This attribute shall provide a user-facing description of this battery, which SHOULD contain information
         * required to identify a replacement, such as form factor, chemistry or preferred manufacturer.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.20
         */
        batReplacementDescription: string;

        /**
         * Indicates the quantity of individual, user- or factory-serviceable battery cells or packs in the battery
         * source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.26
         */
        batQuantity: number;

        /**
         * Indicates the ID of the common or colloquial designation of the battery, as specified in
         * BatCommonDesignationEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.21
         */
        batCommonDesignation?: BatCommonDesignation;

        /**
         * Indicates the string representing the ANSI designation for the battery as specified in ANSI C18.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.22
         */
        batAnsiDesignation?: string;

        /**
         * Indicates the string representing the IEC designation for the battery as specified in IEC 60086.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.23
         */
        batIecDesignation?: string;

        /**
         * Indicates the ID of the preferred chemistry of the battery source as specified in BatApprovedChemistryEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.24
         */
        batApprovedChemistry?: BatApprovedChemistry;
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "ReplaceableOrRechargeable".
     */
    export interface ReplaceableOrRechargeableAttributes {
        /**
         * Indicates the preferred minimum charge capacity rating in mAh of individual, user- or factory-serviceable
         * battery cells or packs in the battery source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.25
         */
        batCapacity?: number;
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Rechargeable".
     */
    export interface RechargeableAttributes {
        /**
         * Indicates the current state of the battery source with respect to charging as specified in
         * BatChargeStateEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.27
         */
        batChargeState: BatChargeState;

        /**
         * Indicates whether the Node can remain operational while the battery source is charging.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.29
         */
        batFunctionalWhileCharging: boolean;

        /**
         * Indicates the estimated time in seconds before the battery source will be at full charge. A value of NULL
         * shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.28
         */
        batTimeToFullCharge?: number | null;

        /**
         * Indicates assessed current in mA (milliamps) presently supplied to charge the battery source. A value of NULL
         * shall indicate the Node is currently unable to assess the value.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.30
         */
        batChargingCurrent?: number | null;

        /**
         * Indicates the set of charge faults currently detected by the Node on this power source. This set is
         * represented as a list of BatChargeFaultEnum. When the Node detects a fault has been raised, the appropriate
         * BatChargeFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific BatChargeFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding BatChargeFaultEnum value shall be removed from
         * this list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD
         * have no significance. Clients interested in monitoring changes in active faults may subscribe to this
         * attribute, or they may subscribe to the BatFaultChange event.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.31
         */
        activeBatChargeFaults?: BatChargeFault[];
    }

    /**
     * Attributes that may appear in {@link PowerSource}.
     *
     * Some properties may be optional if device support is not mandatory. Device support may also be affected by a
     * device's supported {@link Features}.
     */
    export interface Attributes {
        /**
         * Indicates the participation of this power source in providing power to the Node as specified in
         * PowerSourceStatusEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.1
         */
        status: PowerSourceStatus;

        /**
         * Indicates the relative preference with which the Node will select this source to provide power. A source with
         * a lower order shall be selected by the Node to provide power before any other source with a higher order, if
         * the lower order source is available (see Section 11.7.7.1, “Status Attribute”).
         *
         * Note, Order is read-only and therefore NOT intended to allow clients control over power source selection.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.2
         */
        order: number;

        /**
         * This attribute shall provide a user-facing description of this source, used to distinguish it from other
         * power sources, e.g. "DC Power", "Primary Battery" or "Battery back-up". This attribute shall NOT be used to
         * convey information such as battery form factor, or chemistry.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.3
         */
        description: string;

        /**
         * Indicates a list of endpoints that are powered by the source defined by this cluster. Multiple instances of
         * this cluster may list the same endpoint, because it is possible for power for an endpoint to come from
         * multiple sources. In that case the Order attribute indicates their priority.
         *
         * For each power source on a node, there shall only be one instance of this cluster.
         *
         * A cluster instance with an empty list shall indicate that the power source is for the entire node, which
         * includes all endpoints.
         *
         * A cluster instance with a non-empty list shall include the endpoint, upon which the cluster instance resides.
         *
         * The above rules allow that some endpoints can have an unknown power source, and therefore would not be
         * indicated by any instance of this cluster.
         *
         * ### Legacy Implementations
         *
         * Legacy implementations of this cluster before revision 2, before this attribute was defined, would have
         * implemented this cluster on an application endpoint without indicating it in EndpointList (since that
         * attribute did not exist in revision 1), because it represented a power source for the endpoint, not the
         * entire node.
         *
         * For example: Bridge implementations support endpoints for bridged devices that have different power sources.
         *
         * Such implementations followed device type requirements and semantics outside of this cluster, because this
         * attribute did not exist.
         *
         * Future updates of such a cluster instance on the same endpoint, would allow that same endpoint to be an entry
         * in the EndpointList attribute. Therefore it is valid to list the endpoint upon which the cluster instance
         * exists.
         *
         * Typically, there is one power source for the node. Also common is mains power for the node with battery
         * backup power for the node. In both these common cases, for each cluster instance described, the list is
         * empty.
         *
         * A node has a mains power source with Order as 0 (zero), but some application endpoints (not all) have a
         * battery back up source with Order as 1, which means this list is empty for the Power Source cluster
         * associated with the mains power, because it indicates the entire node, but the Power Source cluster instance
         * associated with the battery backup would list the endpoints that have a battery backup.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.32
         */
        endpointList: EndpointNumber[];

        /**
         * Indicates the type of current the Node expects to be provided by the hard-wired source as specified in
         * WiredCurrentTypeEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.6
         */
        wiredCurrentType: WiredCurrentType;

        /**
         * Indicates the assessed RMS or DC voltage currently provided by the hard-wired source, in mV (millivolts). A
         * value of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.4
         */
        wiredAssessedInputVoltage: number | null;

        /**
         * Indicates the assessed frequency of the voltage, currently provided by the hard-wired source, in Hz. A value
         * of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.5
         */
        wiredAssessedInputFrequency: number | null;

        /**
         * Indicates the assessed instantaneous current draw of the Node on the hard-wired source, in mA (milliamps). A
         * value of NULL shall indicate the Node is currently unable to assess the value. If the wired source is not
         * connected, but the Node is still able to assess a value, then the assessed value may be reported.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.7
         */
        wiredAssessedCurrent: number | null;

        /**
         * Indicates the nominal voltage, printed as part of the Node’s regulatory compliance label in mV (millivolts),
         * expected to be provided by the hard-wired source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.8
         */
        wiredNominalVoltage: number;

        /**
         * Indicates the maximum current, printed as part of the Node’s regulatory compliance label in mA (milliamps),
         * expected to be provided by the hard-wired source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.9
         */
        wiredMaximumCurrent: number;

        /**
         * Indicates if the Node detects that the hard-wired power source is properly connected.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.10
         */
        wiredPresent: boolean;

        /**
         * Indicates the set of wired faults currently detected by the Node on this power source. This set is
         * represented as a list of WiredFaultEnum. When the Node detects a fault has been raised, the appropriate
         * WiredFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific WiredFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding WiredFaultEnum value shall be removed from this
         * list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD have
         * no significance. Clients interested in monitoring changes in active faults may subscribe to this attribute,
         * or they may subscribe to WiredFaultChange.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.11
         */
        activeWiredFaults: WiredFault[];

        /**
         * Indicates a coarse ranking of the charge level of the battery, used to indicate when intervention is required
         * as specified in BatChargeLevelEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.15
         */
        batChargeLevel: BatChargeLevel;

        /**
         * Indicates if the battery needs to be replaced. Replacement may be simple routine maintenance, such as with a
         * single use, non-rechargeable cell. Replacement, however, may also indicate end of life, or serious fault with
         * a rechargeable or even non-replaceable cell.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.16
         */
        batReplacementNeeded: boolean;

        /**
         * Indicates the replaceability of the battery as specified in BatReplaceabilityEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.17
         */
        batReplaceability: BatReplaceability;

        /**
         * Indicates the currently measured output voltage of the battery in mV (millivolts). A value of NULL shall
         * indicate the Node is currently unable to assess the value.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.12
         */
        batVoltage: number | null;

        /**
         * Indicates the estimated percentage of battery charge remaining until the battery will no longer be able to
         * provide power to the Node. Values are expressed in half percent units, ranging from 0 to 200. E.g. a value of
         * 48 is equivalent to 24%. A value of NULL shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.13
         */
        batPercentRemaining: number | null;

        /**
         * Indicates the estimated time in seconds before the battery will no longer be able to provide power to the
         * Node. A value of NULL shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.14
         */
        batTimeRemaining: number | null;

        /**
         * Indicates whether the Node detects that the batteries are properly installed.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.18
         */
        batPresent: boolean;

        /**
         * Indicates the set of battery faults currently detected by the Node on this power source. This set is
         * represented as a list of BatFaultEnum. When the Node detects a fault has been raised, the appropriate
         * BatFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific BatFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding BatFaultEnum value shall be removed from this
         * list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD have
         * no significance. Clients interested in monitoring changes in active faults may subscribe to this attribute,
         * or they may subscribe to BatFaultChange.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.19
         */
        activeBatFaults: BatFault[];

        /**
         * This attribute shall provide a user-facing description of this battery, which SHOULD contain information
         * required to identify a replacement, such as form factor, chemistry or preferred manufacturer.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.20
         */
        batReplacementDescription: string;

        /**
         * Indicates the quantity of individual, user- or factory-serviceable battery cells or packs in the battery
         * source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.26
         */
        batQuantity: number;

        /**
         * Indicates the ID of the common or colloquial designation of the battery, as specified in
         * BatCommonDesignationEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.21
         */
        batCommonDesignation: BatCommonDesignation;

        /**
         * Indicates the string representing the ANSI designation for the battery as specified in ANSI C18.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.22
         */
        batAnsiDesignation: string;

        /**
         * Indicates the string representing the IEC designation for the battery as specified in IEC 60086.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.23
         */
        batIecDesignation: string;

        /**
         * Indicates the ID of the preferred chemistry of the battery source as specified in BatApprovedChemistryEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.24
         */
        batApprovedChemistry: BatApprovedChemistry;

        /**
         * Indicates the preferred minimum charge capacity rating in mAh of individual, user- or factory-serviceable
         * battery cells or packs in the battery source.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.25
         */
        batCapacity: number;

        /**
         * Indicates the current state of the battery source with respect to charging as specified in
         * BatChargeStateEnum.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.27
         */
        batChargeState: BatChargeState;

        /**
         * Indicates whether the Node can remain operational while the battery source is charging.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.29
         */
        batFunctionalWhileCharging: boolean;

        /**
         * Indicates the estimated time in seconds before the battery source will be at full charge. A value of NULL
         * shall indicate the Node is currently unable to assess the value.
         *
         * Changes to this attribute shall only be marked as reportable in the following cases:
         *
         *   - At most once every 10 seconds, or
         *
         *   - When it changes from null to any other value and vice versa.
         *
         * Since reporting consumes power, devices SHOULD be careful not to over-report.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.28
         */
        batTimeToFullCharge: number | null;

        /**
         * Indicates assessed current in mA (milliamps) presently supplied to charge the battery source. A value of NULL
         * shall indicate the Node is currently unable to assess the value.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.30
         */
        batChargingCurrent: number | null;

        /**
         * Indicates the set of charge faults currently detected by the Node on this power source. This set is
         * represented as a list of BatChargeFaultEnum. When the Node detects a fault has been raised, the appropriate
         * BatChargeFaultEnum value shall be added to this list, provided it is not already present. This list shall NOT
         * contain more than one instance of a specific BatChargeFaultEnum value. When the Node detects all conditions
         * contributing to a fault have been cleared, the corresponding BatChargeFaultEnum value shall be removed from
         * this list. An empty list shall indicate there are currently no active faults. The order of this list SHOULD
         * have no significance. Clients interested in monitoring changes in active faults may subscribe to this
         * attribute, or they may subscribe to the BatFaultChange event.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.7.31
         */
        activeBatChargeFaults: BatChargeFault[];
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Wired".
     */
    export interface WiredEvents {
        /**
         * The WiredFaultChange Event shall be generated when the set of wired faults currently detected by the Node on
         * this wired power source changes. This event shall correspond to a change in value of ActiveWiredFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.1
         */
        wiredFaultChange?: WiredFaultChangeEvent;
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Battery".
     */
    export interface BatteryEvents {
        /**
         * The BatFaultChange Event shall be generated when the set of battery faults currently detected by the Node on
         * this battery power source changes. This event shall correspond to a change in value of ActiveBatFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.2
         */
        batFaultChange?: BatFaultChangeEvent;
    }

    /**
     * {@link PowerSource} supports these elements if it supports feature "Rechargeable".
     */
    export interface RechargeableEvents {
        /**
         * The BatChargeFaultChange Event shall be generated when the set of charge faults currently detected by the
         * Node on this battery power source changes. This event shall correspond to a change in value of
         * ActiveBatChargeFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.3
         */
        batChargeFaultChange?: BatChargeFaultChangeEvent;
    }

    /**
     * Events that may appear in {@link PowerSource}.
     *
     * Some properties may be optional if device support is not mandatory. Device support may also be affected by a
     * device's supported {@link Features}.
     */
    export interface Events {
        /**
         * The WiredFaultChange Event shall be generated when the set of wired faults currently detected by the Node on
         * this wired power source changes. This event shall correspond to a change in value of ActiveWiredFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.1
         */
        wiredFaultChange: WiredFaultChangeEvent;

        /**
         * The BatFaultChange Event shall be generated when the set of battery faults currently detected by the Node on
         * this battery power source changes. This event shall correspond to a change in value of ActiveBatFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.2
         */
        batFaultChange: BatFaultChangeEvent;

        /**
         * The BatChargeFaultChange Event shall be generated when the set of charge faults currently detected by the
         * Node on this battery power source changes. This event shall correspond to a change in value of
         * ActiveBatChargeFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.3
         */
        batChargeFaultChange: BatChargeFaultChangeEvent;
    }

    export type Components = [
        { flags: {}, attributes: BaseAttributes },
        { flags: { wired: true }, attributes: WiredAttributes, events: WiredEvents },
        { flags: { battery: true }, attributes: BatteryAttributes, events: BatteryEvents },
        { flags: { replaceable: true }, attributes: ReplaceableAttributes },
        { flags: { replaceable: true }, attributes: ReplaceableOrRechargeableAttributes },
        { flags: { rechargeable: true }, attributes: ReplaceableOrRechargeableAttributes },
        { flags: { rechargeable: true }, attributes: RechargeableAttributes, events: RechargeableEvents }
    ];

    export type Features = "Wired" | "Battery" | "Rechargeable" | "Replaceable";

    /**
     * These are optional features supported by PowerSourceCluster.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.7.4
     */
    export enum Feature {
        /**
         * Wired (WIRED)
         *
         * A wired power source
         */
        Wired = "Wired",

        /**
         * Battery (BAT)
         *
         * A battery power source
         */
        Battery = "Battery",

        /**
         * Rechargeable (RECHG)
         *
         * A rechargeable battery power source
         */
        Rechargeable = "Rechargeable",

        /**
         * Replaceable (REPLC)
         *
         * A replaceable battery power source
         */
        Replaceable = "Replaceable"
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.4
     */
    export enum PowerSourceStatus {
        /**
         * Indicate the source status is not specified
         */
        Unspecified = 0,

        /**
         * Indicate the source is available and currently supplying power
         */
        Active = 1,

        /**
         * Indicate the source is available, but is not currently supplying power
         */
        Standby = 2,

        /**
         * Indicate the source is not currently available to supply power
         */
        Unavailable = 3
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.5
     */
    export enum WiredCurrentType {
        /**
         * Indicates AC current
         */
        Ac = 0,

        /**
         * Indicates DC current
         */
        Dc = 1
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.1
     */
    export enum WiredFault {
        /**
         * The Node detects an unspecified fault on this wired power source.
         */
        Unspecified = 0,

        /**
         * The Node detects the supplied voltage is above maximum supported value for this wired power source.
         */
        OverVoltage = 1,

        /**
         * The Node detects the supplied voltage is below maximum supported value for this wired power source.
         */
        UnderVoltage = 2
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.6
     */
    export enum BatChargeLevel {
        /**
         * Charge level is nominal
         */
        Ok = 0,

        /**
         * Charge level is low, intervention may soon be required.
         */
        Warning = 1,

        /**
         * Charge level is critical, immediate intervention is required
         */
        Critical = 2
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.7
     */
    export enum BatReplaceability {
        /**
         * The replaceability is unspecified or unknown.
         */
        Unspecified = 0,

        /**
         * The battery is not replaceable.
         */
        NotReplaceable = 1,

        /**
         * The battery is replaceable by the user or customer.
         */
        UserReplaceable = 2,

        /**
         * The battery is replaceable by an authorized factory technician.
         */
        FactoryReplaceable = 3
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.2
     */
    export enum BatFault {
        /**
         * The Node detects an unspecified fault on this battery power source.
         */
        Unspecified = 0,

        /**
         * The Node detects the temperature of this battery power source is above ideal operating conditions.
         */
        OverTemp = 1,

        /**
         * The Node detects the temperature of this battery power source is below ideal operating conditions.
         */
        UnderTemp = 2
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.8
     */
    export enum BatCommonDesignation {
        /**
         * Common type is unknown or unspecified
         */
        Unspecified = 0,

        /**
         * Common type is as specified
         */
        Aaa = 1,

        /**
         * Common type is as specified
         */
        Aa = 2,

        C = 3,
        D = 4,

        /**
         * Common type is as specified
         */
        "4V5" = 5,

        /**
         * Common type is as specified
         */
        "6V0" = 6,

        /**
         * Common type is as specified
         */
        "9V0" = 7,

        /**
         * Common type is as specified
         */
        "12Aa" = 8,

        /**
         * Common type is as specified
         */
        Aaaa = 9,

        A = 10,
        B = 11,
        F = 12,
        N = 13,

        /**
         * Common type is as specified
         */
        No6 = 14,

        /**
         * Common type is as specified
         */
        SubC = 15,

        /**
         * Common type is as specified
         */
        A23 = 16,

        /**
         * Common type is as specified
         */
        A27 = 17,

        /**
         * Common type is as specified
         */
        Ba5800 = 18,

        /**
         * Common type is as specified
         */
        Duplex = 19,

        /**
         * Common type is as specified
         */
        "4Sr44" = 20,

        /**
         * Common type is as specified
         */
        E523 = 21,

        /**
         * Common type is as specified
         */
        E531 = 22,

        /**
         * Common type is as specified
         */
        "15V0" = 23,

        /**
         * Common type is as specified
         */
        "22V5" = 24,

        /**
         * Common type is as specified
         */
        "30V0" = 25,

        /**
         * Common type is as specified
         */
        "45V0" = 26,

        /**
         * Common type is as specified
         */
        "67V5" = 27,

        J = 28,

        /**
         * Common type is as specified
         */
        Cr123A = 29,

        /**
         * Common type is as specified
         */
        Cr2 = 30,

        /**
         * Common type is as specified
         */
        "2Cr5" = 31,

        /**
         * Common type is as specified
         */
        CrP2 = 32,

        /**
         * Common type is as specified
         */
        CrV3 = 33,

        /**
         * Common type is as specified
         */
        Sr41 = 34,

        /**
         * Common type is as specified
         */
        Sr43 = 35,

        /**
         * Common type is as specified
         */
        Sr44 = 36,

        /**
         * Common type is as specified
         */
        Sr45 = 37,

        /**
         * Common type is as specified
         */
        Sr48 = 38,

        /**
         * Common type is as specified
         */
        Sr54 = 39,

        /**
         * Common type is as specified
         */
        Sr55 = 40,

        /**
         * Common type is as specified
         */
        Sr57 = 41,

        /**
         * Common type is as specified
         */
        Sr58 = 42,

        /**
         * Common type is as specified
         */
        Sr59 = 43,

        /**
         * Common type is as specified
         */
        Sr60 = 44,

        /**
         * Common type is as specified
         */
        Sr63 = 45,

        /**
         * Common type is as specified
         */
        Sr64 = 46,

        /**
         * Common type is as specified
         */
        Sr65 = 47,

        /**
         * Common type is as specified
         */
        Sr66 = 48,

        /**
         * Common type is as specified
         */
        Sr67 = 49,

        /**
         * Common type is as specified
         */
        Sr68 = 50,

        /**
         * Common type is as specified
         */
        Sr69 = 51,

        /**
         * Common type is as specified
         */
        Sr516 = 52,

        /**
         * Common type is as specified
         */
        Sr731 = 53,

        /**
         * Common type is as specified
         */
        Sr712 = 54,

        /**
         * Common type is as specified
         */
        Lr932 = 55,

        /**
         * Common type is as specified
         */
        A5 = 56,

        /**
         * Common type is as specified
         */
        A10 = 57,

        /**
         * Common type is as specified
         */
        A13 = 58,

        /**
         * Common type is as specified
         */
        A312 = 59,

        /**
         * Common type is as specified
         */
        A675 = 60,

        /**
         * Common type is as specified
         */
        Ac41E = 61,

        /**
         * Common type is as specified
         */
        E10180 = 62,

        /**
         * Common type is as specified
         */
        E10280 = 63,

        /**
         * Common type is as specified
         */
        E10440 = 64,

        /**
         * Common type is as specified
         */
        E14250 = 65,

        /**
         * Common type is as specified
         */
        E14430 = 66,

        /**
         * Common type is as specified
         */
        E14500 = 67,

        /**
         * Common type is as specified
         */
        E14650 = 68,

        /**
         * Common type is as specified
         */
        E15270 = 69,

        /**
         * Common type is as specified
         */
        E16340 = 70,

        /**
         * Common type is as specified
         */
        Rcr123A = 71,

        /**
         * Common type is as specified
         */
        E17500 = 72,

        /**
         * Common type is as specified
         */
        E17670 = 73,

        /**
         * Common type is as specified
         */
        E18350 = 74,

        /**
         * Common type is as specified
         */
        E18500 = 75,

        /**
         * Common type is as specified
         */
        E18650 = 76,

        /**
         * Common type is as specified
         */
        E19670 = 77,

        /**
         * Common type is as specified
         */
        E25500 = 78,

        /**
         * Common type is as specified
         */
        E26650 = 79,

        /**
         * Common type is as specified
         */
        E32600 = 80
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.9
     */
    export enum BatApprovedChemistry {
        /**
         * Cell chemistry is unspecified or unknown
         */
        Unspecified = 0,

        /**
         * Cell chemistry is alkaline
         */
        Alkaline = 1,

        /**
         * Cell chemistry is lithium carbon fluoride
         */
        LithiumCarbonFluoride = 2,

        /**
         * Cell chemistry is lithium chromium oxide
         */
        LithiumChromiumOxide = 3,

        /**
         * Cell chemistry is lithium copper oxide
         */
        LithiumCopperOxide = 4,

        /**
         * Cell chemistry is lithium iron disulfide
         */
        LithiumIronDisulfide = 5,

        /**
         * Cell chemistry is lithium manganese dioxide
         */
        LithiumManganeseDioxide = 6,

        /**
         * Cell chemistry is lithium thionyl chloride
         */
        LithiumThionylChloride = 7,

        /**
         * Cell chemistry is magnesium
         */
        Magnesium = 8,

        /**
         * Cell chemistry is mercury oxide
         */
        MercuryOxide = 9,

        /**
         * Cell chemistry is nickel oxyhydride
         */
        NickelOxyhydride = 10,

        /**
         * Cell chemistry is silver oxide
         */
        SilverOxide = 11,

        /**
         * Cell chemistry is zinc air
         */
        ZincAir = 12,

        /**
         * Cell chemistry is zinc carbon
         */
        ZincCarbon = 13,

        /**
         * Cell chemistry is zinc chloride
         */
        ZincChloride = 14,

        /**
         * Cell chemistry is zinc manganese dioxide
         */
        ZincManganeseDioxide = 15,

        /**
         * Cell chemistry is lead acid
         */
        LeadAcid = 16,

        /**
         * Cell chemistry is lithium cobalt oxide
         */
        LithiumCobaltOxide = 17,

        /**
         * Cell chemistry is lithium ion
         */
        LithiumIon = 18,

        /**
         * Cell chemistry is lithium ion polymer
         */
        LithiumIonPolymer = 19,

        /**
         * Cell chemistry is lithium iron phosphate
         */
        LithiumIronPhosphate = 20,

        /**
         * Cell chemistry is lithium sulfur
         */
        LithiumSulfur = 21,

        /**
         * Cell chemistry is lithium titanate
         */
        LithiumTitanate = 22,

        /**
         * Cell chemistry is nickel cadmium
         */
        NickelCadmium = 23,

        /**
         * Cell chemistry is nickel hydrogen
         */
        NickelHydrogen = 24,

        /**
         * Cell chemistry is nickel iron
         */
        NickelIron = 25,

        /**
         * Cell chemistry is nickel metal hydride
         */
        NickelMetalHydride = 26,

        /**
         * Cell chemistry is nickel zinc
         */
        NickelZinc = 27,

        /**
         * Cell chemistry is silver zinc
         */
        SilverZinc = 28,

        /**
         * Cell chemistry is sodium ion
         */
        SodiumIon = 29,

        /**
         * Cell chemistry is sodium sulfur
         */
        SodiumSulfur = 30,

        /**
         * Cell chemistry is zinc bromide
         */
        ZincBromide = 31,

        /**
         * Cell chemistry is zinc cerium
         */
        ZincCerium = 32
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.10
     */
    export enum BatChargeState {
        /**
         * Unable to determine the charging state
         */
        Unknown = 0,

        /**
         * The battery is charging
         */
        IsCharging = 1,

        /**
         * The battery is at full charge
         */
        IsAtFullCharge = 2,

        /**
         * The battery is not charging
         */
        IsNotCharging = 3
    }

    /**
     * @see {@link MatterSpecification.v142.Core} § 11.7.6.3
     */
    export enum BatChargeFault {
        /**
         * The Node detects an unspecified fault on this battery source.
         */
        Unspecified = 0,

        /**
         * The Node detects the ambient temperature is above the nominal range for this battery source.
         */
        AmbientTooHot = 1,

        /**
         * The Node detects the ambient temperature is below the nominal range for this battery source.
         */
        AmbientTooCold = 2,

        /**
         * The Node detects the temperature of this battery source is above the nominal range.
         */
        BatteryTooHot = 3,

        /**
         * The Node detects the temperature of this battery source is below the nominal range.
         */
        BatteryTooCold = 4,

        /**
         * The Node detects this battery source is not present.
         */
        BatteryAbsent = 5,

        /**
         * The Node detects this battery source is over voltage.
         */
        BatteryOverVoltage = 6,

        /**
         * The Node detects this battery source is under voltage.
         */
        BatteryUnderVoltage = 7,

        /**
         * The Node detects the charger for this battery source is over voltage.
         */
        ChargerOverVoltage = 8,

        /**
         * The Node detects the charger for this battery source is under voltage.
         */
        ChargerUnderVoltage = 9,

        /**
         * The Node detects a charging safety timeout for this battery source.
         */
        SafetyTimeout = 10
    }

    /**
     * The WiredFaultChange Event shall be generated when the set of wired faults currently detected by the Node on this
     * wired power source changes. This event shall correspond to a change in value of ActiveWiredFaults.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.7.8.1
     */
    export declare class WiredFaultChangeEvent {
        constructor(values?: Partial<WiredFaultChangeEvent>);

        /**
         * This field shall represent the set of faults currently detected, as per ActiveWiredFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.1.1
         */
        current: WiredFault[];

        /**
         * This field shall represent the set of faults detected prior to this change event, as per ActiveWiredFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.1.2
         */
        previous: WiredFault[];
    };

    /**
     * The BatFaultChange Event shall be generated when the set of battery faults currently detected by the Node on this
     * battery power source changes. This event shall correspond to a change in value of ActiveBatFaults.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.7.8.2
     */
    export declare class BatFaultChangeEvent {
        constructor(values?: Partial<BatFaultChangeEvent>);

        /**
         * This field shall represent the set of faults currently detected, as per ActiveBatFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.2.1
         */
        current: BatFault[];

        /**
         * This field shall represent the set of faults detected prior to this change event, as per ActiveBatFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.2.2
         */
        previous: BatFault[];
    };

    /**
     * The BatChargeFaultChange Event shall be generated when the set of charge faults currently detected by the Node on
     * this battery power source changes. This event shall correspond to a change in value of ActiveBatChargeFaults.
     *
     * @see {@link MatterSpecification.v142.Core} § 11.7.8.3
     */
    export declare class BatChargeFaultChangeEvent {
        constructor(values?: Partial<BatChargeFaultChangeEvent>);

        /**
         * This field shall represent the set of faults currently detected, as per ActiveBatChargeFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.3.1
         */
        current: BatChargeFault[];

        /**
         * This field shall represent the set of faults detected prior to this change event, as per
         * ActiveBatChargeFaults.
         *
         * @see {@link MatterSpecification.v142.Core} § 11.7.8.3.2
         */
        previous: BatChargeFault[];
    };

    /**
     * Attribute metadata objects keyed by name.
     */
    export const attributes: ClusterType.AttributeObjects<Attributes>;

    /**
     * Event metadata objects keyed by name.
     */
    export const events: ClusterType.EventObjects<Events>;

    /**
     * Feature metadata objects keyed by name.
     */
    export const features: ClusterType.Features<Features>;

    /**
     * @deprecated Use {@link PowerSource}.
     */
    export const Cluster: typeof PowerSource;

    /**
     * @deprecated Use {@link PowerSource}.
     */
    export const Complete: typeof PowerSource;

    export const Typing: PowerSource;
}

/**
 * @deprecated Use {@link PowerSource}.
 */
export declare const PowerSourceCluster: typeof PowerSource;

export interface PowerSource extends ClusterTyping {
    Attributes: PowerSource.Attributes;
    Events: PowerSource.Events;
    Features: PowerSource.Features;
    Components: PowerSource.Components;
}
