const utils = require('.');
const {
login
} = require("tplink-cloud-api");
let tplink;
login(
process.env.TPLINK_EMAIL,
process.env.TPLINK_PASSWORD,
utils.uuid()
).then(function(new_tplink) {
tplink = new_tplink;
console.log("TPLink authentication successful");
}).catch(console.error);
module.exports = {
set_devices: set_devices,
};
function set_devices( /* ...devices [optional], state */ ) {
let devices;
let state;
if (arguments.length === 1) {
devices = [];
state = arguments[0];
} else {
devices = [...arguments];
state = devices.pop();
}
return tplink.getDeviceList().then(function(device_list) {
let asyncFunctions = [];
for (const device_data of device_list) {
const device = tplink.newDevice(device_data);
if (device.disconnected) { // might be !device.status
console.log(device.alias, "disconnected!");
continue;
}
if (!devices.length || utils.includes_substr(devices, device.alias)) {
asyncFunctions.push(function(callback) {
device.isOn().then(function(on) {
if (on !== state) {
if (on) {
console.log("Turn off", device.alias);
device.powerOff();
} else {
console.log("Turn on", device.alias);
device.powerOn();
}
callback(true);
} else {
console.log(`${device.alias} is already ${on ? "on" : "off"}`);
callback();
}
});
});
}
}
return asyncFunctions;
}).then(function(asyncFunctions) {
return new Promise(function(resolve) {
utils.asyncCallback(asyncFunctions, resolve);
});
});
}