UNPKG

node-red-contrib-broadlink-devices

Version:

Broadlink Node-RED control module

93 lines 3.92 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; } 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]; let result; if (!dev) { msg.status = 404; msg.payload = { error: `Device requested: ${conf.mac} not found or not available.` }; node.send(msg); } 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 'enterLearning': { dev.enterLearning(); result = { status: 'OK', message: 'Learning mode on' }; break; } case 'checkData': { dev.checkData(); 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 'sendData': { dev.sendData(msg.payload.data); result = { status: 'OK', message: 'Command sent' }; break; } default: { result = { error: 'Device not found' }; } } result.name = conf.name; msg.payload = result; node.send(msg); })); } RED.nodes.registerType('RM', deviceNode); RED.nodes.registerType('broadlink-rm-config', configNode); }; //# sourceMappingURL=rm.js.map