ttb-zwave3
Version:
ZWave support for the Thingbox (http://TheThingbox.io) and TimeSquAir (http://TimeSquAir.io)
147 lines (113 loc) • 2.97 kB
JavaScript
module.exports = function (RED) {
function main(config) {
RED.nodes.createNode(this, config);
this.config = config;
//this.status({fill:"red",shape:"ring",text:""+Date.now() });
//console.log("setStatus");
subscription(RED, this);
}
RED.nodes.registerType("nodonSoftRemote", main);
};
function subscription(RED, node) {
node.brokerConn = RED.nodes.getNode(node.config.broker);
if (node.brokerConn === undefined || node.brokerConn === null) {
node.error(RED._("node-red:mqtt.errors.missing-config"));
return;
}
var topicpub = "zwave" + '/' + node.config.nodeid + '/scene';
node.brokerConn.register(node);
node.brokerConn.subscribe(topicpub, 2, function (topic, payload, packet) {
//console.log("payload[0]:", payload[0]);
//console.log("payload[1]:", payload[1]);
var msg = {payload:payload}; // let the device outpout unchanged
switch (payload[0]) {
case 49:
msg.intent = 1; // open
break;
case 51:
msg.intent = 0; // close
break;
case 50:
msg.intent = 2; // more
break;
case 52:
msg.intent = 3; // less
break;
/*
case "21":
case "41":
clearTimeout(timer);
count = 0;
break;
case "22":
if (node.config.push === true) {
count++;
if (count >= 20) break;
msg.intent = 2; // more
msgMQTT.payload = {
'payload': msg.payload,
'intent': msg.intent
};
timer = setTimeout(function () {
if (mqtt != null)
mqtt.publish(msgMQTT);
publishStatusOut(node, sceneID);
}, 1000);
}
break;
case "42":
if (node.config.push === true) {
count++;
if (count >= 20) break;
msg.intent = 3; // less
msgMQTT.payload = {
'payload': msg.payload,
'intent': msg.intent
};
timer = setTimeout(function () {
if (mqtt != null) mqtt.publish(msgMQTT);
publishStatusOut(node, sceneID);
}, 1000);
}
break;
*/
default:
node.warn("no intent");
break;
}
//publishStatusOut(node, msg.payload /* sceneID ??? */);
node.send(msg);
}
, node.id);
node.on('close', function (done) {
if (node.brokerConn) {
node.brokerConn.unsubscribe(topicpub, node.id);
node.brokerConn.deregister(node, done);
}
});
}
var timer = undefined,
count = 0;
function publishStatusOut(node, sceneID) {
var msgMQTT = {
qos: 0,
retain: true,
topic: "zwave" + '/' + node.config.nodeid + '/out'
};
var msg = {
payload: sceneID
};
var path = require('path'),
mqttCP = require(path.resolve(process.env.NODE_RED_HOME, './nodes/core/io/lib/mqttConnectionPool.js')),
mqtt = mqttCP.get(
node.brokerConn.broker,
node.brokerConn.port
);
msgMQTT.payload = {
'payload': msg.payload,
'intent': msg.intent
};
if (mqtt != null)
mqtt.publish(msgMQTT);
}
;