/** * Device Manager * * Orchestrates device discovery, creation, and connection management. * Combines cloud API and mDNS discovery to create and connect devices. */ import type { Logging } from 'homebridge'; import type { DysonDevice, MqttClientFactory } from './dysonDevice.js'; import type { MqttConnectFn } from '../protocol/mqttClient.js'; /** * Configuration for DeviceManager */ export interface DeviceManagerConfig { /** Dyson account email (for cloud discovery) */ email?: string; /** Dyson account password */ password?: string; /** Country code for Dyson API */ countryCode?: string; /** Manually configured devices */ devices?: ManualDeviceConfig[]; /** mDNS discovery timeout in milliseconds */ discoveryTimeout?: number; /** Logger instance */ log?: Logging; /** MQTT client factory (for testing) */ mqttClientFactory?: MqttClientFactory; /** MQTT connect function (for testing) */ mqttConnectFn?: MqttConnectFn; } /** * Manual device configuration */ export interface ManualDeviceConfig { /** Device serial number */ serial: string; /** Local MQTT credentials (password hash) */ credentials: string; /** Device IP address */ ipAddress: string; /** Device name (optional) */ name?: string; /** Product type (e.g., '438', '455') */ productType: string; } /** * Discovery result summary */ export interface DiscoveryResult { /** Total devices found */ total: number; /** Devices successfully connected */ connected: number; /** Devices that failed to connect */ failed: number; /** Unsupported device product types */ unsupported: string[]; } /** * DeviceManager orchestrates device discovery and connection management * * Supports two discovery modes: * 1. Cloud API + mDNS: Retrieves device list from cloud, discovers IPs via mDNS * 2. Manual: Uses manually configured device credentials and IPs * * @example * ```typescript * const manager = new DeviceManager({ * email: 'user@example.com', * password: 'password', * log: homebridge.log, * }); * const devices = await manager.discoverAndConnect(); * const myDevice = manager.getDevice('ABC-AB-12345678'); * ``` */ export declare class DeviceManager { private readonly config; private readonly log; private readonly devices; constructor(config: DeviceManagerConfig); /** * Discover devices and establish connections * * Combines cloud API discovery (if credentials provided) with mDNS discovery, * and also includes any manually configured devices. * * @returns Array of connected DysonDevice instances */ discoverAndConnect(): Promise; /** * Get a device by serial number * * @param serial - Device serial number * @returns DysonDevice instance or undefined */ getDevice(serial: string): DysonDevice | undefined; /** * Get all connected devices * * @returns Array of all DysonDevice instances */ getAllDevices(): DysonDevice[]; /** * Disconnect all devices */ disconnectAll(): Promise; /** * Discover devices from Dyson Cloud API */ private discoverFromCloud; /** * Process manually configured devices */ private processManualDevices; /** * Validate manual device configuration */ private validateManualDevice; /** * Discover IP addresses via mDNS for devices without IPs */ private discoverIPAddresses; /** * Create and connect a device */ private createAndConnectDevice; /** * Handle cloud API errors with appropriate logging */ private handleCloudError; /** * Create a null logger for when no logger is provided */ private createNullLogger; } //# sourceMappingURL=deviceManager.d.ts.map