UNPKG

@tuyapi/cli

Version:

🔧 A CLI for Tuya devices

77 lines (61 loc) • 1.84 kB
const ora = require('ora'); const TuyaLink = require('@tuyapi/link').wizard; const c = require('./common'); async function link(config, options) { // Check arguments if (!options.ssid || !options.password || !options.schema) { c.badArgument(options); } if ((!options.apiKey && !config.get('apiKey')) || (!options.apiSecret && !config.get('apiSecret'))) { c.badArgument(options); } // Save API parameters if (options.saveAPI) { config.set('apiKey', options.apiKey); config.set('apiSecret', options.apiSecret); } // Set API parameters if (!options.apiKey) { options.apiKey = config.get('apiKey'); } if (!options.apiSecret) { options.apiSecret = config.get('apiSecret'); } // Start linking process const link = new TuyaLink({ apiKey: options.apiKey, apiSecret: options.apiSecret, email: 'johndoe@example.com', password: 'examplepassword', schema: options.schema, region: options.region, timezone: options.timezone, bindAddr: options.bindAddr }); const spinner = ora('Registering devices(s)...').start(); try { await link.init(); const devices = await link.linkDevice({ssid: options.ssid, wifiPassword: options.password, devices: options.num}); spinner.succeed('Device(s) registered!'); // Get device details const device_ids = devices.map(d => d.device_id); const deviceDetails = (await link.getLinkedDevices({ids: device_ids})).devices; // Save devices to config if (options.save) { for (const device of deviceDetails) { config.set(device.id, device.local_key); } } const prettyDevices = deviceDetails.map(d => ({ id: d.id, ip: d.ip, localKey: d.local_key, name: d.name })); return console.log(prettyDevices); } catch (error) { spinner.fail('Device(s) failed to be registered!'); console.log(error); } } module.exports = link;