UNPKG

node-red-contrib-broadlink-devices

Version:

Broadlink Node-RED control module

104 lines 4.35 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const Bluebird = require("bluebird"); const broadlink_1 = require("broadlink"); module.exports = (RED) => { const client = new broadlink_1.Broadlink(); const devices = {}; client.on('deviceReady', (dev) => { if (!devices[dev.mac]) { devices[dev.mac] = dev; } }); client.discover(); // Poll for new clients every 5 seconds setInterval(() => { client.discover(); }, 5000); function configNode(n) { RED.nodes.createNode(this, n); this.name = n.name; this.mac = n.mac; this.s1name = n.s1name; this.s2name = n.s2name; this.s3name = n.s3name; this.s4name = n.s4name; } function deviceNode(n) { RED.nodes.createNode(this, n); const node = this; const conf = RED.nodes.getNode(n.device); // console.dir(conf); this.on('input', (msg) => __awaiter(this, void 0, void 0, function* () { const dev = devices[conf.mac]; if (!dev) { msg.status = 404; msg.payload = { error: `Device requested: ${conf.mac} not found or not available.` }; node.send(msg); } let result; switch (msg.payload.action) { case 'getState': { dev.requestState(); let stateCallback; let errorCallback; result = yield new Bluebird((resolve, reject) => { stateCallback = (state) => resolve(state); errorCallback = (err) => reject(err); dev.once('state', stateCallback) .once('error', errorCallback); }); dev.removeListener('state', stateCallback); dev.removeListener('error', errorCallback); break; } case 'setState': { let stateCount = Object.keys(msg.payload.state).length; Object.keys(msg.payload.state).map((key) => { dev.setState({ socketId: key, status: msg.payload.state[key] }); }); let stateCallback; let errorCallback; result = yield new Bluebird((resolve, reject) => { stateCallback = (state) => { stateCount--; if (stateCount === 0) { resolve(state); } }; errorCallback = ((err) => reject(err)); dev.on('state', stateCallback) .once('error', errorCallback); }).then((state) => { dev.removeListener('state', stateCallback); dev.removeListener('error', errorCallback); return state; }); msg.statusCode = 201; break; } default: { result = { error: 'Device not found' }; } } result.name = conf.name; result.mapping = { s1: conf.s1name, s2: conf.s2name, s3: conf.s3name, s4: conf.s4name, }; msg.payload = result; node.send(msg); })); } RED.nodes.registerType('MP1', deviceNode); RED.nodes.registerType('broadlink-mp1-config', configNode); }; //# sourceMappingURL=mp1.js.map