@steveglenner/tplink-smarthome-api
v5.1.0
Published
TP-Link Smart Home API
Maintainers
Readme
@steveglenner/tplink-smarthome-api
Fork of plasticrake/tplink-smarthome-api with KLAP v1/v2 support for firmware that closed TCP 9999 (for example KL125 1.1.1).
TP-Link Smarthome API
Known Supported Devices
| Model | Type | | -------------------------------------------------------------------------------------------------------- | ------------------ | | HS100, HS103, HS105, HS107, HS110,HS200, HS210, HS220, HS300, KP303, KP400ES20M, 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.
Related Projects
- TP-Link Smarthome Device Simulator - Useful for automated testing
- TP-Link Smarthome Crypto
- TP-Link Smarthome Homebridge Plugin (original)
- homebridge-tplink-smarthome-klap2 - this fork's Homebridge plugin
Examples
See more examples.
const { Client } = require('@steveglenner/tplink-smarthome-api');
const client = new Client({
defaultSendOptions: { timeout: 15000 },
// Required for KLAP firmware (Kasa email/password):
// username: '[email protected]',
// password: 'your-kasa-password',
});
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);
});CLI
Install the command line utility with npm install -g @steveglenner/tplink-smarthome-api. Run tplink-smarthome-api --help for help.
Pass --username and --password (Kasa account) when talking to devices that use KLAP.
API
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.)
Credits
Thanks to George Georgovassilis and Thomas Baust for figuring out the HS1XX encryption.
Some design cues for Client based on node-lifx
