@edgepi-cloud/node-red-edgepi-led
Version:
Node for EdgePi Led Array
59 lines (54 loc) • 1.7 kB
JavaScript
module.exports = function (RED) {
const rpc = require("@edgepi-cloud/edgepi-rpc");
function LEDNode(config) {
RED.nodes.createNode(this, config);
const node = this;
let { ledState, ledPin } = config;
initializeNode(config).then((led) => {
node.on("input", async function (msg, send, done) {
node.status({ fill: "green", shape: "dot", text: "input received" });
try {
if (msg.pin) {
ledPin = msg.pin;
}
if (typeof msg.payload === "boolean") {
ledState = msg.payload;
}
const stateStr = ledState === true ? "turnOn" : "turnOff";
msg = { payload: await led[stateStr](ledPin - 1) };
} catch (error) {
console.error(error);
msg = { payload: error };
}
send(msg);
done?.();
});
});
async function initializeNode(config) {
const transport =
config.transport === "Network"
? `tcp://${config.tcpAddress}:${config.tcpPort}`
: "ipc:///tmp/edgepi.pipe";
try {
const led = new rpc.LEDService(transport);
console.info("LED node initialized on:", transport);
node.status({
fill: "green",
shape: "ring",
text: "led initialized",
});
const stateStr = ledState === true ? "turnOn" : "turnOff";
console.info(await led[stateStr](ledPin - 1));
return led;
} catch (error) {
console.error(error);
node.status({
fill: "red",
shape: "ring",
text: "Initialization error",
});
}
}
}
RED.nodes.registerType("led", LEDNode);
};