TP-Link Smarthome API — a maintained, lodash-free fork of plasticrake/tplink-smarthome-api. Requires Node.js 22+.
npm install @jstark/tplink-smarthome-api
| Model | Type |
|---|---|
| HS100, HS103, HS105, HS107, HS110, HS200, HS210, HS220, HS300, KP303, KP400 ES20M, EP40, ...etc. |
Plug |
| LB100, LB110, LB120, LB130, LB200, LB230, KL50, KL120, KL125 ...etc. |
Bulb |
| KL430 ...etc. |
Bulb (light strip) |
Many other TP-Link Plug and Bulb models may work as well. Note that Tapo devices are not supported.
See more examples.
const { Client } = require('@jstark/tplink-smarthome-api');
const client = new Client();
const plug = client.getDevice({ host: '10.0.1.2' }).then((device) => {
device.getSysInfo().then(console.log);
device.setPowerState(true);
});
// Look for devices, log to console, and turn them on
client.startDiscovery().on('device-new', (device) => {
device.getSysInfo().then(console.log);
device.setPowerState(true);
});
Install the command line utility with npm install -g @jstark/tplink-smarthome-api. Run tplink-smarthome-api --help for help.
For functions that send commands, the last argument is SendOptions where you can set the transport ('tcp','udp') and timeout, etc.
Functions that take more than 3 arguments are passed a single options object as the first argument (and if its a network command, SendOptions as the second.)
Thanks to George Georgovassilis and Thomas Baust for figuring out the HS1XX encryption.
Some design cues for Client based on node-lifx