UNPKG

node-lox-mqtt-gateway

Version:

Gateway for Loxone™ miniserver to communicate with mqtt broker

174 lines (120 loc) 3.89 kB
# node-lox-mqtt-gateway [![Version npm](https://img.shields.io/npm/v/node-lox-mqtt-gateway.svg?style=flat-square)](https://www.npmjs.com/package/node-lox-mqtt-gateway)[![npm Downloads](https://img.shields.io/npm/dm/node-lox-mqtt-gateway.svg?style=flat-square)](https://www.npmjs.com/package/node-lox-mqtt-gateway) [![NPM](https://nodei.co/npm/node-lox-mqtt-gateway.png?downloads=true&downloadRank=true)](https://nodei.co/npm/node-lox-mqtt-gateway/) Gateway for Loxone™ miniserver to communicate with mqtt broker For communication with miniserver is used WebSocket api described in [Loxone™ API Documentation](http://www.loxone.com/enen/service/documentation/api/api.html) ## Preamble This is experimental version. Use it at your own risk. ## Quick start `sudo npm install -g node-lox-mqtt-gateway` `lox-mqtt-gateway --NODE_CONFIG='{"mqtt":{"host":"mqtt://localhost:1883","options":{"username":"XXX","password":"YYY"}},"miniserver":{"host":"192.168.0.77:80","username":"XXX","password":"YYY"}}'` ## MQTT Interface ### MQTT topic base `mqtt_prefix/category/room/control_name/{state|cmd}` **example** `lox/light/bedroom/main_light/state` ### States of Loxone™ miniserver to MQTT If you tries to get the state of specific control you need to subscribe #### topic `(MQTT topic base)/state` #### message contains data in **JSON** format. **TODO:** Make documentation for all controls ### MQTT to Loxone™ miniserver actions If you could make some action you must publish message with: #### topic `(MQTT topic base)/cmd` #### data There is a command string like in [Loxone™ API Structure file documentation](http://www.loxone.com/tl_files/loxone/downloads/other/loxone-structure-file.pdf) #### example of whole message ```json { "topic": "lox/light/bedroom/main_light/cmd", "data": "on" } ``` ## Configuration configuration file has 3 sections ### sections #### winston (logger) It contains array of transports with its options. ```json { "winston": [{ "Console": { "level": "debug" }, "File": { "level": "info", "filename": "somefile.log" } }] } ``` #### mqtt It contains host and options for [mqtt](https://github.com/mqttjs/MQTT.js). [Detailed explanation of the options.](https://github.com/mqttjs/MQTT.js#mqttclientstreambuilder-options) ```json { "mqtt": { "host": "mqtt://localhost:1883", "options": { "username": "test", "password": "test1234" } } } ``` #### miniserver It contains: * **host** - miniserver address (hostname:port) * **username** - credentials for miniserver * **password** * **readonly** - if it's set to true then no commands will be send to miniserver - it's for testing and development * **encrypted** - use AES-256-CBC encrypted web sockets * **mqtt_prefix** - topic prefix for Loxone™ messages ```json { "miniserver": { "host": "192.168.0.77:80", "username": "testlox", "password": "1234", "readonly": false, "encrypted": true, "mqtt_prefix": "lox" } } ``` ### your own config dir You could use your own config dir `lox-mqtt-gateway --NODE_CONFIG_DIR='/your/config/dir'` ### example #### /your/config/dir/default.json ```json { "winston": [{ "Console": { "level": "debug", "colorize": true, "timestamp": true } }], "mqtt": { "host": "mqtts://localhost:8883", "options": { "rejectUnauthorized": false, "username": "test", "password": "test1234", "clientId": "lox_to_mqtt_gateway" } }, "miniserver": { "host": "192.168.0.77:80", "username": "testlox", "password": "1234", "readonly": false, "mqtt_prefix": "lox" } } ```