node-red-contrib-zigbee2mqtt
Version:
Zigbee2mqtt connectivity nodes for node-red
166 lines (151 loc) • 6.16 kB
JavaScript
var NODE_PATH = '/zigbee2mqtt/';
module.exports = function(RED) {
RED.httpAdmin.get(NODE_PATH + 'getDevices', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
controller.getDevices(function (items) {
if (items) {
res.json(items);
} else {
res.status(404).end();
}
}, true);
} else {
res.json([{},{}]);
}
});
RED.httpAdmin.get(NODE_PATH + 'restart', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
controller.restart();
res.json({"result":"ok"});
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'setPermitJoin', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
controller.setPermitJoin(config.permit_join==='true'?true:false);
res.json({"result":"ok"});
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'setLogLevel', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
controller.setLogLevel(config.log_level);
res.json({"result":"ok"});
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'getConfig', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
res.json(controller.bridge_info);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'renameDevice', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.renameDevice(config.ieee_address, config.newName);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'removeDevice', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.removeDevice(config.id, config.newName);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'renameGroup', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.renameGroup(config.id, config.newName);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'removeGroup', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.removeGroup(config.id);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'addGroup', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.addGroup(config.name);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'removeDeviceFromGroup', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.removeDeviceFromGroup(config.deviceId, config.groupId);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'addDeviceToGroup', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.addDeviceToGroup(config.deviceId, config.groupId);
res.json(response);
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'refreshMap', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
controller.refreshMap(true, config.engine).then(function(response){
res.json(response);
}).catch(error => {
res.status(404).end();
});
} else {
res.status(404).end();
}
});
RED.httpAdmin.get(NODE_PATH + 'showMap', function (req, res) {
var config = req.query;
var controller = RED.nodes.getNode(config.controllerID);
if (controller && controller.constructor.name === "ServerNode") {
var response = controller.map;
res.writeHead(200, {'Content-Type': 'image/svg+xml'});
res.end(response); // Send the file data to the browser.
} else {
res.status(404).end();
}
});
}