UNPKG

node-lox-mqtt-gateway

Version:

Gateway for Loxone™ miniserver to communicate with mqtt broker

122 lines (100 loc) 3.87 kB
const node_lox_ws_api = require("node-lox-ws-api"); function _limit_string(text, limit){ if (text.length <= limit){ return text; } return text.substr(0, limit) + '...('+text.length+')'; } var WebSocketAPI = function(config, app) { var ws_auth = config.encrypted ? 'AES-256-CBC' : 'Hash'; var client = new node_lox_ws_api(config.host, config.username, config.password, true, ws_auth); var text_logger_limit = 100; app.on('exit', function (code) { client.abort(); }); client.on('connect', function() { app.logger.info("WebSocketAPI - connect"); }); client.on('authorized', function() { app.logger.info("WebSocketAPI - authorized"); }); client.on('connect_failed', function() { app.logger.error("WebSocketAPI - connect failed"); }); client.on('connection_error', function(error) { app.logger.error("WebSocketAPI - connection error: "+error); app.exit(1); }); client.on('close', function() { app.logger.info("WebSocketAPI - close"); }); client.on('send', function(message) { app.logger.debug("WebSocketAPI - send message: "+message); }); client.on('message_text', function(message) { var data = { type: message.type, }; switch(message.type){ case 'json': data.json = _limit_string(JSON.stringify(message.json), text_logger_limit); break; case 'control': data.control = message.control; data.value = message.value; data.code = message.code; break; default: data.text = _limit_string(message.data, text_logger_limit); } app.logger.debug("WebSocketAPI - received text message: ", data); }); client.on('message_file', function(message) { var data = { type: message.type, filename: message.filename, }; switch(message.type){ case 'json': data.json = _limit_string(JSON.stringify(message.data), text_logger_limit); break; case 'binary': data.length = message.data,length; break; default: data.text = _limit_string(message.data, text_logger_limit); } app.logger.debug("WebSocketAPI - received file: ", data); }); function _update_event(uuid, evt) { var data = { uuid: uuid, 'event': _limit_string(JSON.stringify(evt), text_logger_limit), }; app.logger.debug("WebSocketAPI - received update event: ", data); } client.on('update_event_value', _update_event); client.on('update_event_text', _update_event); client.on('update_event_daytimer', _update_event); client.on('update_event_weather', _update_event); client.on('message_invalid', function(message) { app.logger.warn("WebSocketAPI - invalid message: "+JSON.stringify(message)); }); client.on('keepalive', function(time) { app.logger.debug('WebSocketAPI - keepalive ('+time+'ms)'); }); client.on('message_header', function(header) { app.logger.debug('WebSocketAPI - received message header ('+header.next_state()+'):', header); }); client.on('message_event_table_values', function(messages) { app.logger.debug('WebSocketAPI - received value messages:', messages.length); }); client.on('message_event_table_text', function(messages) { app.logger.debug('WebSocketAPI - received text messages:', messages.length); }); client.on('get_structure_file', function(data) { app.logger.debug("WebSocketAPI - get structure file "+data.lastModified); }); return client; }; module.exports = WebSocketAPI;