import { AxiosResponse } from 'axios';
import { Logging } from 'homebridge';
export declare const enum TargetHeatingCoolingState {
    OFF = 0,
    HEAT = 1,
    COOL = 2,
    AUTO = 3,
    AUXILIARY_HEAT = 4
}
export type DataChanged = () => void;
export declare const DAIKIN_DEVICE_WRITE_DELAY_MS: number;
export declare const DAIKIN_DEVICE_BACKGROUND_REFRESH_MS: number;
export declare const DAIKIN_DEVICE_FOREGROUND_REFRESH_MS: number;
export declare class DaikinApi {
    private _token;
    private _tokenExpiration;
    private _devices;
    private _isInitialized;
    private _listeners;
    private _lastUpdateTimeMs;
    private _nextUpdateTimeMs;
    private _noUpdateBeforeMs;
    private _updateTimeout?;
    private _lastWriteStartTimeMs;
    private _lastWriteFinishTimeMs;
    private _lastReadStartTimeMs;
    private _lastReadFinishTimeMs;
    private user;
    private password;
    private log;
    private pendingCoolThreshold?;
    private pendingHeatThreshold?;
    constructor(user: string, password: string, log: Logging);
    addListener(l: DataChanged): void;
    removeListener(l: DataChanged): void;
    private notifyListeners;
    Initialize(): Promise<void>;
    isInitialized(): boolean;
    getData(): Promise<void>;
    updateNow(): void;
    /**
     * Schedules the next update. The scheduler has 2 modes.
     *
     * ASAP:    Pull an update as soon as updates are neither blocked by a prior `blockUntilMs` value
     *          nor by the maximum refresh frequency `DAIKIN_DEVICE_FOREGROUND_REFRESH_MS`.
     *
     * Regular: Pull an update every `DAIKIN_DEVICE_BACKGROUND_REFRESH_MS`.
     *
     * @param blockUntilMs If given and > 0 then no updates are guaranteed to take place in the next `blockUntilMs` milliseconds.
     * @param asap perform update as soon as allowed by DAIKIN_DEVICE_FOREGROUND_REFRESH_MS
     */
    _scheduleUpdate(blockUntilMs?: number, asap?: boolean): void;
    private _scheduleAsap;
    private _scheduleFuture;
    private _updateIn;
    private _monotonic_clock_ms;
    getToken(): Promise<boolean | void>;
    setToken(response: AxiosResponse<any>): Promise<void>;
    getDevices(): Promise<any>;
    getDeviceData(device: any): Promise<any>;
    refreshToken(): Promise<boolean | void> | undefined;
    getRequest(uri: string): Promise<any>;
    getDeviceList(): any[] | undefined;
    getDeviceName(deviceName: number, deviceNameCustom: string): string;
    deviceHasData(deviceId: string): boolean;
    getCurrentStatus(deviceId: string): number;
    getCurrentTemp(deviceId: string): number;
    getOutdoorTemp(deviceId: string): number;
    getTargetState(deviceId: string): number;
    getOneCleanFanActive(deviceId: string): boolean;
    getCirculateAirFanActive(deviceId: string): boolean;
    getCirculateAirFanSpeed(deviceId: string): number;
    getTargetTemp(deviceId: string): number;
    heatingThresholdTemperature(deviceId: string): number;
    coolingThresholdTemperature(deviceId: string): number;
    getCurrentHumidity(deviceId: string): number;
    getOutdoorHumidity(deviceId: string): number;
    getTargetHumidity(deviceId: string): number;
    getAirQualityLevel(deviceId: string, forIndoor: boolean): number;
    getOzone(deviceId: string, forIndoor: boolean): number;
    getAirQualityValue(deviceId: string, forIndoor: boolean): number;
    getPM2_5Density(deviceId: string, forIndoor: boolean): number;
    getVocDensity(deviceId: string, forIndoor: boolean): number;
    getDisplayUnits(deviceId: string): number;
    getScheduleState(deviceId: string): boolean;
    getAwayState(deviceId: string): boolean;
    setTargetTemps(deviceId: string, targetTemp?: number, heatThreshold?: number, coolThreshold?: number): Promise<boolean>;
    setTargetState(deviceId: string, requestedState: number): Promise<boolean>;
    setOneCleanFanActive(deviceId: string, requestedState: boolean): Promise<boolean>;
    setCirculateAirFanActive(deviceId: string, requestedState: boolean): Promise<boolean>;
    setCirculateAirFanSpeed(deviceId: string, requestedSpeed: number): Promise<boolean>;
    setDisplayUnits(deviceId: string, requestedUnits: number): Promise<boolean>;
    setTargetHumidity(deviceId: string, requestedHumidity: number): Promise<boolean>;
    setScheduleState(deviceId: string, requestedState: boolean): Promise<boolean>;
    setAwayState(deviceId: string, requestedState: boolean, enableSchedule: boolean): Promise<boolean>;
    private putRequest;
    private _updateCache;
    private _cachedDeviceById;
    logError(message: string, error: any): boolean;
}
//# sourceMappingURL=daikinapi.d.ts.map