node-red-contrib-tplink-tapo-connect-api
Version:
This unofficial node-RED node allows connection to TP-Link Tapo devices. This project has been enhanced with AI support to enable new features. Starting with v0.50, we have added support for the KLAP protocol. To prioritize the operation of this node, we
87 lines (86 loc) • 3.43 kB
TypeScript
import { TapoCredentials, TapoApiRequest, TapoApiResponse, TapoDeviceInfo } from '../types';
import { ConnectionManager } from '../core/connection-manager';
import { SessionManager } from '../core/session-manager';
import { ProtocolSelector, ProtocolType } from '../core/protocol-selector';
import { RequestManager } from '../core/request-manager';
import { DeviceController } from '../controllers/device-controller';
import { EnergyController } from '../controllers/energy-controller';
import { LightingController } from '../controllers/lighting-controller';
export interface DeviceCapabilities {
hasEnergyMonitoring: boolean;
hasBrightnessControl: boolean;
hasColorControl: boolean;
hasColorTemperature: boolean;
hasLightEffects: boolean;
}
/**
* Base device class using composition pattern
* Single responsibility: Device lifecycle and controller coordination
*/
export declare abstract class BaseDevice {
protected readonly ip: string;
protected readonly credentials: TapoCredentials;
protected readonly deviceModel: string;
protected connectionManager: ConnectionManager;
protected sessionManager: SessionManager;
protected protocolSelector: ProtocolSelector;
protected requestManager: RequestManager;
protected deviceController: DeviceController;
protected energyController?: EnergyController;
protected lightingController?: LightingController;
protected capabilities: DeviceCapabilities;
protected isInitialized: boolean;
constructor(ip: string, credentials: TapoCredentials, deviceModel: string);
/**
* Connect to the device
*/
connect(): Promise<void>;
/**
* Disconnect from the device
*/
disconnect(): Promise<void>;
/**
* Send request through the request manager
*/
protected sendRequest(request: TapoApiRequest): Promise<TapoApiResponse>;
/**
* Configure request executor for the request manager
*/
protected setRequestExecutor(executor: (request: TapoApiRequest) => Promise<TapoApiResponse>): void;
turnOn(): Promise<void>;
turnOff(): Promise<void>;
getDeviceInfo(): Promise<TapoDeviceInfo>;
setAlias(alias: string): Promise<void>;
ping(): Promise<boolean>;
getEnergyUsage(): Promise<any>;
getCurrentPower(): Promise<number>;
setBrightness(brightness: number): Promise<void>;
setColorHSV(hue: number, saturation: number, brightness?: number): Promise<void>;
setColorRGB(red: number, green: number, blue: number, brightness?: number): Promise<void>;
setNamedColor(colorName: string, brightness?: number): Promise<void>;
setColorTemperature(temperature: number, brightness?: number): Promise<void>;
getCapabilities(): DeviceCapabilities;
isConnected(): boolean;
getDeviceModel(): string;
getDeviceIP(): string;
/**
* Determine device capabilities based on model
*/
protected determineCapabilities(deviceModel: string): DeviceCapabilities;
/**
* Check if device supports light effects
*/
protected supportsLightEffects(deviceModel: string): boolean;
/**
* Initialize session based on protocol type
*/
protected abstract initializeSession(protocol: ProtocolType): Promise<void>;
/**
* Cleanup resources
*/
protected cleanup(): Promise<void>;
/**
* Handle session refresh
*/
protected refreshSession(): Promise<void>;
}