yeelight-control
v1.0.3
Published
Typescript-first library for controlling Yeelight devices over LAN
Downloads
3
Readme
Typescript-first library for controlling Yeelight devices over LAN (WiFi)
Supported features:
- Discovery over multicast
- Connecting devices using discovered data or by known IP:Port
- Automatic device reconnect on network failure or device power cycle
- Event-driven architecture
- Command library (no need to memorize protocol details)
- Background light control features
- Zero external dependencies
- Both CommonJS and ESModule supported (require/import)
Examples
Connect device by known IP and power on
const ip = '192.168.1.100';
const powerOn = (device: Device) => {
device.command(CommandLibrary.powerOn());
};
const printStatus = (state: DeviceState) => {
console.log(`Power: ${state.power}`);
};
const start = () => {
const yeelight = new Yeelight();
const device = yeelight.connectOne(ip);
device.on('connect', () => powerOn(device));
device.on('update', printStatus);
};
start();
Connect discovered devices
const connectedDevices = new Set<Device>();
/* Function will be called several times with overlapping devices,
* but yeelight will return already existing ones if you'll try to connect them again.
* The 0st element is always the newest discovered. */
const add = (data: DiscoveryData[], yeelight: Yeelight): void => {
const device = yeelight.connectDiscovered(data[0]);
connectedDevices.add(device);
console.log('Connected devices:');
for (const device of connectedDevices) {
console.log(`${device.ip}`);
}
};
const start = () => {
const yeelight = new Yeelight();
yeelight.on('discovery', (data) => add(data, yeelight));
};
start();
Cycle through all basic colors
const ip = '192.168.88.22';
const effect = (device: Device) => {
device.command(CommandLibrary.powerOn(PowerOnMode.RGB));
// adjustColor will switch the light to one of basic predefined colors.
// 5000 is tansition duration in ms
setInterval(() => device.command(CommandLibrary.adjustColor(5000)), 5000);
};
const printColor = (data: DeviceState): void => {
const color = data.rgb?.toString(16).padStart(6, '0');
console.log(`Color: #${color}`);
};
const start = () => {
const yeelight = new Yeelight();
const device = yeelight.connectOne(ip);
device.on('connect', () => effect(device)).on('update', printColor);
};
start();
Do some random stuff
const ip = '192.168.88.22';
const yeelight = new Yeelight({ disableDiscovery: true });
const device = yeelight.connectOne(ip);
// do nothing for ms milliseconds
const wait = async (ms: number) =>
new Promise((resolve) => setTimeout(resolve, ms));
// do some random stuff
const sequence = async () => {
device.command(CommandLibrary.powerOn());
await wait(500);
device.command(CommandLibrary.setBright(100));
device.command(CommandLibrary.setRgb(0x0099ff));
await wait(1000);
device.command(CommandLibrary.setBright(50));
device.command(CommandLibrary.setRgb(0xff9900));
await wait(1000);
device.command(CommandLibrary.powerOff);
await wait(50);
device.disconnect();
await wait(5000);
device.connect();
};
device.on('connect', sequence);
device.on('connect', () => console.log('connected'));
device.on('disconnect', () => console.log('disconnected'));