From 91217d6e62c40c069dff4a7f6bf73c90be29b560 Mon Sep 17 00:00:00 2001 From: Dave Conway-Jones Date: Tue, 1 Dec 2020 23:43:48 +0000 Subject: [PATCH] allow mcp node to be visible when not in Pi mark as inactive status to close #718 --- hardware/mcp3008/package.json | 4 +- hardware/mcp3008/pimcp3008.js | 92 ++++++++++++++++++++--------------- 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/hardware/mcp3008/package.json b/hardware/mcp3008/package.json index 218ce52d..8b221b0d 100644 --- a/hardware/mcp3008/package.json +++ b/hardware/mcp3008/package.json @@ -1,9 +1,9 @@ { "name" : "node-red-node-pi-mcp3008", - "version" : "0.2.1", + "version" : "0.3.0", "description" : "A Node-RED node to read from the MCP3008 Analogue to Digital Converter", "dependencies" : { - "mcp-spi-adc": "^2.0.6" + "mcp-spi-adc": "^3.1.0" }, "repository" : { "type":"git", diff --git a/hardware/mcp3008/pimcp3008.js b/hardware/mcp3008/pimcp3008.js index e765836f..61c74485 100644 --- a/hardware/mcp3008/pimcp3008.js +++ b/hardware/mcp3008/pimcp3008.js @@ -2,16 +2,23 @@ module.exports = function(RED) { "use strict"; var fs = require('fs'); + var allOK = false; + var mcpadc; // unlikely if not on a Pi try { var cpuinfo = fs.readFileSync("/proc/cpuinfo").toString(); - if (cpuinfo.indexOf(": BCM") === -1) { throw "Info : "+RED._("rpi-gpio.errors.ignorenode"); } + if (cpuinfo.indexOf(": BCM") === -1) { + RED.log.warn("Info : mcp3xxx : Not running on a Pi - Ignoring node"); + } + else { + mcpadc = require('mcp-spi-adc'); + allOK = true; + } } catch(err) { - throw "Info : "+RED._("rpi-gpio.errors.ignorenode"); + RED.log.warn("Info : mcp3xxx : Not running on a Pi - Ignoring node"); } - var mcpadc = require('mcp-spi-adc'); var mcp3xxx = []; function PiMcpNode(n) { @@ -26,49 +33,54 @@ module.exports = function(RED) { var opt = { speedHz:20000, deviceNumber:node.dnum, busNumber:node.bus }; var chans = parseInt(this.dev.substr(3)); - try { - fs.statSync("/dev/spidev"+node.bus+"."+node.dnum); - if (mcp3xxx.length === 0) { - for (var i=0; i= 0) && (pay < chans)) { pin = pay; } + else { node.warn("Payload needs to select channel 0 to "+(chans-1)); } + } + else { pin = parseInt(node.pin); } + if (pin !== null) { + mcp3xxx[pin].read(function (err, reading) { + if (err) { node.warn("Read error: "+err); } + else { node.send({payload:reading.rawValue, topic:"adc/"+pin}); } + }); + } + }); } - node.on("input", function(msg) { - var pin = null; - if (node.pin === "M") { - var pay = parseInt(msg.payload.toString()); - if ((pay >= 0) && (pay < chans)) { pin = pay; } - else { node.warn("Payload needs to select channel 0 to "+(chans-1)); } - } - else { pin = parseInt(node.pin); } - if (pin !== null) { - mcp3xxx[pin].read(function (err, reading) { - if (err) { node.warn("Read error: "+err); } - else { node.send({payload:reading.rawValue, topic:"adc/"+pin}); } - }); + catch(err) { + node.error("Error : Can't find SPI device - is SPI enabled in raspi-config ?"); + } + + node.on("close", function(done) { + if (mcp3xxx.length !== 0) { + var j=0; + for (var i=0; i