node-red-contrib-trigger-empty
Version:
Sends On on input of an On trigger, and when for all On triggers an Off was received off, Send Off
32 lines (31 loc) • 1.4 kB
JavaScript
module.exports = function(RED) {
function TriggerOnEmptyNode(config) {
RED.nodes.createNode(this,config);
this.topic = config.topic;
this.on_payload = config.on_payload;
this.off_payload = config.off_payload;
var node = this;
var triggers = {};
node.on('input', function(msg) {
if (typeof msg.topic != "undefined" && typeof msg.payload != "undefined") {
if(msg.payload.toUpperCase() == this.on_payload.toUpperCase()) {
triggers[msg.topic] = this.on_payload;
msg.payload = this.on_payload;
msg.topic = node.topic;
this.status({fill:"green",shape:"dot",text:this.on_payload+" send:"+triggers.keys().length});
node.send(msg);
} else
if(msg.payload.toUpperCase() == this.off_payload.toUpperCase()) {
delete triggers[msg.topic];
if (Object.keys(triggers).length == 0) {
msg.payload = this.off_payload;
msg.topic = node.topic
this.status({fill:"green",shape:"ring",text:this.off_payload+" send:"+triggers.keys().length});
node.send(msg);
}
}
}
});
}
RED.nodes.registerType("trigger-empty",TriggerOnEmptyNode);
}