import { Logger } from 'homebridge';
export declare enum RabbitAirMode {
    Auto = 0,
    Pollen = 1,
    Manual = 2
}
export declare enum RabbitAirSpeed {
    SuperSilent = 0,
    Silent = 1,
    Low = 2,
    Medium = 3,
    High = 4,
    Turbo = 5
}
export declare enum RabbitAirQuality {
    Lowest = 0,
    Low = 1,
    Medium = 2,
    High = 3,
    Highest = 4
}
export declare enum RabbitAirSensitivity {
    High = 0,
    Medium = 1,
    Low = 2
}
export interface RabbitAirState {
    power?: boolean;
    mode?: RabbitAirMode;
    speed?: RabbitAirSpeed;
    quality?: RabbitAirQuality;
    sensitivity?: RabbitAirSensitivity;
    ionizer?: boolean;
    filterLife?: number;
    filterCleaning?: boolean;
    filterReplacement?: boolean;
    error?: number;
    rssi?: number;
}
export interface RabbitAirInfo {
    name: string;
    mac: string;
    model?: string;
    firmware?: string;
    uptime?: number;
}
export interface RabbitAirConfig {
    host: string;
    token: string;
    port?: number;
}
export interface RabbitAirStateResponse {
    id: number;
    cmd?: number;
    data: {
        model: number;
        firmware: number[];
        power: boolean;
        mode: RabbitAirMode;
        speed: RabbitAirSpeed;
        quality: RabbitAirQuality;
        sensitivity: RabbitAirSensitivity;
        ionizer: boolean;
        idle: number;
        moodlight: number;
        filter_cleaning: boolean;
        filter_replacement: boolean;
        filter_life: number;
        light_sensor: boolean;
        filter_timer: number;
        all_light_off: number;
        error: number;
        tag_state: number;
        tag_uid: number[];
        filter_type: number;
        pm_sensor: number[];
        color: number[];
        lsens_ctl: boolean;
        filter_ctl: boolean;
        buzzer: boolean;
        gas: number;
        lock: boolean;
        open: boolean;
        light_state: number;
        timer_mode: number;
        timer: number;
        schedule: string;
        tz: string | null;
        s2: string | null;
        rssi: number;
        v: string;
    };
    error?: number;
}
export interface RabbitAirInfoResponse {
    id: number;
    cmd: number;
    data: {
        name: string;
        mac: string;
        model?: string;
        fv?: string;
        uptime?: number;
    };
    error?: number;
}
export declare class RabbitAirClient {
    private socket;
    private host;
    private port;
    private token;
    private commandId;
    private tsDiff;
    private isConnected;
    private logger;
    private readonly TIMEOUT_MS;
    private readonly MAX_RETRIES;
    private connectionAttempts;
    private readonly MAX_CONNECTION_ATTEMPTS;
    constructor(config: RabbitAirConfig, logger: Logger);
    private nextId;
    private getClock;
    private getTimestamp;
    private encrypt;
    private decrypt;
    private sendCommand;
    private fallbackUnencryptedCommand;
    private testConnection;
    private sendCommandWithRetry;
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    getState(): Promise<RabbitAirState>;
    setState(state: Partial<RabbitAirState>): Promise<void>;
    getInfo(): Promise<RabbitAirInfo>;
    checkDeviceCapabilities(): Promise<{
        supportsEncryption: boolean;
        responsive: boolean;
    }>;
    maintainConnection(): Promise<void>;
    shutdown(): Promise<void>;
}
