From c1b597c02f1fbf0a211019a1f27011cfbd012083 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Mon, 11 Jun 2018 21:31:46 +0300 Subject: [PATCH 01/14] Added loging level through mqtt --- lib/controller.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/controller.js b/lib/controller.js index fc609be9..c58f4ef1 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -339,6 +339,17 @@ class Controller { if (option === 'permit_join') { this.zigbee.permitJoin(message.toString().toLowerCase() === 'true'); + } else if (option === 'log_level') { + let level = message.toString().toLowerCase() + if (["error", "warn", "info", "debug"].indexOf(level) > -1) { + console.log(`Switching log level to '${level}'`); + logger.transports.console.level = message.toString().toLowerCase(); + logger.transports.file.level = message.toString().toLowerCase(); + } + else { + logger.error(`Could not set log level to '${level}'`) + } + } else if (option === 'devices') { const devices = this.zigbee.getAllClients().map((device) => { const mappedModel = zigbeeShepherdConverters.findByZigbeeModel(device.modelId); From 06142115af71662bd7f4267fa4398a954e05e42a Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Mon, 11 Jun 2018 22:37:18 +0300 Subject: [PATCH 02/14] Fixed lint problems --- lib/controller.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index c58f4ef1..559e5bea 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -340,16 +340,14 @@ class Controller { if (option === 'permit_join') { this.zigbee.permitJoin(message.toString().toLowerCase() === 'true'); } else if (option === 'log_level') { - let level = message.toString().toLowerCase() - if (["error", "warn", "info", "debug"].indexOf(level) > -1) { - console.log(`Switching log level to '${level}'`); + let level = message.toString().toLowerCase(); + if (['error', 'warn', 'info', 'debug'].indexOf(level) > -1) { + logger.warn(`Switching log level to '${level}'`); logger.transports.console.level = message.toString().toLowerCase(); logger.transports.file.level = message.toString().toLowerCase(); + } else { + logger.error(`Could not set log level to '${level}'`); } - else { - logger.error(`Could not set log level to '${level}'`) - } - } else if (option === 'devices') { const devices = this.zigbee.getAllClients().map((device) => { const mappedModel = zigbeeShepherdConverters.findByZigbeeModel(device.modelId); From dc5a090d447ab5b4e9bd64ab255360585aefa15f Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Mon, 11 Jun 2018 23:15:45 +0300 Subject: [PATCH 03/14] Corrections @c727 suggestions --- lib/controller.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index 559e5bea..8ece19ff 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -14,6 +14,8 @@ const mqttDevicePrefixRegex = new RegExp(`${settings.get().mqtt.base_topic}/[\\w const pollInterval = 60 * 1000; // seconds * 1000. const softResetTimeout = 3600 * 1000; // seconds * 1000. +const allowedLogLevels = ['error', 'warn', 'info', 'debug']; + /** * Home Assistant requires ALL attributes to be present in ALL MQTT messages send by the device. * https://community.home-assistant.io/t/missing-value-with-mqtt-only-last-data-set-is-shown/47070/9 @@ -340,11 +342,11 @@ class Controller { if (option === 'permit_join') { this.zigbee.permitJoin(message.toString().toLowerCase() === 'true'); } else if (option === 'log_level') { - let level = message.toString().toLowerCase(); - if (['error', 'warn', 'info', 'debug'].indexOf(level) > -1) { + const level = message.toString().toLowerCase(); + if (allowedLogLevels.includes(level)) { logger.warn(`Switching log level to '${level}'`); - logger.transports.console.level = message.toString().toLowerCase(); - logger.transports.file.level = message.toString().toLowerCase(); + logger.transports.console.level = level; + logger.transports.file.level = level; } else { logger.error(`Could not set log level to '${level}'`); } From e29d5f70aedf2ee6abdc701e86fb203da7253f91 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Mon, 11 Jun 2018 23:29:33 +0300 Subject: [PATCH 04/14] Added allowed levels when setting level fails --- lib/controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/controller.js b/lib/controller.js index 8ece19ff..5226a660 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -348,7 +348,7 @@ class Controller { logger.transports.console.level = level; logger.transports.file.level = level; } else { - logger.error(`Could not set log level to '${level}'`); + logger.error(`Could not set log level to '${level}'. Allowed level: '${allowedLogLevels.join(',')}'`); } } else if (option === 'devices') { const devices = this.zigbee.getAllClients().map((device) => { From 1d49f349b925b1b886bf026b525517bf3064e4aa Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Tue, 12 Jun 2018 00:02:12 +0300 Subject: [PATCH 05/14] Added message data logging in debug mode --- lib/controller.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index 5226a660..ab69d62b 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -5,7 +5,6 @@ const settings = require('./util/settings'); const zigbeeShepherdConverters = require('zigbee-shepherd-converters'); const homeassistant = require('./homeassistant'); const objectAssignDeep = require(`object-assign-deep`); -const debug = require('debug')('zigbee2mqtt:controller'); const mqttConfigRegex = new RegExp(`${settings.get().mqtt.base_topic}/bridge/config/\\w+`, 'g'); const mqttDeviceRegex = new RegExp(`${settings.get().mqtt.base_topic}/[\\w\\s\\d]+/set`, 'g'); @@ -207,7 +206,7 @@ class Controller { // Zigbee message receieved, reset soft reset timeout. this.softResetTimeout(true); - debug('Recieved zigbee message with data', message.data); + logger.debug('Recieved zigbee message with data', message.data); if (message.type == 'devInterview') { logger.info('Connecting with device...'); From f40de00d32d07985213dbad5edc6f9e9418fc249 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Tue, 12 Jun 2018 00:14:09 +0300 Subject: [PATCH 06/14] Rollback of debug as it doesn't cover dependencies this way --- lib/controller.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/controller.js b/lib/controller.js index ab69d62b..5226a660 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -5,6 +5,7 @@ const settings = require('./util/settings'); const zigbeeShepherdConverters = require('zigbee-shepherd-converters'); const homeassistant = require('./homeassistant'); const objectAssignDeep = require(`object-assign-deep`); +const debug = require('debug')('zigbee2mqtt:controller'); const mqttConfigRegex = new RegExp(`${settings.get().mqtt.base_topic}/bridge/config/\\w+`, 'g'); const mqttDeviceRegex = new RegExp(`${settings.get().mqtt.base_topic}/[\\w\\s\\d]+/set`, 'g'); @@ -206,7 +207,7 @@ class Controller { // Zigbee message receieved, reset soft reset timeout. this.softResetTimeout(true); - logger.debug('Recieved zigbee message with data', message.data); + debug('Recieved zigbee message with data', message.data); if (message.type == 'devInterview') { logger.info('Connecting with device...'); From 2b4fc2158510a7db495865616427898f0dc237a2 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Wed, 13 Jun 2018 23:38:56 +0300 Subject: [PATCH 07/14] Updated debug and moved message to info --- lib/controller.js | 5 ++--- lib/zigbee.js | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/controller.js b/lib/controller.js index 5226a660..233e98f7 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -5,7 +5,6 @@ const settings = require('./util/settings'); const zigbeeShepherdConverters = require('zigbee-shepherd-converters'); const homeassistant = require('./homeassistant'); const objectAssignDeep = require(`object-assign-deep`); -const debug = require('debug')('zigbee2mqtt:controller'); const mqttConfigRegex = new RegExp(`${settings.get().mqtt.base_topic}/bridge/config/\\w+`, 'g'); const mqttDeviceRegex = new RegExp(`${settings.get().mqtt.base_topic}/[\\w\\s\\d]+/set`, 'g'); @@ -207,7 +206,7 @@ class Controller { // Zigbee message receieved, reset soft reset timeout. this.softResetTimeout(true); - debug('Recieved zigbee message with data', message.data); + logger.debug('Recieved zigbee message with data', message.data); if (message.type == 'devInterview') { logger.info('Connecting with device...'); @@ -344,7 +343,7 @@ class Controller { } else if (option === 'log_level') { const level = message.toString().toLowerCase(); if (allowedLogLevels.includes(level)) { - logger.warn(`Switching log level to '${level}'`); + logger.info(`Switching log level to '${level}'`); logger.transports.console.level = level; logger.transports.file.level = level; } else { diff --git a/lib/zigbee.js b/lib/zigbee.js index eee31b99..cd81925e 100644 --- a/lib/zigbee.js +++ b/lib/zigbee.js @@ -2,7 +2,6 @@ const ZShepherd = require('zigbee-shepherd'); const logger = require('./util/logger'); const settings = require('./util/settings'); const data = require('./util/data'); -const debug = require('debug')('zigbee2mqtt:zigbee'); const zclPacket = require('zcl-packet'); const advancedSettings = settings.get().advanced; @@ -139,7 +138,7 @@ class Zigbee { if (device) { // Note: checkOnline has the callback argument but does not call callback - debug(`Check online ${deviceID}`); + logger.debug(`Check online ${deviceID}`); this.shepherd.controller.checkOnline(device); } } From 2071b0f69fb8e4d277a4f0143d4512ba65c8d4a3 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Wed, 13 Jun 2018 23:55:52 +0300 Subject: [PATCH 08/14] Added possibility to update log_level from configuration --- lib/util/logger.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/util/logger.js b/lib/util/logger.js index 9eb800d9..773b6537 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,12 +1,13 @@ const winston = require('winston'); const data = require('./data'); - +const settings = require('./settings'); +const logLevel = settings.get().advanced && settings.get().advanced.log_level ? settings.get().advanced.log_level : winston.level.info; const logger = new (winston.Logger)({ transports: [ new (winston.transports.File)({ filename: data.joinPath('log.txt'), json: false, - level: winston.level.info, + level: logLevel, maxFiles: 3, maxsize: 10000000, // 10MB }), @@ -21,5 +22,6 @@ const logger = new (winston.Logger)({ }), ], }); +logger.transports.console.level = logLevel; module.exports = logger; From 15fca170ad3d82bac3005ed3a8bb6f1c6aaaedfe Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Wed, 13 Jun 2018 23:59:50 +0300 Subject: [PATCH 09/14] Fixed travis error from lint --- lib/util/logger.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/util/logger.js b/lib/util/logger.js index 773b6537..250a5eec 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,7 +1,8 @@ const winston = require('winston'); const data = require('./data'); const settings = require('./settings'); -const logLevel = settings.get().advanced && settings.get().advanced.log_level ? settings.get().advanced.log_level : winston.level.info; +const logLevel = settings.get().advanced && settings.get().advanced.log_level ? + settings.get().advanced.log_level : winston.level.info; const logger = new (winston.Logger)({ transports: [ new (winston.transports.File)({ From 7fe9d6731a6ecd1f9474c83a4b228b491344fda2 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Thu, 14 Jun 2018 09:02:07 +0300 Subject: [PATCH 10/14] Force debug on logger if DEBUG is set --- lib/util/logger.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/util/logger.js b/lib/util/logger.js index 250a5eec..99ec74bf 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,8 +1,11 @@ const winston = require('winston'); const data = require('./data'); const settings = require('./settings'); -const logLevel = settings.get().advanced && settings.get().advanced.log_level ? +let logLevel = settings.get().advanced && settings.get().advanced.log_level ? settings.get().advanced.log_level : winston.level.info; +if (process.env.DEBUG) { + logLevel = 'debug'; +} const logger = new (winston.Logger)({ transports: [ new (winston.transports.File)({ From 4cb98b6257260b5fc36cb4559dccf40969d12165 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Thu, 14 Jun 2018 11:22:26 +0300 Subject: [PATCH 11/14] Added debug for mqtt message as well --- lib/controller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/controller.js b/lib/controller.js index 233e98f7..715f7e45 100644 --- a/lib/controller.js +++ b/lib/controller.js @@ -317,7 +317,7 @@ class Controller { } handleMQTTMessage(topic, message) { - logger.debug(`Incoming MQTT message '${topic}' '${message.toString()}'`); + logger.debug(`Recieved mqtt message on topic '${topic}' with data '${message}'`); if (topic.match(mqttConfigRegex)) { this.handleMQTTMessageConfig(topic, message); From 949d2366976029a29a5cb68e06247e28502a13e0 Mon Sep 17 00:00:00 2001 From: Marius Ciotlos Date: Thu, 14 Jun 2018 16:26:31 +0300 Subject: [PATCH 12/14] Removed dependency --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index f5ba5932..a334b8be 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ }, "homepage": "https://github.com/Koenkk/zigbee2mqtt/wiki", "dependencies": { - "debug": "*", "object-assign-deep": "*", "mqtt": "*", "winston": "2.4.2", From b12d868866b33b2a39f0745a979b3c9690fb7bd3 Mon Sep 17 00:00:00 2001 From: Koenkk Date: Thu, 14 Jun 2018 20:27:29 +0200 Subject: [PATCH 13/14] Update npm-shrinkwrap.json --- npm-shrinkwrap.json | 49 ++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index a298ce44..9f16ef58 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -222,16 +222,6 @@ "serialport": "4.0.7", "stream-browserify": "2.0.1", "unpi": "1.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "chalk": { @@ -375,9 +365,9 @@ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -559,6 +549,17 @@ "strip-json-comments": "2.0.1", "table": "4.0.2", "text-table": "0.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-config-google": { @@ -1511,14 +1512,6 @@ "object.assign": "4.1.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, "node-pre-gyp": { "version": "0.6.32", "bundled": true, @@ -2777,14 +2770,6 @@ "zstack-constants": "0.2.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, "zcl-id": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/zcl-id/-/zcl-id-0.3.2.tgz", @@ -2797,9 +2782,9 @@ } }, "zigbee-shepherd-converters": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/zigbee-shepherd-converters/-/zigbee-shepherd-converters-2.0.6.tgz", - "integrity": "sha512-WCa6556mDOn7324yU3EQjVlO2JpiwibJMAYZkFsNkF9uOB1ViYQsx49YDJWF4ShLfnq3VRnOHJm2UfVqc/3ACA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/zigbee-shepherd-converters/-/zigbee-shepherd-converters-2.0.7.tgz", + "integrity": "sha512-yBLpHohmjw192Sp5rjX8pozLcjcnhy5AmVIob+CI0+AgGCHEpzGBjc9JvxLyH/N/XVOjMiyVK6wOb5B/Ua1xaw==", "requires": { "debounce": "1.1.0" }, From ae9f071ffca20ec92d5481efa69080f4f48587b9 Mon Sep 17 00:00:00 2001 From: Koenkk Date: Thu, 14 Jun 2018 20:27:43 +0200 Subject: [PATCH 14/14] Update logger.js --- lib/util/logger.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/util/logger.js b/lib/util/logger.js index 99ec74bf..b5c28af9 100644 --- a/lib/util/logger.js +++ b/lib/util/logger.js @@ -1,11 +1,16 @@ const winston = require('winston'); const data = require('./data'); const settings = require('./settings'); -let logLevel = settings.get().advanced && settings.get().advanced.log_level ? - settings.get().advanced.log_level : winston.level.info; + +let logLevel = ''; if (process.env.DEBUG) { logLevel = 'debug'; +} else if (settings.get().advanced && settings.get().advanced.log_level) { + logLevel = settings.get().advanced.log_level; +} else { + logLevel = winston.level.info; } + const logger = new (winston.Logger)({ transports: [ new (winston.transports.File)({ @@ -26,6 +31,7 @@ const logger = new (winston.Logger)({ }), ], }); + logger.transports.console.level = logLevel; module.exports = logger;