TPLink HS100/HS105/HS110 WiFi Smart Plug API
const Hs100Api = require('hs100-api');
const client = new Hs100Api.Client();
const plug = client.getPlug({host: '10.0.1.2'});
plug.getInfo().then(console.log);
plug.setPowerState(true);
// Look for plugs, log to console, and turn them on
client.startDiscovery().on('plug-new', (plug) => {
plug.getInfo().then(console.log);
plug.setPowerState(true);
});The API is currently not stable and there may be breaking changes.
Returns a Client object.
options: {
[address]
[, port]
[, broadcast = '255.255.255.255']
[, discoveryInterval = 30000]
[, offlineTolerance = 3]
[, typeFilter = 'IOT.SMARTPLUGSWITCH']
[, debug = false]
}Sends a discovery packet to the broadcast address every discoveryInterval. An array of addresses can be specified to query directly. If typeFilter is specified only matching devices are found. Returns Client that emits plug-new when a response from a new plug is received and plug-online for known plugs. If a known plug has not been heard from after offlineTolerance number of discovery attempts then emits plug-offline.
Stops discovery process.
Returns a Plug object.
options: { host [, port = 9999] [, timeout = 0] [, inUseThreshold = 0] }Polls the plug every interval. Returns plug that emits power-on/power-off based on the relay state and in-use/not-in-use when the device is drawing more than power than the inUseThreshold if it supports power monitoring. These events may be emitted during any query of the device, not only when using startPolling.
Get all plug info. Same as calling getSysInfo, getCloudInfo, getConsumption, getScheduleNextAction.
Get general plug info.
Get TP-Link Cloud information.
Get power consumption data for HS110 plugs.
Returns true if plug is on.
Turns the plug on or off.
Get list of networks.
Thanks to George Georgovassilis and Thomas Baust for figuring out the HS1XX encryption. https://georgovassilis.blogspot.com/2016/05/controlling-tp-link-hs100-wi-fi-smart.html
Some design cues for Client based on https://github.com/MariusRumpf/node-lifx/