node-red-contrib-dellmonitor
Version:
RS232 over network control of a Dell CS5517H LCD Monitor
103 lines (97 loc) • 4.57 kB
JavaScript
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);
}