ttb-zwave3
Version:
ZWave support for the Thingbox (http://TheThingbox.io) and TimeSquAir (http://TimeSquAir.io)
150 lines (128 loc) • 3.04 kB
JavaScript
module.exports = function (RED) {
var homeDir = process.env.NODE_RED_HOME;
var path = require('path'),
mqttCP = require(path.resolve(homeDir, './nodes/core/io/lib/mqttConnectionPool.js'));
function main(config) {
RED.nodes.createNode(this, config);
this.config = config;
this.brokerConn = RED.nodes.getNode(config.broker);
if (this.brokerConn === undefined || this.brokerConn === null) {
this.error(RED._("node-red:mqtt.errors.missing-config"));
return;
}
this.topic = "zwave" + '/' + config.nodeid + '/scene';
this.mqtt = mqttCP.get(
this.brokerConn.broker,
this.brokerConn.port
);
subscription(RED, this);
}
RED.nodes.registerType("zwave-remote-control-multi-purpose", main);
};
function subscription(RED, node) {
var isUtf8 = require('is-utf8');
var msg = {};
if (node.topic) {
node.brokerConn.register(node);
node.brokerConn.subscribe(node.topic, 2, function (topic, payload, packet) {
if (isUtf8(payload)) {
payload = payload.toString();
}
try {
msg.payload = JSON.parse(payload);
} catch (e) {
msg.payload = payload;
}
softRemote(node, msg.payload);
}, node.id);
}
else {
node.error(RED._("node-red:mqtt.errors.not-defined"));
}
node.on('close', function (done) {
if (node.brokerConn) {
node.brokerConn.unsubscribe(node.topic, node.id);
node.brokerConn.deregister(node, done);
}
});
}
var timer = undefined,
count = 0;
function softRemote(node, sceneID) {
/*
var msgMQTT = {
qos: 0,
retain: true,
topic: "zwave" + '/' + node.config.nodeid + '/out'
};
*/
var msg = {
payload: sceneID
};
switch (sceneID) {
case 10:
msg.intent = 1; // close
break;
case 20:
msg.intent = 2; // more
break;
case 30:
msg.intent = 0; // open
break;
case 40:
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 (node.mqtt != null) node.mqtt.publish(msgMQTT);
node.send(msg);
softRemote(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 (node.mqtt != null) node.mqtt.publish(msgMQTT);
node.send(msg);
softRemote(node, sceneID);
}, 1000);
*/
}
break;
default:
break;
}
/*
msgMQTT.payload = {
'payload': msg.payload,
'intent': msg.intent
};
if (node.mqtt != null) node.mqtt.publish(msgMQTT);
*/
node.send(msg);
}
;