UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

65 lines (57 loc) 1.98 kB
const timeout = 10; const resetSecurityClasses = false; const interviewNodes = []; //* Interview: selected nodes interviewNodes.push(...[/* ids */].map(n => driver.controller.nodes.get(n))); /** * Uncomment below if you rather want to choose based on power */ //* Interview: ONLY listening nodes // driver.controller.nodes.forEach(node => { // if (node.isListening || node.isFrequentListening) // interviewNodes.push(node); // }); //* Interview: ONLY none-listening (battery powered) nodes // driver.controller.nodes.forEach(node => { // if (!(node.isListening || node.isFrequentListening)) // interviewNodes.push(node); // }); // Sleeping nodes will be added to this «queue». const sleepingNodes = []; for (const node of interviewNodes) { const nn = ${node.name}» (id: ${node.id})` if (node.isControllerNode) { this.logger.warn(`Node ${nn} is the controller, skipping`); } else { if (node.isListening || node.isFrequentListening) { try { await new Promise((resolve, reject) => { this.logger.info(`Interviewing ${nn}.`); const to = setTimeout(() => { reject(new Error( `Interview of ${nn} took too long, timeout reached.` )); }, timeout * 60 * 1000); node.refreshInfo({ resetSecurityClasses: resetSecurityClasses }); node.once("ready", () => { clearTimeout(to); resolve(); }); }); } catch (e) { this.logger.warn(e.message); if (node.isFrequentListening) { this.logger.info(`Adding ${nn} to sleeping queue.`); sleepingNodes.unshift(node); } } } else { this.logger.info(`Node ${nn}) is not listening, queing it.`); sleepingNodes.push(node); } } } for (const node of sleepingNodes) { this.logger.info(`Interviewing ${nn} in parallel.`); node.refreshInfo({ resetSecurityClasses: resetSecurityClasses }); }