yeelight-raw
v1.0.1
Published
Reliable fire-and-forget Yeelight LAN control — raw TCP writes, no listener accumulation
Maintainers
Readme
yeelight-raw
Reliable fire-and-forget Yeelight LAN control using raw TCP writes
Why this exists
I have experienced two significant issues while using yeelight-node:
- Listener accumulation —
_sendCommandregisters newdata/errorlisteners on every call, causing MaxListeners warnings and eventual command drops. - Premature connected flag —
_connect()setsthis.connected = truesynchronously before the TCP connection is established, causing double-connect and more listener accumulation on repeated calls.
yeelight-raw bypasses all of that by writing raw JSON directly to a single persistent net.Socket. One socket, one set of listeners, no accumulation.
Install
npm install yeelight-rawNo dependencies, yeelight-raw uses only Node.js built-ins (net, dgram, events).
Quick start
With discovery
const { discover } = require('yeelight-raw');
const disc = discover((device) => {
console.log(`Found: ${device.ip}:${device.port}`);
device.on('error', (err) => console.error('Error:', err));
device.on('close', () => console.log('Disconnected'));
device.send('set_power', ['on', 'smooth', 500, 0]);
device.send('set_bright', [80, 'smooth', 500]);
device.send('set_rgb', [255 * 65536 + 128 * 256 + 0, 'smooth', 500]);
});
setTimeout(() => disc.stop(), 10_000);Known device (skip discovery)
const { YeelightDevice } = require('yeelight-raw');
const device = new YeelightDevice({ ip: '192.168.1.100', port: 55443 });
device.on('error', (err) => console.error(err));
device.send('toggle', []);Common commands
For the full list of methods and parameters see the Yeelight Inter-Operation Spec.
| Action | method | params |
|---|---|---|
| Power on | set_power | ['on', 'smooth', 500, 0] |
| Power off | set_power | ['off', 'smooth', 500, 0] |
| Brightness | set_bright | [value_1_to_100, 'smooth', 500] |
| RGB colour | set_rgb | [r*65536 + g*256 + b, 'smooth', 500] |
| Toggle | toggle | [] |
| Set name | set_name | ['My Light'] |
API
discover(callback?) → YeelightDiscovery
Starts SSDP discovery and calls callback(device) for each new device found. Returns the YeelightDiscovery instance.
YeelightDiscovery
search()— send another M-SEARCH multicaststop()— close the UDP socket and stop discoveryrestart()— stop, clear the known-device cache, and start discovery again- Events:
device,error
YeelightDevice
send(method, params)— fire-and-forget command; connects lazily on first calldisconnect()— close the TCP socketreconnect(ip?, port?)— close and re-open the TCP socket; optional args override the stored IP/port; useful after acloseevent or when the device's address changes- Properties:
id,ip,port,state({ on, brightness, rgb }) - Events:
error,close
License
MIT
