node-red-contrib-boolean-logic-ultimate
Version:
A set of Node-RED enhanced boolean logic and utility nodes, flow interruption, blinker, invert, filter, toggle etc.., with persistent values after reboot. Compatible also with Homeassistant values.
83 lines (75 loc) • 2.17 kB
JavaScript
module.exports = function (RED) {
function InvertUltimate(config) {
RED.nodes.createNode(this, config);
this.config = config;
var node = this;
function setNodeStatus({ fill, shape, text }) {
let dDate = new Date();
node.status({
fill: fill,
shape: shape,
text:
text +
" (" +
dDate.getDate() +
", " +
dDate.toLocaleTimeString() +
")",
});
}
setNodeStatus({ fill: "grey", shape: "dot", text: "Waiting" });
this.on("input", function (msg) {
// 11/11/2021 Clone input message and replace only relevant topics
const utils = require("./utils.js");
let sPayload = utils.fetchFromObject(
msg,
config.payloadPropName || "payload"
);
// 15/11/2021 inform user about undefined topic or payload
if (sPayload === undefined) {
setNodeStatus({
fill: "red",
shape: "dot",
text: "Received invalid payload from " + msg.topic || "",
});
return;
}
var bRes = null;
try {
bRes = utils.ToBoolean(
sPayload,
RED.nodes.getNode(config.translatorConfig) // Retrieve the config node. It can be null, but it's handled in utils.js; // 15/11/2021 Convert input to boolean.);
);
} catch (error) {}
if (bRes === undefined || bRes === null) {
setNodeStatus({
fill: "red",
shape: "dot",
text:
"Received non convertible boolean value " +
sPayload +
" from " +
msg.topic,
});
return;
}
var msgOUt = RED.util.cloneMessage(msg);
try {
msgOUt.payload = !bRes;
setNodeStatus({
fill: "green",
shape: "dot",
text: "(Send) " + msgOUt.payload,
});
node.send(msgOUt);
} catch (error) {
setNodeStatus({
fill: "red",
shape: "dot",
text: "Unable to invert the input payload " + bRes,
});
}
});
}
RED.nodes.registerType("InvertUltimate", InvertUltimate);
};