import { Logging } from 'homebridge';
import { AirQualityLevel, Thermostat, ThermostatData, EquipmentStatus, TemperatureUnit, ThermostatMode } from './types.js';
type DataChanged = () => void;
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 logRaw;
    private _pendingThresholds;
    private _emergencyHeatEnabled;
    constructor(user: string, password: string, log: Logging, logRaw: boolean);
    addListener(deviceId: string, listener: DataChanged): void;
    removeListener(deviceId: string, listener: DataChanged): void;
    private notifyListeners;
    Initialize(): Promise<void>;
    isInitialized(): boolean;
    private getData;
    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
     */
    private _scheduleUpdate;
    private _scheduleAsap;
    private _scheduleFuture;
    private _updateIn;
    private _monotonic_clock_ms;
    private getToken;
    private setToken;
    private getDevices;
    getDeviceData(deviceId: string): Promise<ThermostatData | undefined>;
    private refreshToken;
    private getRequest;
    getDeviceList(): Thermostat[];
    getCurrentStatus(deviceId: string): EquipmentStatus;
    getCurrentTemp(deviceId: string): number;
    getOutdoorTemp(deviceId: string): number;
    getTargetState(deviceId: string): ThermostatMode;
    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): AirQualityLevel;
    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): TemperatureUnit;
    getScheduleState(deviceId: string): boolean;
    getAwayState(deviceId: string): boolean;
    setEmergencyHeatEnabled(deviceId: string, enabled: boolean): void;
    isEmergencyHeatEnabled(deviceId: string): boolean;
    setTargetTemps(deviceId: string, targetTemp?: number, heatThreshold?: number, coolThreshold?: number): Promise<boolean>;
    setTargetState(deviceId: string, requestedState: ThermostatMode): 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: TemperatureUnit): 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 logError;
}
export {};
//# sourceMappingURL=daikinapi.d.ts.map