Various little tweaks - less console.log more util.log, add exra try/catch to serial, add wiring-pi url to Pi "error message".

This commit is contained in:
Dave C-J 2013-11-03 19:09:45 +00:00
parent 2e92b9a120
commit d9ed5b46c4
4 changed files with 156 additions and 156 deletions

View File

@ -31,19 +31,19 @@ function Xml2jsNode(n) {
var node = this; var node = this;
this.on("input", function(msg) { this.on("input", function(msg) {
try { try {
parseString(msg.payload, function (err, result) { parseString(msg.payload, function (err, result) {
if (err) { node.error(err); } if (err) { node.error(err); }
else { else {
msg.payload = result; msg.payload = result;
node.send(msg); node.send(msg);
if (node.useEyes == true) { if (node.useEyes == true) {
if (gotEyes == true) { eyes.inspect(msg); } if (gotEyes == true) { eyes.inspect(msg); }
else { node.log(JSON.stringify(msg)); } else { node.log(JSON.stringify(msg)); }
} }
} }
}); });
} }
catch(e) { console.log(e); } catch(e) { util.log("[73-parsexml.js] "+e); }
}); });
} }
RED.nodes.registerType("xml2js",Xml2jsNode); RED.nodes.registerType("xml2js",Xml2jsNode);

View File

