import * as Zcl from "../../zspec/zcl";
import type { CustomClusters } from "../../zspec/zcl/definition/tstype";
import type { ClusterOrRawAttributeKeys, ClusterOrRawPayload, KeyValue, PartialClusterOrRawWriteAttributes, TCustomCluster } from "../tstype";
import type Endpoint from "./endpoint";
import { ZigbeeEntity } from "./zigbeeEntity";
interface Options {
    manufacturerCode?: number;
    direction?: Zcl.Direction;
    srcEndpoint?: number;
    reservedBits?: number;
    transactionSequenceNumber?: number;
}
export declare class Group extends ZigbeeEntity {
    #private;
    private databaseID;
    private ID;
    readonly groupID: number;
    private readonly _members;
    readonly meta: KeyValue;
    private static readonly groups;
    /** Member endpoints with valid devices (not unknown/deleted) */
    get members(): Endpoint[];
    /** List of server / client custom clusters common to all devices in the group */
    get customClusters(): [input: CustomClusters, output: CustomClusters];
    private constructor();
    /**
     * Reset runtime lookups.
     */
    static resetCache(): void;
    private static fromDatabaseEntry;
    private toDatabaseRecord;
    private static loadFromDatabaseIfNecessary;
    static byGroupID(groupID: number, databaseID: number): Group | undefined;
    static allByDatabaseID(databaseID: number): Group[];
    static allIterator(databaseID: number, predicate?: (value: Group) => boolean): Generator<Group>;
    static create(groupID: number, databaseID: number): Group;
    removeFromNetwork(): Promise<void>;
    removeFromDatabase(): void;
    save(writeDatabase?: boolean): void;
    addMember(endpoint: Endpoint): void;
    removeMember(endpoint: Endpoint): void;
    hasMember(endpoint: Endpoint): boolean;
    write<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(clusterKey: Cl, attributes: PartialClusterOrRawWriteAttributes<Cl, Custom>, options?: Options): Promise<void>;
    read<Cl extends number | string, Custom extends TCustomCluster | undefined = undefined>(clusterKey: Cl, attributes: ClusterOrRawAttributeKeys<Cl, Custom>, options?: Options): Promise<undefined>;
    command<Cl extends number | string, Co extends number | string, Custom extends TCustomCluster | undefined = undefined>(clusterKey: Cl, commandKey: Co, payload: ClusterOrRawPayload<Cl, Co, Custom>, options?: Options): Promise<undefined>;
    private getOptionsWithDefaults;
}
export default Group;
//# sourceMappingURL=group.d.ts.map