import { Fz, ModernExtend, Range, Zh, DefinitionOta, Access, KeyValue, Configure } from './types';
export declare const timeLookup: {
    MAX: number;
    '4_HOURS': number;
    '1_HOUR': number;
    '30_MINUTES': number;
    '5_MINUTES': number;
    '2_MINUTES': number;
    '1_MINUTE': number;
    '10_SECONDS': number;
    '1_SECOND': number;
    MIN: number;
};
type ReportingConfigTime = number | keyof typeof timeLookup;
type ReportingConfigAttribute = string | number | {
    ID: number;
    type: number;
};
type ReportingConfig = {
    min: ReportingConfigTime;
    max: ReportingConfigTime;
    change: number | [number, number];
    attribute: ReportingConfigAttribute;
};
export type ReportingConfigWithoutAttribute = Omit<ReportingConfig, 'attribute'>;
export declare function setupAttributes(entity: Zh.Device | Zh.Endpoint, coordinatorEndpoint: Zh.Endpoint, cluster: string | number, config: ReportingConfig[], configureReporting?: boolean, read?: boolean): Promise<void>;
export declare function setupConfigureForReporting(cluster: string | number, attribute: ReportingConfigAttribute, config: ReportingConfigWithoutAttribute, access: Access, endpointNames?: string[]): Configure;
export declare function setupConfigureForBinding(cluster: string | number, clusterType: 'input' | 'output', endpointNames?: string[]): Configure;
export declare function forceDeviceType(args: {
    type: 'EndDevice' | 'Router';
}): ModernExtend;
export declare function forcePowerSource(args: {
    powerSource: 'Mains (single phase)' | 'Battery';
}): ModernExtend;
export interface LinkQualityArgs {
    reporting?: boolean;
    attribute?: string | {
        ID: number;
        type: number;
    };
    reportingConfig?: ReportingConfigWithoutAttribute;
}
export declare function linkQuality(args?: LinkQualityArgs): ModernExtend;
export interface BatteryArgs {
    voltageToPercentage?: string | {
        min: number;
        max: number;
    };
    dontDividePercentage?: boolean;
    percentage?: boolean;
    voltage?: boolean;
    lowStatus?: boolean;
    percentageReportingConfig?: ReportingConfigWithoutAttribute;
    percentageReporting?: boolean;
    voltageReportingConfig?: ReportingConfigWithoutAttribute;
    voltageReporting?: boolean;
}
export declare function battery(args?: BatteryArgs): ModernExtend;
export declare function deviceTemperature(args?: Partial<NumericArgs>): ModernExtend;
export declare function identify(args?: {
    isSleepy: boolean;
}): ModernExtend;
export interface OnOffArgs {
    powerOnBehavior?: boolean;
    ota?: DefinitionOta;
    skipDuplicateTransaction?: boolean;
    endpointNames?: string[];
    configureReporting?: boolean;
}
export declare function onOff(args?: OnOffArgs): ModernExtend;
export interface CommandsOnOffArgs {
    commands?: ('on' | 'off' | 'toggle')[];
    bind?: boolean;
    endpointNames?: string[];
    legacyAction?: boolean;
}
export declare function commandsOnOff(args?: CommandsOnOffArgs): ModernExtend;
export declare function customTimeResponse(start: '1970_UTC' | '2000_LOCAL'): ModernExtend;
export declare function illuminance(args?: Partial<NumericArgs>): ModernExtend;
export declare function temperature(args?: Partial<NumericArgs>): ModernExtend;
export declare function pressure(args?: Partial<NumericArgs>): ModernExtend;
export declare function flow(args?: Partial<NumericArgs>): ModernExtend;
export declare function humidity(args?: Partial<NumericArgs>): ModernExtend;
export declare function soilMoisture(args?: Partial<NumericArgs>): ModernExtend;
export declare function occupancy(args?: Partial<BinaryArgs>): ModernExtend;
export declare function co2(args?: Partial<NumericArgs>): ModernExtend;
export declare function pm25(args?: Partial<NumericArgs>): ModernExtend;
export interface LightArgs {
    effect?: boolean;
    powerOnBehavior?: boolean;
    colorTemp?: {
        startup?: boolean;
        range: Range;
    };
    color?: boolean | {
        modes?: ('xy' | 'hs')[];
        applyRedFix?: boolean;
        enhancedHue?: boolean;
    };
    turnsOffAtBrightness1?: boolean;
    configureReporting?: boolean;
    endpointNames?: string[];
    ota?: DefinitionOta;
    levelConfig?: {
        disabledFeatures?: string[];
    };
}
export declare function light(args?: LightArgs): ModernExtend;
export interface CommandsLevelCtrl {
    commands?: ('brightness_move_to_level' | 'brightness_move_up' | 'brightness_move_down' | 'brightness_step_up' | 'brightness_step_down' | 'brightness_stop')[];
    bind?: boolean;
    endpointNames?: string[];
    legacyAction?: boolean;
}
export declare function commandsLevelCtrl(args?: CommandsLevelCtrl): ModernExtend;
export type ColorCtrlCommand = 'color_temperature_move_stop' | 'color_temperature_move_up' | 'color_temperature_move_down' | 'color_temperature_step_up' | 'color_temperature_step_down' | 'enhanced_move_to_hue_and_saturation' | 'color_hue_step_up' | 'color_hue_step_down' | 'color_saturation_step_up' | 'color_saturation_step_down' | 'color_loop_set' | 'color_temperature_move' | 'color_move' | 'hue_move' | 'hue_stop' | 'move_to_saturation' | 'move_to_hue';
export interface CommandsColorCtrl {
    commands?: ColorCtrlCommand[];
    bind?: boolean;
    endpointNames?: string[];
}
export declare function commandsColorCtrl(args?: CommandsColorCtrl): ModernExtend;
export interface LockArgs {
    pinCodeCount: number;
}
export declare function lock(args?: LockArgs): ModernExtend;
export interface WindowCoveringArgs {
    controls: ('lift' | 'tilt')[];
    coverInverted?: boolean;
    stateSource?: 'lift' | 'tilt';
    configureReporting?: boolean;
}
export declare function windowCovering(args: WindowCoveringArgs): ModernExtend;
export interface CommandsWindowCoveringArgs {
    commands?: ('open' | 'close' | 'stop')[];
    bind?: boolean;
    endpointNames?: string[];
    legacyAction: boolean;
}
export declare function commandsWindowCovering(args?: CommandsWindowCoveringArgs): ModernExtend;
export type iasZoneType = 'occupancy' | 'contact' | 'smoke' | 'water_leak' | 'carbon_monoxide' | 'sos' | 'vibration' | 'alarm' | 'gas' | 'generic';
export type iasZoneAttribute = 'alarm_1' | 'alarm_2' | 'tamper' | 'battery_low' | 'supervision_reports' | 'restore_reports' | 'ac_status' | 'test' | 'battery_defect';
export interface IasArgs {
    zoneType: iasZoneType;
    zoneAttributes: iasZoneAttribute[];
    alarmTimeout?: boolean;
}
export declare function iasZoneAlarm(args: IasArgs): ModernExtend;
export interface IasWarningArgs {
    reversePayload?: boolean;
}
export declare function iasWarning(args?: IasWarningArgs): ModernExtend;
type MultiplierDivisor = {
    multiplier?: number;
    divisor?: number;
};
export interface ElectricityMeterArgs {
    cluster?: 'both' | 'metering' | 'electrical';
    current?: false | MultiplierDivisor;
    power?: false | MultiplierDivisor;
    voltage?: false | MultiplierDivisor;
    energy?: false | MultiplierDivisor;
    configureReporting?: boolean;
}
export declare function electricityMeter(args?: ElectricityMeterArgs): ModernExtend;
export declare function ota(definition?: DefinitionOta): ModernExtend;
export interface EnumLookupArgs {
    name: string;
    lookup: KeyValue;
    cluster: string | number;
    attribute: string | {
        ID: number;
        type: number;
    };
    description: string;
    zigbeeCommandOptions?: {
        manufacturerCode?: number;
        disableDefaultResponse?: boolean;
    };
    access?: 'STATE' | 'STATE_GET' | 'ALL';
    endpointName?: string;
    reporting?: ReportingConfigWithoutAttribute;
    entityCategory?: 'config' | 'diagnostic';
}
export declare function enumLookup(args: EnumLookupArgs): ModernExtend;
export type ScaleFunction = (value: number, type: 'from' | 'to') => number;
export interface NumericArgs {
    name: string;
    cluster: string | number;
    attribute: string | {
        ID: number;
        type: number;
    };
    description: string;
    zigbeeCommandOptions?: {
        manufacturerCode?: number;
        disableDefaultResponse?: boolean;
    };
    access?: 'STATE' | 'STATE_GET' | 'ALL';
    unit?: string;
    endpointNames?: string[];
    reporting?: ReportingConfigWithoutAttribute;
    valueMin?: number;
    valueMax?: number;
    valueStep?: number;
    scale?: number | ScaleFunction;
    label?: string;
    entityCategory?: 'config' | 'diagnostic';
    precision?: number;
}
export declare function numeric(args: NumericArgs): ModernExtend;
export interface BinaryArgs {
    name: string;
    valueOn: [string | boolean, unknown];
    valueOff: [string | boolean, unknown];
    cluster: string | number;
    attribute: string | {
        ID: number;
        type: number;
    };
    description: string;
    zigbeeCommandOptions?: {
        manufacturerCode: number;
    };
    endpointName?: string;
    reporting?: ReportingConfig;
    access?: 'STATE' | 'STATE_GET' | 'ALL';
    entityCategory?: 'config' | 'diagnostic';
}
export declare function binary(args: BinaryArgs): ModernExtend;
export type Parse = (msg: Fz.Message, attributeKey: string | number) => unknown;
export interface ActionEnumLookupArgs {
    actionLookup: KeyValue;
    cluster: string | number;
    attribute: string | {
        ID: number;
        type: number;
    };
    endpointNames?: string[];
    buttonLookup?: KeyValue;
    extraActions?: string[];
    commands?: string[];
    parse?: Parse;
}
export declare function actionEnumLookup(args: ActionEnumLookupArgs): ModernExtend;
export interface QuirkAddEndpointClusterArgs {
    endpointID: number;
    inputClusters?: string[] | number[];
    outputClusters?: string[] | number[];
}
export declare function quirkAddEndpointCluster(args: QuirkAddEndpointClusterArgs): ModernExtend;
export declare function quirkCheckinInterval(timeout: number | keyof typeof timeLookup): ModernExtend;
export declare function reconfigureReportingsOnDeviceAnnounce(): ModernExtend;
export declare function deviceEndpoints(args: {
    endpoints: {
        [n: string]: number;
    };
    multiEndpointSkip?: string[];
}): ModernExtend;
export declare function ignoreClusterReport(args: {
    cluster: string | number;
}): ModernExtend;
export declare function bindCluster(args: {
    cluster: string | number;
    clusterType: 'input' | 'output';
    endpointNames?: string[];
}): ModernExtend;
export {};
//# sourceMappingURL=modernExtend.d.ts.map