diff --git a/docker/run.sh b/docker/run.sh index 659a3e69..1bedb05f 100644 --- a/docker/run.sh +++ b/docker/run.sh @@ -1,8 +1,16 @@ #!/bin/sh -if [ ! -f /app/data/configuration.yaml ]; then +if [ ! -z "$ZIGBEE2MQTT_DATA" ]; then + DATA="$ZIGBEE2MQTT_DATA" +else + DATA="/app/data" +fi + +echo "Using '$DATA' as data directory" + +if [ ! -f "$DATA/configuration.yaml" ]; then echo "Creating configuration file..." - cp /app/configuration.yaml /app/data/configuration.yaml + cp /app/configuration.yaml "$DATA/configuration.yaml" fi npm start diff --git a/lib/util/data.js b/lib/util/data.js new file mode 100644 index 00000000..b50cadf4 --- /dev/null +++ b/lib/util/data.js @@ -0,0 +1,15 @@ +const path = require('path'); + +let dataPath = null; + +if (process.env.ZIGBEE2MQTT_DATA) { + dataPath = process.env.ZIGBEE2MQTT_DATA; +} +else { + dataPath = path.join(__dirname, '..', '..', 'data'); + dataPath = path.normalize(dataPath); +} + +module.exports = { + joinPath: (file) => path.join(dataPath, file) +} diff --git a/lib/util/logger.js b/lib/util/logger.js index 4cb094f0..c1935fa0 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,9 +1,10 @@ const winston = require('winston'); +const data = require('./data'); const logger = new (winston.Logger)({ transports: [ new (winston.transports.File)({ - filename: 'data/log.txt', + filename: data.joinPath('log.txt'), json: false, level: winston.level.info, maxFiles: 3, diff --git a/lib/util/settings.js b/lib/util/settings.js index 2934a425..d7e1fe30 100644 --- a/lib/util/settings.js +++ b/lib/util/settings.js @@ -1,6 +1,8 @@ const YAWN = require('yawn-yaml/cjs'); const fs = require('fs'); -const file = `${__dirname}/../../data/configuration.yaml`; +const data = require('./data'); +const file = data.joinPath('configuration.yaml'); + let yawn = read(); function write() { diff --git a/lib/zigbee.js b/lib/zigbee.js index 530bc7ce..011308a7 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -2,10 +2,11 @@ const ZShepherd = require('zigbee-shepherd'); const logger = require('./util/logger'); const settings = require('./util/settings'); const deviceMapping = require('./devices'); +const data = require('./util/data'); const shepherdSettings = { net: {panId: 0x1a62}, - dbPath: `${__dirname}/../data/database.db` + dbPath: data.joinPath('database.db') }; class Zigbee {