node-red-contrib-opi-gpio
Version:
Orange Pi GPIO. Digital input/output for most Pi computers
49 lines (43 loc) • 1.38 kB
JavaScript
var Gpio = require('onoff').Gpio;
module.exports = function(RED) {
"use strict";
function opiOutNode(config) {
RED.nodes.createNode(this,config);
var node = this;
node.name = config.name;
node.pin = config.pin;
node.log("Pin: "+node.pin);
node.set = config.set;
node.level = config.level;
node.enableLow = config.enableLow;
var outpin;
var options ={
activeLow: config.enableLow || false
}
// init:
if(node.pin !== ''){
node.log("OUT activeLOW:"+node.enableLow);
if(node.enableLow === true ) options.activeLow = true;
outpin = new Gpio(node.pin, 'out', '', options);
outpin.unwatch();
}
if (node.set === true){
outpin.write(Number(node.level), function(err) {
if (err) node.log("gpio.output.error");
});
node.status({fill:"green",shape:"dot",text:node.level.toString()});
}
this.on('input', function(msg){
outpin.write(Number(msg.payload), function(err) {
if (err) node.log("gpio.output.error");
});
node.status({fill:"green",shape:"dot",text:msg.payload.toString()});
if (RED.settings.verbose) { node.log("out: "+msg.payload); }
});
this.on('close', function(){
outpin.unexport();
node.log("close ");
})
}
RED.nodes.registerType("opi_out",opiOutNode);
}