@edgepi-cloud/node-red-edgepi-digital-out
Version:
node-red node for edgepi digital output module utilizing remote procedure calls
70 lines (62 loc) • 1.79 kB
JavaScript
module.exports = function (RED) {
const rpc = require("@edgepi-cloud/edgepi-rpc");
function DigitalOutNode(config) {
RED.nodes.createNode(this, config);
const node = this;
let { channel, doutState } = config;
initializeNode(config).then((dout) => {
node.on("input", async function (msg, send, done) {
node.status({ fill: "green", shape: "dot", text: "input received" });
try {
if (msg.channel) {
channel = msg.channel;
}
if (msg.payload) {
doutState = msg.payload;
}
msg = {
payload: await dout.setDoutState(
channel - 1,
rpc.DoutTriState[doutState]
),
};
} catch (error) {
msg = { payload: error };
console.error(error);
}
send(msg);
done?.();
});
});
async function initializeNode(config) {
const transport =
config.transport === "Network"
? `tcp://${config.tcpAddress}:${config.tcpPort}`
: "ipc:///tmp/edgepi.pipe";
try {
const dout = new rpc.DoutService(transport);
console.info("Digital Output node initialized on:", transport);
node.status({
fill: "green",
shape: "ring",
text: "d-out initialized",
});
console.info(
await dout.setDoutState(
channel - 1,
rpc.DoutTriState[config.doutState]
)
);
return dout;
} catch (error) {
console.error(error);
node.status({
fill: "red",
shape: "ring",
text: "Initialization error.",
});
}
}
}
RED.nodes.registerType("digital-out", DigitalOutNode);
};