ttb-zwave3
Version:
ZWave support for the Thingbox (http://TheThingbox.io) and TimeSquAir (http://TimeSquAir.io)
94 lines (76 loc) • 2.32 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 + '/' + config.commandclass + '/' + config.classindex;
// console.log("Node " + config.nodeid + " subscribed to '" + this.topic + "'");
this.mqtt = mqttCP.get(
this.brokerConn.broker,
this.brokerConn.port
);
subscription(RED, this);
}
RED.nodes.registerType("aeotecMultiSensor", main);
RED.httpAdmin.get("/zwave/nodesArray", function (req, res) {
var nodes = require('./js/handler').nodes;
if (!nodes) {
return res.status(400).json({err: "ERROR"});
}
res.status(200).json(nodes);
});
};
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;
}
//console.log("Node " + node.config.nodeid + " received value: '" + msg.payload + "'");
if(msg.payload === true) {
msg.payload = 1;
msg.intent = 1;
msg.message = "A motion was detected";
}
if(msg.payload === false) {
msg.payload = 0;
msg.intent = 0;
msg.message = "No more motion";
}
/*
if (node.mqtt !== null) node.mqtt.publish({
'payload': msg,
'qos': 0,
'retain': true,
'topic': "zwave" + '/' + node.config.nodeid + '/out'
});
*/
node.send(msg);
}, 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);
}
});
}
;