@ -20,124 +20,124 @@ var exec = require('child_process').exec;
var fs = require('fs'); var fs = require('fs');
if (!fs.existsSync("/usr/local/bin/gpio")) { if (!fs.existsSync("/usr/local/bin/gpio")) {
exec("cat /proc/cpuinfo | grep BCM27",function(err,stdout,stderr) { exec("cat /proc/cpuinfo | grep BCM27",function(err,stdout,stderr) {
if (stdout.indexOf('BCM27') > -1) { if (stdout.indexOf('BCM27') > -1) {
util.log('[36-rpi-gpio.js] Error: Cannot find Wiring-Pi "gpio" command'); util.log('[36-rpi-gpio.js] Error: Cannot find Wiring-Pi "gpio" command. http://wiringpi.com/download-and-install/');
} }
// else not on a Pi so don't worry anyone with needless messages. // else not on a Pi so don't worry anyone with needless messages.
}); });
return; return;
} }
// Map physical P1 pins to Gordon's Wiring-Pi Pins (as they should be V1/V2 tolerant) // Map physical P1 pins to Gordon's Wiring-Pi Pins (as they should be V1/V2 tolerant)
var pintable = { var pintable = {
// Physical : WiringPi // Physical : WiringPi
"7":"7", "7":"7",
"11":"0", "11":"0",
"12":"1", "12":"1",
"13":"2", "13":"2",
"15":"3", "15":"3",
"16":"4", "16":"4",
"18":"5", "18":"5",
"22":"6" "22":"6"
} }
var tablepin = { var tablepin = {
// WiringPi : Physical // WiringPi : Physical
"7":"7", "7":"7",
"0":"11", "0":"11",
"1":"12", "1":"12",
"2":"13", "2":"13",
"3":"15", "3":"15",
"4":"16", "4":"16",
"5":"18", "5":"18",
"6":"22" "6":"22"
} }
function GPIOInNode(n) { function GPIOInNode(n) {
RED.nodes.createNode(this,n); RED.nodes.createNode(this,n);
this.buttonState = -1; this.buttonState = -1;
this.pin = pintable[n.pin]; this.pin = pintable[n.pin];
this.intype = n.intype; this.intype = n.intype;
var node = this; var node = this;
if (this.pin) { if (this.pin) {
exec("gpio mode "+node.pin+" "+node.intype, function(err,stdout,stderr) { exec("gpio mode "+node.pin+" "+node.intype, function(err,stdout,stderr) {
if (err) node.error(err); if (err) node.error(err);
else { else {
node._interval = setInterval( function() { node._interval = setInterval( function() {
exec("gpio read "+node.pin, function(err,stdout,stderr) { exec("gpio read "+node.pin, function(err,stdout,stderr) {
if (err) node.error(err); if (err) node.error(err);
else { else {
if (node.buttonState !== Number(stdout)) { if (node.buttonState !== Number(stdout)) {
var previousState = node.buttonState; var previousState = node.buttonState;
node.buttonState = Number(stdout); node.buttonState = Number(stdout);
if (previousState !== -1) { if (previousState !== -1) {
var msg = {topic:"pi/"+tablepin[node.pin], payload:node.buttonState}; var msg = {topic:"pi/"+tablepin[node.pin], payload:node.buttonState};
node.send(msg); node.send(msg);
} }
} }
} }
}); });
}, 250); }, 250);
} }
}); });
} }
else { else {
this.error("Invalid GPIO pin: "+this.pin); this.error("Invalid GPIO pin: "+this.pin);
} }
} }
function GPIOOutNode(n) { function GPIOOutNode(n) {
RED.nodes.createNode(this,n); RED.nodes.createNode(this,n);
this.pin = pintable[n.pin]; this.pin = pintable[n.pin];
var node = this; var node = this;
if (this.pin) { if (this.pin) {
process.nextTick(function() { process.nextTick(function() {
exec("gpio mode "+node.pin+" out", function(err,stdout,stderr) { exec("gpio mode "+node.pin+" out", function(err,stdout,stderr) {
if (err) node.error(err); if (err) node.error(err);
else { else {
node.on("input", function(msg) { node.on("input", function(msg) {
if (msg.payload === "true") msg.payload = true; if (msg.payload === "true") msg.payload = true;
if (msg.payload === "false") msg.payload = false; if (msg.payload === "false") msg.payload = false;
var out = Number(msg.payload); var out = Number(msg.payload);
if ((out == 0)|(out == 1)) { if ((out == 0)|(out == 1)) {
exec("gpio write "+node.pin+" "+out, function(err,stdout,stderr) { exec("gpio write "+node.pin+" "+out, function(err,stdout,stderr) {
if (err) node.error(err); if (err) node.error(err);
}); });
} }
else node.warn("Invalid input - not 0 or 1"); else node.warn("Invalid input - not 0 or 1");
}); });
} }
}); });
}); });
} }
else { else {
this.error("Invalid GPIO pin: "+this.pin); this.error("Invalid GPIO pin: "+this.pin);
} }
} }
exec("gpio mode 0 in",function(err,stdout,stderr) { exec("gpio mode 0 in",function(err,stdout,stderr) {
if (err) { if (err) {
util.log('[36-rpi-gpio.js] Error: "gpio" command failed for some reason.'); util.log('[36-rpi-gpio.js] Error: "gpio" command failed for some reason.');
} }
exec("gpio mode 1 in"); exec("gpio mode 1 in");
exec("gpio mode 2 in"); exec("gpio mode 2 in");
exec("gpio mode 3 in"); exec("gpio mode 3 in");
exec("gpio mode 4 in"); exec("gpio mode 4 in");
exec("gpio mode 5 in"); exec("gpio mode 5 in");
exec("gpio mode 6 in"); exec("gpio mode 6 in");
exec("gpio mode 7 in",function(err,stdout,stderr) { exec("gpio mode 7 in",function(err,stdout,stderr) {
RED.nodes.registerType("rpi-gpio in",GPIOInNode); RED.nodes.registerType("rpi-gpio in",GPIOInNode);
RED.nodes.registerType("rpi-gpio out",GPIOOutNode); RED.nodes.registerType("rpi-gpio out",GPIOOutNode);
GPIOInNode.prototype.close = function() { GPIOInNode.prototype.close = function() {
clearInterval(this._interval); clearInterval(this._interval);
} }
GPIOOutNode.prototype.close = function() { GPIOOutNode.prototype.close = function() {
exec("gpio mode "+this.pin+" in"); exec("gpio mode "+this.pin+" in");
} }
}); });
}); });

View File

