UNPKG

node-miio

Version:

Control Mi Home devices, such as Mi Robot Vacuums, Mi Air Purifiers, Mi Smart Home Gateway (Aqara) and more

67 lines (59 loc) 1.5 kB
'use strict'; const log = require('../../log'); const deviceFinder = require('../../device-finder'); exports.command = 'call <idOrIp> <method> [params...]'; exports.description = 'Call a raw method on a device'; exports.builder = { token: { type: 'string', description: 'The known token of the device to communicate with', }, }; exports.handler = function (argv) { let target = argv.idOrIp; log.info('Attempting to call', argv.method, 'on', target); let foundDevice = false; let pending = 0; const browser = deviceFinder({ filter: target, token: argv.token, }); browser.on('available', (device) => { pending++; log.plain(); log.info('Device found, making call'); log.plain(); const parsedArgs = argv.params ? Array.isArray(argv.params) ? argv.params : JSON.parse(argv.params) : []; log.plain(parsedArgs); device .miioCall(argv.method, parsedArgs) .then((result) => { log.info('Got result:'); log.plain(JSON.stringify(result, null, ' ')); }) .catch((err) => { log.error('Encountered an error while controlling device'); log.plain(); log.plain('Error was:'); log.plain(err.message); }) .then(() => { pending--; process.exit(0); // eslint-disable-line }); }); const doneHandler = () => { if (pending === 0) { if (!foundDevice) { log.warn('Could not find device'); } process.exit(0); // eslint-disable-line } }; setTimeout(doneHandler, 5000); browser.on('done', doneHandler); };