# @lumiastream/tplink-tapo-cove

Unified TP-Link API supporting both Kasa (older TP-Link devices) and Tapo (newer TP-Link devices) smart home products.

## Features

- Single API for both Kasa and Tapo devices
- Automatic protocol detection
- Device discovery (local and cloud)
- Control lights, plugs, and other smart devices
- Support for RGB colors, brightness, and color temperature
- Energy monitoring for compatible devices

## Installation

```bash
npm install @lumiastream/tplink-tapo-cove
```

## Usage

### Basic Example

```typescript
import { UnifiedTpLinkApi } from '@lumiastream/tplink-tapo-cove';

// Initialize the API
const api = new UnifiedTpLinkApi({
  email: 'your-email@example.com',
  password: 'your-password'
});

// Discover all devices
const { allDevices } = await api.discover();

// Control a device
const deviceId = allDevices[0].id;
await api.turnOn(deviceId);
await api.setBrightness(deviceId, 50);
await api.setRgb(deviceId, 255, 0, 0); // Red
```

### Device Discovery

```typescript
// Discover both Kasa and Tapo devices
const { kasaDevices, tapoDevices, allDevices } = await api.discover({
  includeKasa: true,
  includeTapo: true,
  kasaTimeout: 4000
});

// Get devices by protocol
const kasaOnly = api.getDevicesByProtocol(DeviceProtocol.KASA);
const tapoOnly = api.getDevicesByProtocol(DeviceProtocol.TAPO);
```

### Advanced Control

```typescript
// Create custom light states
const tapoState = api.createTapoLightState();
tapoState.on().brightness(75).hsl(180, 100, 50);

const kasaState = api.createKasaLightState();
kasaState.on().brightness(50).rgb(0, 255, 0);

// Apply states to devices
await api.setLightState(deviceId, tapoState.getValues());
```

## API Reference

### UnifiedTpLinkApi

Main class for controlling TP-Link devices.

**Methods:**
- `discover(options)` - Discover all devices
- `getDevice(deviceId)` - Get device by ID
- `getAllDevices()` - Get all discovered devices
- `getDevicesByProtocol(protocol)` - Filter devices by protocol
- `getDevicesByType(type)` - Filter devices by type
- `turnOn(deviceId)` / `turnOff(deviceId)` - Control power
- `setBrightness(deviceId, value)` - Set brightness (0-100)
- `setRgb(deviceId, r, g, b)` - Set RGB color
- `setHsl(deviceId, h, s, l)` - Set HSL color
- `setColorTemperature(deviceId, temp)` - Set color temperature
- `getDeviceInfo(deviceId)` - Get device information
- `getEnergyUsage(deviceId)` - Get energy usage data

### Device Protocols

- `DeviceProtocol.KASA` - Older TP-Link devices (HS, KL, LB series)
- `DeviceProtocol.TAPO` - Newer TP-Link devices (Tapo series)

## License

MIT