import type { API, HAP, PlatformAccessory, Service, WithUUID } from "homebridge"; import { type HomebridgePluginLogging, type Nullable } from "homebridge-plugin-utils"; import type { ProtectApi, ProtectEventPacket, ProtectNvrConfig } from "unifi-protect"; import { type ProtectDeviceConfigTypes } from "../protect-types.js"; import type { ProtectNvr } from "../protect-nvr.js"; import type { ProtectPlatform } from "../protect-platform.js"; export interface ProtectHints { crop: boolean; cropOptions: { height: number; width: number; x: number; y: number; }; enabled: boolean; hardwareDecoding: boolean; hardwareTranscoding: boolean; highResSnapshots: boolean; hksvRecordingIndicator: boolean; ledStatus: boolean; logDoorbell: boolean; logHksv: boolean; logMotion: boolean; motionDuration: number; nightVision: boolean; occupancyDuration: number; probesize: number; recordingDefault: string; smartDetect: boolean; smartDetectSensors: boolean; smartOccupancy: string[]; standalone: boolean; streamingDefault: string; syncName: boolean; transcode: boolean; transcodeBitrate: number; transcodeHighLatency: boolean; transcodeHighLatencyBitrate: number; tsbStreaming: boolean; twoWayAudio: boolean; twoWayAudioDirect: boolean; } export declare abstract class ProtectBase { readonly api: API; private debug; protected readonly hap: HAP; readonly log: HomebridgePluginLogging; readonly nvr: ProtectNvr; ufpApi: ProtectApi; readonly platform: ProtectPlatform; constructor(nvr: ProtectNvr); protected setInfo(accessory: PlatformAccessory, device: ProtectDeviceConfigTypes | ProtectNvrConfig): boolean; get name(): string; } export declare abstract class ProtectDevice extends ProtectBase { accessory: PlatformAccessory; hints: ProtectHints; protected listeners: Map void>; protected timers: Map; ufp: ProtectDeviceConfigTypes; constructor(nvr: ProtectNvr, accessory: PlatformAccessory); protected acquireService(serviceType: WithUUID, name?: string, subtype?: string, onServiceCreate?: (svc: Service) => void): Nullable; protected validService(serviceType: WithUUID, validate: boolean, subtype?: string): boolean; protected configureHints(): boolean; configureInfo(): boolean; cleanup(): void; protected registerListener(event: string, handler: (packet: ProtectEventPacket) => void): void; protected registerTimeout(key: string, callback: () => void, delay: number): void; protected registerInterval(key: string, callback: () => void, interval: number): void; protected clearTimer(key: string): void; protected publish(topic: string, message: string): void; protected subscribeGet(topic: string, type: string, getValue: () => string): void; protected subscribeSet(topic: string, type: string, setValue: (value: string, rawValue: string) => Promise | void): void; protected configureMotionSensor(isEnabled?: boolean, isInitialized?: boolean): boolean; private configureMotionSwitch; private configureMotionTrigger; protected configureOccupancySensor(isEnabled?: boolean, isInitialized?: boolean): boolean; protected configureStatusLedSwitch(isEnabled?: boolean): boolean; setStatusLed(value: boolean): Promise; getFeatureFloat(option: string): Nullable; getFeatureNumber(option: string): Nullable; getFeatureValue(option: string): Nullable; hasFeature(option: string): boolean; isDeviceFeature(option: string): boolean; logFeature(option: string, message: string, nvrMessage?: string): void; isReservedName(name?: string): boolean; get isOnline(): boolean; get id(): string; get name(): string; get accessoryName(): string; set accessoryName(name: string); protected statusLedCommand(value: boolean): object; private hasLedSettings; get statusLed(): boolean; }