mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
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:
parent
2e92b9a120
commit
d9ed5b46c4
@ -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);
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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];
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user