@ -15,11 +15,10 @@
**/ **/
var RED = require("../../red/red"); var RED = require("../../red/red");
var settings = RED.settings;
var events = require("events"); var events = require("events");
var util = require("util"); var util = require("util");
var serialp = require("serialport"); var serialp = require("serialport");
var settings = RED.settings;
// TODO: 'serialPool' should be encapsulated in SerialPortNode // TODO: 'serialPool' should be encapsulated in SerialPortNode
@ -58,9 +57,9 @@ function SerialOutNode(n) {
this.error("missing serial config"); this.error("missing serial config");
} }
} }
RED.nodes.registerType("serial out",SerialOutNode); RED.nodes.registerType("serial out",SerialOutNode);
SerialOutNode.prototype.close = function() { SerialOutNode.prototype.close = function() {
if (this.serialConfig) { if (this.serialConfig) {
serialPool.close(this.serialConfig.serialport); serialPool.close(this.serialConfig.serialport);
@ -90,9 +89,9 @@ function SerialInNode(n) {
this.error("missing serial config"); this.error("missing serial config");
} }
} }
RED.nodes.registerType("serial in",SerialInNode); RED.nodes.registerType("serial in",SerialInNode);
SerialInNode.prototype.close = function() { SerialInNode.prototype.close = function() {
if (this.serialConfig) { if (this.serialConfig) {
try { try {
@ -121,48 +120,50 @@ var serialPool = function() {
} }
newline = newline.replace("\\n","\n").replace("\\r","\r"); newline = newline.replace("\\n","\n").replace("\\r","\r");
var setupSerial = function() { var setupSerial = function() {
if (newline == "") { try {
obj.serial = new serialp.SerialPort(port,{ if (newline == "") {
baudrate: baud, obj.serial = new serialp.SerialPort(port,{
parser: serialp.parsers.raw baudrate: baud,
}); parser: serialp.parsers.raw
} });
else { }
obj.serial = new serialp.SerialPort(port,{ else {
baudrate: baud, obj.serial = new serialp.SerialPort(port,{
parser: serialp.parsers.readline(newline) baudrate: baud,
}); parser: serialp.parsers.readline(newline)
} });
obj.serial.on('error', function(err) { }
util.log("[serial] serial port "+port+" error "+err); obj.serial.on('error', function(err) {
obj.tout = setTimeout(function() { util.log("[serial] serial port "+port+" error "+err);
setupSerial();
},settings.serialReconnectTime);
});
obj.serial.on('close', function() {
if (!obj._closing) {
util.log("[serial] serial port "+port+" closed unexpectedly");
obj.tout = setTimeout(function() { obj.tout = setTimeout(function() {
setupSerial(); setupSerial();
},settings.serialReconnectTime); },settings.serialReconnectTime);
});
obj.serial.on('close', function() {
if (!obj._closing) {
util.log("[serial] serial port "+port+" closed unexpectedly");
obj.tout = setTimeout(function() {
setupSerial();
},settings.serialReconnectTime);
}
});
obj.serial.on('open',function() {
util.log("[serial] serial port "+port+" opened at "+baud+" baud");
obj.serial.flush();
obj._emitter.emit('ready');
});
obj.serial.on('data',function(d) {
if (typeof d !== "string") {
d = d.toString();
for (i=0; i<d.length; i++) {
obj._emitter.emit('data',d.charAt(i));
}
} }
}); else {
obj.serial.on('open',function() { obj._emitter.emit('data',d);
util.log("[serial] serial port "+port+" opened at "+baud+" baud"); }
obj.serial.flush(); });
obj._emitter.emit('ready'); } catch(err) { console.log("Booo!",err,"Booo!"); }
});
obj.serial.on('data',function(d) {
if (typeof d !== "string") {
d = d.toString();
for (i=0; i<d.length; i++) {
obj._emitter.emit('data',d.charAt(i));
}
}
else {
obj._emitter.emit('data',d);
}
});
} }
setupSerial(); setupSerial();
return obj; return obj;
@ -178,8 +179,7 @@ var serialPool = function() {
connections[port].close(function() { connections[port].close(function() {
util.log("[serial] serial port closed"); util.log("[serial] serial port closed");
}); });
} catch(err) { } catch(err) { };
};
} }
delete connections[port]; delete connections[port];
} }

View File

@ -330,7 +330,7 @@ a.brand img {
} }
.node_highlighted { .node_highlighted {
stroke: #dd1616; stroke: #dd1616;
stroke-width: 2; stroke-width: 3;
stroke-dasharray: 10, 4; stroke-dasharray: 10, 4;
} }
.node_hovered { .node_hovered {