/yeelight-node

💡 A simple Node.js library to discover and control Xiaomi Yeelights over LAN

Primary LanguageJavaScriptMIT LicenseMIT

yeelight-node

npm Build Status

A simple Node.js library to discover and control Xiaomi Yeelights over LAN.

This solution offers a 1:1 implementation of the official docs from Xiaomi, and also includes an SSDP implementation to retrieve the IP of your light.

Competing standards

Installation

# Run this in your favourite terminal
npm i yeelight-node

Usage

⚠️ Make sure you enabled the LAN Control option in the Yeelight app.

You can get started by running the example, which will discover and ping your devices over LAN:

node example/index.js

In your code, simply require and instantiate the package as a class, passing in the IP address and port of the device as an object.

const { Yeelight } = require('yeelight-node')

const yeelight = new Yeelight({ ip: '0.0.0.0', port: 55443 })

yeelight.set_power('on')
yeelight.set_rgb([250, 150, 120])

yeelight.get_prop('bright').then(
    data => console.log(data)
)

If you don't know the IP of your device, you can use the SSDP client to scan your network:

const { Client } = require('yeelight-node')

const client = new Client()

client.bind(yeelight => {
    yeelight.set_power('on')
    yeelight.set_rgb([250, 150, 120])

    yeelight.get_prop('bright').then(
        data => console.log(data)
    )
})

You can now call any of the operations from the official docs on this instance.

As stated in the docs, Xiaomi devices support up to 4 simultaneous TCP connections. Any further connect attempt will be rejected. This library exposes the yeelight.closeConnection() to close the TCP connection at will, should your use case require it.

Tests

To run the tests:

mocha tests/yeelight.test.js

Credits

Original work by @cpav3.