import { Detachables } from '../common';
import { UnifiAccess } from '../UnifiAccess';
import { UnifiAccessClient } from '../UnifiAccessClient';
import { UnifiAccessPlatform } from '../UnifiAccessPlatform.js';
import { Characteristic, PlatformAccessory, Service } from 'homebridge';
import { ILogger } from '../Logger.js';
export declare abstract class Device<D extends UnifiAccess.Device = UnifiAccess.Device> {
    readonly platform: UnifiAccessPlatform;
    readonly client: UnifiAccessClient;
    readonly accessory: PlatformAccessory;
    readonly primaryService: Service;
    readonly device: D;
    readonly logger: ILogger;
    protected statusFault: Characteristic;
    protected readonly detachables: Detachables;
    protected constructor(platform: UnifiAccessPlatform, client: UnifiAccessClient, accessory: PlatformAccessory, device: D, primaryService: Service);
    get id(): string;
    get type(): "door";
    get name(): string;
    close(): Promise<void>;
    setFault(fault: boolean): void;
    abstract onMessage(msg: UnifiAccess.Message, platform: UnifiAccessPlatform): void;
    abstract update(device: D): void;
    abstract doClose(): Promise<void>;
}
export declare namespace Device {
    type Factory<D extends Device = Device> = {
        create: (platform: UnifiAccessPlatform, client: UnifiAccessClient, accessory: PlatformAccessory, device: UnifiAccess.Device) => Promise<D>;
    };
}
//# sourceMappingURL=Device.d.ts.map