UNPKG

node-red-contrib-roadrunner-adc

Version:

Node-RED nodes to read Acmesystem's Roadrunner ADC lines via IIO.

63 lines (57 loc) 2.07 kB
module.exports = function(RED) { "use strict"; RED.log.info("rr-adc : initializing."); var fs = require('fs'); var initOK = true; try { var cpuinfo = fs.readFileSync("/proc/cpuinfo").toString(); if (cpuinfo.indexOf(": Atmel SAMA5") === -1) { initOK = false; RED.log.warn("rr-adc : RoadRunner CPU not detected"); } else { try { fs.accessSync('/sys/bus/iio/devices/iio\:device0/', fs.constants.R_OK) } catch(err) { initOK = false; RED.log.warn("rr-adc : /sys/bus/iio/devices/iio\:device0/ is not readable by user "+process.env.USER); } } } catch(err) { initOK = false; RED.log.warn("rr-adc : RoadRunner detection failed"); } function ADCNode(config) { RED.nodes.createNode(this,config); this.buttonState = -1; this.adc = config.adc; var node = this; if (!initOK) { node.status({fill:"grey",shape:"dot",text:"node inactive"}); return; } node.on('input', function (msg) { var adc = null; if (node.adc === "M") { var payload = parseInt(msg.payload.toString()); if ((payload >= 0) && (payload < 11)) { adc = payload; } else { node.warn("Payload needs to select channel 0 to 11"); } } else { adc = parseInt(node.adc); } if (adc !== null) { try { var value = fs.readFileSync("/sys/bus/iio/devices/iio\:device0/in_voltage"+adc+"_raw").toString(); node.send({payload:value, topic:"rr-adc/"+adc}); } catch(err) { node.warn("Read error: "+err); } } }); } RED.nodes.registerType("rr-adc in",ADCNode); if (initOK) { RED.log.info("rr-adc : initialization complete."); } else { RED.log.warn("rr-adc : node inactive"); } }