Dia antes primera install
This commit is contained in:
100
node_modules/node-red-contrib-sm-16inpind/16inpind.js
generated
vendored
Normal file
100
node_modules/node-red-contrib-sm-16inpind/16inpind.js
generated
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
module.exports = function(RED) {
|
||||
"use strict";
|
||||
var I2C = require("i2c-bus");
|
||||
const DEFAULT_HW_ADD = 0x20;
|
||||
const IN_REG = 0x00;
|
||||
const mask = new ArrayBuffer(16);
|
||||
mask[0] = 0x8000;
|
||||
mask[1] = 0x4000;
|
||||
mask[2] = 0x2000;
|
||||
mask[3] = 0x1000;
|
||||
mask[4] = 0x0800;
|
||||
mask[5] = 0x0400;
|
||||
mask[6] = 0x0200;
|
||||
mask[7] = 0x0100;
|
||||
mask[8] = 0x80;
|
||||
mask[9] = 0x40;
|
||||
mask[10] = 0x20;
|
||||
mask[11] = 0x10;
|
||||
mask[12] = 0x08;
|
||||
mask[13] = 0x04;
|
||||
mask[14] = 0x02;
|
||||
mask[15] = 0x01;
|
||||
|
||||
// The Opto input read Node
|
||||
function OptoInputNode(n) {
|
||||
RED.nodes.createNode(this, n);
|
||||
this.stack = parseInt(n.stack);
|
||||
this.channel = parseInt(n.channel);
|
||||
this.payload = n.payload;
|
||||
this.payloadType = n.payloadType;
|
||||
var node = this;
|
||||
|
||||
node.port = I2C.openSync( 1 );
|
||||
node.on("input", function(msg) {
|
||||
var myPayload;
|
||||
var stack = node.stack;
|
||||
if (isNaN(stack)) stack = msg.stack;
|
||||
stack = parseInt(stack);
|
||||
var channel = node.channel;
|
||||
if (isNaN(channel)) channel = msg.channel;
|
||||
channel = parseInt(channel);
|
||||
|
||||
if (isNaN(stack + 1)) {
|
||||
this.status({fill:"red",shape:"ring",text:"Stack level ("+stack+") value is missing or incorrect"});
|
||||
return;
|
||||
} else if (isNaN(channel) ) {
|
||||
this.status({fill:"red",shape:"ring",text:"Relay number ("+channel+") value is missing or incorrect"});
|
||||
return;
|
||||
} else {
|
||||
this.status({});
|
||||
}
|
||||
var hwAdd = DEFAULT_HW_ADD;
|
||||
if(stack < 0){
|
||||
stack = 0;
|
||||
}
|
||||
if(stack > 7){
|
||||
stack = 7;
|
||||
}
|
||||
//check the type of io_expander
|
||||
hwAdd += stack ^ 0x07;
|
||||
var rawData = 0x0000;
|
||||
try{
|
||||
rawData = node.port.readWordSync(hwAdd, IN_REG );
|
||||
|
||||
if(channel < 0){
|
||||
channel = 0;
|
||||
}
|
||||
if(channel > 16){
|
||||
channel = 16;
|
||||
}
|
||||
if( channel > 0){
|
||||
channel-= 1;//zero based
|
||||
rawData = ~rawData;
|
||||
if( (rawData & mask[channel]) != 0){
|
||||
msg.payload = 1;
|
||||
}else{
|
||||
msg.payload = 0;
|
||||
}
|
||||
}else{
|
||||
var optoData = 0x0000;
|
||||
var idx = 0;
|
||||
rawData = ~rawData;
|
||||
for(idx = 0; idx < 16; idx++){
|
||||
if( (rawData & mask[idx]) != 0){
|
||||
optoData += 1 << idx;
|
||||
}
|
||||
}
|
||||
msg.payload = optoData;
|
||||
}
|
||||
node.send(msg);
|
||||
}catch(err) {
|
||||
this.error(err,msg);
|
||||
}
|
||||
});
|
||||
node.on("close", function() {
|
||||
node.port.closeSync();
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("16inpind", OptoInputNode);
|
||||
}
|
||||
Reference in New Issue
Block a user