UNPKG

node-red-contrib-dellmonitor

Version:
103 lines (97 loc) 4.57 kB
var commands = require("./commands.js"); module.exports = function(RED) { //Main Function function DellCS5517H(config) { RED.nodes.createNode(this, config); var network = RED.nodes.getNode(config.network); var node = this; network.link(node); node.on("close", function() { network.server.close(); }); node.on("input", function(msg) { if(msg.payload === undefined || msg.payload === null) { RED.log.error("No msg.payload"); node.status({fill:"red",shape:"dot",text:"Syntax Error"}); return; } if(msg.payload.direction === undefined || msg.payload.direction === null) { RED.log.error("msg.payload.direction Not Stated"); node.status({fill:"red",shape:"dot",text:"Syntax Error"}); return; } if(msg.payload.command === undefined || msg.payload.command === null) { RED.log.error("msg.payload.command Not Stated"); node.status({fill:"red",shape:"dot",text:"Syntax Error"}); return; } var command = undefined; var direction = msg.payload.direction.toString().toLowerCase(); if(direction !== "set" && direction !== "get"){direction = undefined;} for(var key in commands.command) { if(key.toString().toLowerCase() == msg.payload.command.toString().toLowerCase()) { command = msg.payload.command.toString().toLowerCase(); } } if(direction === undefined || direction === null) { RED.log.error("msg.payload.direction Syntax Error"); node.status({fill:"red",shape:"dot",text:"Syntax Error"}); return; } else if(command === undefined || command === null) { RED.log.error("msg.payload.command Syntax Error"); node.status({fill:"red",shape:"dot",text:"Syntax Error"}); return; } var sendOut = function(powerState) { if(powerState == false) { if(command.toString().toLowerCase() == "powerstate" && msg.payload.data == "on") { var buffer = commands.generateBuffer("set", command, msg.payload.data); network.server.send(buffer, function(state){ if(state == false) { RED.log.error("Failed To Send Command, Check The RS232 Connection"); node.status({fill:"red",shape:"dot",text:"Failed To Send"}); } }, function(message){ return true; }); } else { RED.log.error("Cannot Send While Monitor Is Turned Off"); node.status({fill:"red",shape:"dot",text:"Failed To Send"}); } } else { var buffer = commands.generateBuffer("set", command, msg.payload.data); network.server.send(buffer, function(state){ if(state == false) { RED.log.error("Failed To Send Command"); node.status({fill:"red",shape:"dot",text:"Failed To Send"}); } }, function(message){ return true; }); } } //Check if the monitor is off, if so only allow a on command var buffer = commands.generateBuffer("get", "powerstate"); network.server.send(buffer, function(state){}, function(message) { if(commands.isReceivedValid(message)){ if(commands.getCommand(message) == "powerState") { if(commands.getData(message) == "off") { sendOut(false); return true; } else { sendOut(true); return true; } } } }); }); } RED.nodes.registerType("dell-CS5517H", DellCS5517H); }