node-lox-mqtt-gateway
Version:
Gateway for Loxone™ miniserver to communicate with mqtt broker
70 lines (55 loc) • 2.06 kB
JavaScript
const lox_mqtt_gateway = require('../lib/index.js');
if (!process.env.NODE_CONFIG_DIR){
process.env.NODE_CONFIG_DIR = __dirname+"/../config/";
}
var config = require("config");
var logger = lox_mqtt_gateway.Logger(config.get('winston'));
var app = new lox_mqtt_gateway.App(logger);
var mqtt_client = lox_mqtt_gateway.mqtt_builder(config.get('mqtt'), app);
var lox_client = lox_mqtt_gateway.WebSocketAPI(config.get('miniserver'), app);
var lox_mqtt_adaptor = undefined;
app.on('exit', function(code) {
if (lox_mqtt_adaptor){
lox_mqtt_adaptor.abort();
}
});
function _update_event(uuid, value){
if (lox_mqtt_adaptor){
lox_mqtt_adaptor.set_value_for_uuid(uuid, value);
}
};
lox_client.on('update_event_text', _update_event);
lox_client.on('update_event_value', _update_event);
lox_client.on('get_structure_file', function(data) {
if (lox_mqtt_adaptor){
lox_mqtt_adaptor.abort();
}
lox_mqtt_adaptor = new lox_mqtt_gateway.Adaptor(lox_mqtt_gateway.Structure.create_from_json(data,
function(value) {
logger.warn("MQTT Structure - invalid type of control", value);
}
));
mqtt_client.subscribe(lox_mqtt_adaptor.get_topic_for_subscription());
lox_mqtt_adaptor.on('for_mqtt', function(topic, data){
logger.debug("MQTT Adaptor - for mqtt: ", {topic: topic, data: data});
mqtt_client.publish(topic, data);
});
});
mqtt_client.on('connect', function(conack){
if (!lox_client.is_connected()){
lox_client.connect();
}
});
mqtt_client.on('message', function(topic, message, packet) {
if (!lox_mqtt_adaptor){
return;
}
var action = lox_mqtt_adaptor.get_command_from_topic(topic, message.toString());
app.logger.debug("MQTT Adaptor - for miniserver: ", {uuidAction: action.uuidAction, command: action.command});
if (!config.miniserver.readonly){
lox_client.send_cmd(action.uuidAction, action.command);
}else{
app.logger.debug("MQTT Adaptor - readonly mode");
}
});