From 9ea490222fea8e2879153c412343cfb3277ee38c Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 10 May 2021 21:46:06 +0300 Subject: [PATCH 01/61] c --- app.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app.js b/app.js index 91481f8..372f25b 100644 --- a/app.js +++ b/app.js @@ -112,6 +112,30 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { ldevice.updateState(`${message}`, instance); /* */ + const req = https.request({ + hostname: 'dialogs.yandex.net', + port: 443, + path: `/api/v1/skills/${config.notification.skill_id}/callback/state`, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': config.notification.oauth_token + } + }, res => { + console.log(`statusCode: ${res.statusCode}`) + + res.on('data', d => { + process.stdout.write(d); + }); + }); + + req.on('error', error => { + console.error(error) + }); + + req.write(data); + req.end(); + }); module.exports = app; From 022455f8ca1969b0c27fe5f39f70e3dac9d065d7 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 10 May 2021 21:47:47 +0300 Subject: [PATCH 02/61] c --- app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 372f25b..5bc2833 100644 --- a/app.js +++ b/app.js @@ -125,6 +125,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.log(`statusCode: ${res.statusCode}`) res.on('data', d => { + console.log(d); process.stdout.write(d); }); }); @@ -133,7 +134,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.error(error) }); - req.write(data); + // req.write(data); req.end(); }); From df7eef9c12481b78290c8309209555daa907525c Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 10 May 2021 22:01:33 +0300 Subject: [PATCH 03/61] c --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 5bc2833..a2a63e5 100644 --- a/app.js +++ b/app.js @@ -118,8 +118,8 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { path: `/api/v1/skills/${config.notification.skill_id}/callback/state`, method: 'POST', headers: { - 'Content-Type': 'application/json', - 'Authorization': config.notification.oauth_token + 'Content-Type': `application/json`, + 'Authorization': `OAuth ${config.notification.oauth_token}` } }, res => { console.log(`statusCode: ${res.statusCode}`) From 52655f3a514bb8887bf73a56555be3adc28eb45a Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 00:53:25 +0300 Subject: [PATCH 04/61] c --- app.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index a2a63e5..cf55b4e 100644 --- a/app.js +++ b/app.js @@ -134,7 +134,13 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.error(error) }); - // req.write(data); + req.write({ + "ts": Math.floor(Date.now() / 1000), + "payload": { + "user_id": '2', + "devices": [] + } + }); req.end(); }); From 76d63223fce33cff8ce65838fff63192bb1cad48 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 00:55:00 +0300 Subject: [PATCH 05/61] c --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index cf55b4e..1b5c5c1 100644 --- a/app.js +++ b/app.js @@ -134,13 +134,13 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.error(error) }); - req.write({ + req.write(JSON.stringify({ "ts": Math.floor(Date.now() / 1000), "payload": { "user_id": '2', "devices": [] } - }); + })); req.end(); }); From 9928eec0ddb86293534b93e93b3400b50a17aab3 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 01:03:43 +0300 Subject: [PATCH 06/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 1b5c5c1..298f68c 100644 --- a/app.js +++ b/app.js @@ -138,7 +138,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { "ts": Math.floor(Date.now() / 1000), "payload": { "user_id": '2', - "devices": [] + "devices": ldevice.getState(), } })); req.end(); From 5a0ea1e0816d4a4820a28ee475fd4a71a06f5813 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 01:11:13 +0300 Subject: [PATCH 07/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 298f68c..d6ebea8 100644 --- a/app.js +++ b/app.js @@ -138,7 +138,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { "ts": Math.floor(Date.now() / 1000), "payload": { "user_id": '2', - "devices": ldevice.getState(), + "devices": [ldevice.getState()], } })); req.end(); From d1cf3c90beb1ad42387c12e36cd0335d566f1595 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 01:13:13 +0300 Subject: [PATCH 08/61] c --- app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/app.js b/app.js index d6ebea8..10b3580 100644 --- a/app.js +++ b/app.js @@ -137,7 +137,6 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { req.write(JSON.stringify({ "ts": Math.floor(Date.now() / 1000), "payload": { - "user_id": '2', "devices": [ldevice.getState()], } })); From 3cdddcfae1172d6185d084dd02ff36bc4285d0cd Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Tue, 11 May 2021 01:13:58 +0300 Subject: [PATCH 09/61] c --- app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app.js b/app.js index 10b3580..75e9cb5 100644 --- a/app.js +++ b/app.js @@ -137,6 +137,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { req.write(JSON.stringify({ "ts": Math.floor(Date.now() / 1000), "payload": { + "user_id": '1', "devices": [ldevice.getState()], } })); From 0f0832041103d92a54390c22e1dd680ccfa2165e Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Wed, 12 May 2021 22:17:01 +0300 Subject: [PATCH 10/61] c --- app.js | 67 ++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/app.js b/app.js index 75e9cb5..0772337 100644 --- a/app.js +++ b/app.js @@ -112,36 +112,47 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { ldevice.updateState(`${message}`, instance); /* */ - const req = https.request({ - hostname: 'dialogs.yandex.net', - port: 443, - path: `/api/v1/skills/${config.notification.skill_id}/callback/state`, - method: 'POST', - headers: { - 'Content-Type': `application/json`, - 'Authorization': `OAuth ${config.notification.oauth_token}` - } - }, res => { - console.log(`statusCode: ${res.statusCode}`) - - res.on('data', d => { - console.log(d); - process.stdout.write(d); + Promise.all(config.notification.map(el => { + const [skill_id, oauth_token, user_id] = el; + + return new Promise((resolve, reject) => { + const req = https.request({ + hostname: 'dialogs.yandex.net', + port: 443, + path: `/api/v1/skills/${skill_id}/callback/state`, + method: 'POST', + headers: { + 'Content-Type': `application/json`, + 'Authorization': `OAuth ${oauth_token}` + } + }, res => { + console.log(`statusCode: ${res.statusCode}`); + + res.on('data', d => { + console.log(d); + process.stdout.write(d); + }); + }); + + req.on('error', error => { + console.error(error) + }); + + req.write(JSON.stringify({ + "ts": Math.floor(Date.now() / 1000), + "payload": { + "user_id": `${user_id}`, + "devices": [ldevice.getState()], + } + })); + + req.end(); + + resolve(true); }); - }); - - req.on('error', error => { - console.error(error) - }); - - req.write(JSON.stringify({ - "ts": Math.floor(Date.now() / 1000), - "payload": { - "user_id": '1', - "devices": [ldevice.getState()], - } })); - req.end(); + + /* */ }); From e537003082719680eac042dc74ba2c38b910c205 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Wed, 12 May 2021 22:23:44 +0300 Subject: [PATCH 11/61] c --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 0772337..76777f8 100644 --- a/app.js +++ b/app.js @@ -112,7 +112,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { ldevice.updateState(`${message}`, instance); /* */ - Promise.all(config.notification.map(el => { + Promise.all([].concat(config.notification).map(el => { const [skill_id, oauth_token, user_id] = el; return new Promise((resolve, reject) => { @@ -147,7 +147,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { })); req.end(); - + resolve(true); }); })); From 712ec40202577642d3df14b3dc7d0ccf848955f5 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Wed, 12 May 2021 22:27:15 +0300 Subject: [PATCH 12/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 76777f8..713fc75 100644 --- a/app.js +++ b/app.js @@ -112,7 +112,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { ldevice.updateState(`${message}`, instance); /* */ - Promise.all([].concat(config.notification).map(el => { + Promise.all(config.notification.map(el => { const [skill_id, oauth_token, user_id] = el; return new Promise((resolve, reject) => { From 6210cd99b75f360dc8d3360b042b3a9105a3b1dc Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Thu, 13 May 2021 00:47:55 +0300 Subject: [PATCH 13/61] c --- app.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 713fc75..1c446d9 100644 --- a/app.js +++ b/app.js @@ -113,10 +113,10 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { /* */ Promise.all(config.notification.map(el => { - const [skill_id, oauth_token, user_id] = el; + let {skill_id, oauth_token, user_id} = el; return new Promise((resolve, reject) => { - const req = https.request({ + let req = https.request({ hostname: 'dialogs.yandex.net', port: 443, path: `/api/v1/skills/${skill_id}/callback/state`, @@ -129,7 +129,6 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.log(`statusCode: ${res.statusCode}`); res.on('data', d => { - console.log(d); process.stdout.write(d); }); }); @@ -138,13 +137,20 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.error(error) }); - req.write(JSON.stringify({ + let {id, capabilities, properties} = ldevice.getState(); + const a = { "ts": Math.floor(Date.now() / 1000), "payload": { "user_id": `${user_id}`, - "devices": [ldevice.getState()], + "devices": [{ + id, + capabilities: capabilities.filter(c => c.state.instance == instance), + properties: properties.filter(p => p.state.instance == instance) + }], } - })); + }; + console.log(a); + req.write(JSON.stringify(a)); req.end(); From 23fab5fde915ad835f68ecf27dae8130831a03a3 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Thu, 13 May 2021 00:48:42 +0300 Subject: [PATCH 14/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 1c446d9..6bd4e83 100644 --- a/app.js +++ b/app.js @@ -149,7 +149,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { }], } }; - console.log(a); + console.dir(a, {depth: 10}); req.write(JSON.stringify(a)); req.end(); From 2808c2c2a30151f997fcb13341470ace2a3216cf Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Thu, 13 May 2021 00:53:02 +0300 Subject: [PATCH 15/61] test version notification api --- app.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 6bd4e83..763c54d 100644 --- a/app.js +++ b/app.js @@ -129,16 +129,16 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { console.log(`statusCode: ${res.statusCode}`); res.on('data', d => { - process.stdout.write(d); + // process.stdout.write(d); }); }); req.on('error', error => { - console.error(error) + // console.error(error) }); let {id, capabilities, properties} = ldevice.getState(); - const a = { + req.write(JSON.stringify({ "ts": Math.floor(Date.now() / 1000), "payload": { "user_id": `${user_id}`, @@ -148,9 +148,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { properties: properties.filter(p => p.state.instance == instance) }], } - }; - console.dir(a, {depth: 10}); - req.write(JSON.stringify(a)); + })); req.end(); From 053877774a193e8954bccc3d3201184ad3e913a5 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Thu, 13 May 2021 00:53:46 +0300 Subject: [PATCH 16/61] Update documentation --- README.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/README.md b/README.md index e86de37..3d6f00e 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ Прочий функционал (изменение громкости, каналов, отключение звука), поидее, так же должны работать. ## ChangeLog +###### 13.05.2021 +Добавлена поддержка API уведомлений об изменении состояний устройств. + ###### 31.03.2021 Добавлена поддрежка разделения доступа пользователей к устройствам. @@ -64,6 +67,12 @@ mv config.orig.js config.js #### Файл конфигурации ``` module.exports = { + notification: [ + { + ... + }, + ... + ] mqtt: { ... }, @@ -76,18 +85,21 @@ module.exports = { { ... }, + ... ], users: [ { ... }, + ... ], devices: [ { ... }, + ... ] } ``` @@ -273,6 +285,28 @@ devices: [ *В случае отсутсвия id в конфиге, он будет назначен автоматически по индексу в массиве.* +#### Уведомление об изменении состояний устройств +Платформа УД Яндекс предоставляет сервис уведомлений об изменении состояний устройств. При изменении состояния устройства (например, изменение влажности) yandex2mqtt будет отправлять запрос с новым состоянием. + +В настройках предусмотрен блок **notification**. + +``` +notification: [ + { + skill_id: '6fca0a54-a505-4420-b774-f01da95e5c31', + oauth_token: 'AQA11AAPv-V2BAT7o_ps6gEtrtNNjlE2ENYt96w', + user_id: '2' + }, +] +``` + +Если к yandex2mqtt "подключено" несколько навыков УД, то в массиве необходимо указать настройки для каждого навыка УД, который должен получать уведомления. + +skill_id (идентификатор вызываемого навыка, присвоенный при создании) и oauth_token (авторизационный токен владельца навыка) можно узнать из документации на [Уведомление об изменении состояний устройств](https://yandex.ru/dev/dialogs/smart-home/doc/reference-alerts/post-skill_id-callback-state.html), а user_id - id пользователя в файле конфигурации yandex2mqtt. + +*Важно. Уведомления будут отправляться при изменнии mqtt топика хранящего состояние устройства. Соответственно, если для устройства не задан топик state, то уведомление для устройтва отправляться не будет.* + + #### Разрешенные пользователи для устройств (allowedUsers) В блоке конфигурации можно указать пользователей (id пользователей), для которых будет доступно устройство. From f8537046a1fe1bd16ed8d3461f1d5df417fab453 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 01:26:05 +0300 Subject: [PATCH 17/61] add winston --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a3ec69c..6150dfe 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "passport-http": "^0.3.0", "passport-http-bearer": "^1.0.1", "passport-local": "^1.0.0", - "passport-oauth2-client-password": "^0.1.2" + "passport-oauth2-client-password": "^0.1.2", + "winston": "^3.3.3" }, "devDependencies": { "eslint": "^7.21.0", From 9e83f8ea2174310938ddf4d439d8dc04d5923adb Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 01:26:10 +0300 Subject: [PATCH 18/61] c --- app.js | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 763c54d..15a56df 100644 --- a/app.js +++ b/app.js @@ -2,6 +2,9 @@ const fs = require('fs'); const path = require('path'); +/* */ +const { createLogger, format, transports } = require('winston'); +const { combine, timestamp, printf } = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -20,6 +23,23 @@ const mqtt = require('mqtt'); const config = require('./config'); const Device = require('./device'); +/* Logging */ +global.logger = createLogger({ + level: 'info', + // format: winston.format.json(), + format: combine( + timestamp(), + printf(({ level, message, timestamp }) => { + return `${timestamp} ${level}: ${message}`; + }) + ), + transports: [ + new transports.File({filename: 'yandex2mqtt.log'}), + new transports.Console(), + ], +}); + +/* */ app.engine('ejs', ejs.__express); app.set('view engine', 'ejs'); app.set('views', path.join(__dirname, './views')); @@ -126,9 +146,11 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { 'Authorization': `OAuth ${oauth_token}` } }, res => { - console.log(`statusCode: ${res.statusCode}`); - res.on('data', d => { + global.logger.log({ + level: 'info', + message: `${d}` + }); // process.stdout.write(d); }); }); From 925256fdbd548fbad07b35d7a3e71aa4a03aa790 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 02:28:29 +0300 Subject: [PATCH 19/61] c --- app.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/app.js b/app.js index 15a56df..3e7a4f6 100644 --- a/app.js +++ b/app.js @@ -3,8 +3,8 @@ const fs = require('fs'); const path = require('path'); /* */ -const { createLogger, format, transports } = require('winston'); -const { combine, timestamp, printf } = format; +const {createLogger, format, transports} = require('winston'); +const {combine, timestamp, label, printf} = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -26,16 +26,17 @@ const Device = require('./device'); /* Logging */ global.logger = createLogger({ level: 'info', - // format: winston.format.json(), format: combine( + label(), timestamp(), - printf(({ level, message, timestamp }) => { - return `${timestamp} ${level}: ${message}`; + printf(({level, message, timestamp, label}) => { + return `${timestamp} [${label}] ${level}: ${message}`; }) ), transports: [ - new transports.File({filename: 'yandex2mqtt.log'}), new transports.Console(), + new transports.File({filename: 'log/info.log'}), + new transports.File({filename: 'log/error.log', level: 'error'}), ], }); @@ -147,16 +148,13 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { } }, res => { res.on('data', d => { - global.logger.log({ - level: 'info', - message: `${d}` - }); + global.logger.log('info', 'notification', {message: `${d}`}); // process.stdout.write(d); }); }); req.on('error', error => { - // console.error(error) + global.logger.log('error', 'notification', {message: `${error}`}); }); let {id, capabilities, properties} = ldevice.getState(); From 0f79098f4476f45bca429d0c2cd4366e68a76940 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 02:36:56 +0300 Subject: [PATCH 20/61] c --- app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 3e7a4f6..46906be 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,7 @@ const fs = require('fs'); const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); -const {combine, timestamp, label, printf} = format; +const {combine, timestamp, printf} = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -29,7 +29,7 @@ global.logger = createLogger({ format: combine( label(), timestamp(), - printf(({level, message, timestamp, label}) => { + printf(({level, message, label, timestamp}) => { return `${timestamp} [${label}] ${level}: ${message}`; }) ), @@ -148,7 +148,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { } }, res => { res.on('data', d => { - global.logger.log('info', 'notification', {message: `${d}`}); + global.logger.log('info', {message: `${d}`, label: 'notification'}); // process.stdout.write(d); }); }); From 5184680a6f3317d294615a91f125ec281d2dce09 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 02:54:41 +0300 Subject: [PATCH 21/61] c --- app.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 46906be..a409723 100644 --- a/app.js +++ b/app.js @@ -29,8 +29,8 @@ global.logger = createLogger({ format: combine( label(), timestamp(), - printf(({level, message, label, timestamp}) => { - return `${timestamp} [${label}] ${level}: ${message}`; + printf(({level, message, timestamp}) => { + return `${timestamp} ${level}: ${message}`; }) ), transports: [ @@ -148,13 +148,13 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { } }, res => { res.on('data', d => { - global.logger.log('info', {message: `${d}`, label: 'notification'}); + global.logger.log('info', {message: `${d}`}); // process.stdout.write(d); }); }); req.on('error', error => { - global.logger.log('error', 'notification', {message: `${error}`}); + global.logger.log('error', {message: `${error}`}); }); let {id, capabilities, properties} = ldevice.getState(); From 29cfbaa470e8da7affbd012bf815dd266271afe6 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 18:20:53 +0300 Subject: [PATCH 22/61] c --- app.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index a409723..09406b5 100644 --- a/app.js +++ b/app.js @@ -23,6 +23,10 @@ const mqtt = require('mqtt'); const config = require('./config'); const Device = require('./device'); +/* */ +const clArgv = process.argv.slice(2); +console.log(clArgv); + /* Logging */ global.logger = createLogger({ level: 'info', @@ -33,13 +37,12 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [ - new transports.Console(), - new transports.File({filename: 'log/info.log'}), - new transports.File({filename: 'log/error.log', level: 'error'}), - ], + transports: [], }); +if (clArgv.indexOf('--log-info')) global.logger.add(new transports.Console()); +if (clArgv.indexOf('--log-error')) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); + /* */ app.engine('ejs', ejs.__express); app.set('view engine', 'ejs'); From 3af34bdac0a2ab19d2f0bf891a12e5c038e5881f Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 18:24:10 +0300 Subject: [PATCH 23/61] c --- app.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index 09406b5..945cc21 100644 --- a/app.js +++ b/app.js @@ -31,7 +31,6 @@ console.log(clArgv); global.logger = createLogger({ level: 'info', format: combine( - label(), timestamp(), printf(({level, message, timestamp}) => { return `${timestamp} ${level}: ${message}`; @@ -40,8 +39,8 @@ global.logger = createLogger({ transports: [], }); -if (clArgv.indexOf('--log-info')) global.logger.add(new transports.Console()); -if (clArgv.indexOf('--log-error')) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); +if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); +if (clArgv.indexOf('--log-error') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); /* */ app.engine('ejs', ejs.__express); From d51e04ecc5d077d3d58e85f36c8b223a634d517c Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 18:57:32 +0300 Subject: [PATCH 24/61] Add winston-null --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 6150dfe..d825282 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "passport-http-bearer": "^1.0.1", "passport-local": "^1.0.0", "passport-oauth2-client-password": "^0.1.2", - "winston": "^3.3.3" + "winston": "^3.3.3", + "winston-null": "^2.0.0" }, "devDependencies": { "eslint": "^7.21.0", From ce696da495e3d7d3d91c7a6ed4ee72d464a37083 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 18:57:35 +0300 Subject: [PATCH 25/61] c --- app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 945cc21..d52a987 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,7 @@ const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); const {combine, timestamp, printf} = format; +var nullTransport = require('winston-null'); /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -36,7 +37,7 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [], + transports: [nullTransport], }); if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); From a580eaa66672856ae2263a15858acae2de4e1462 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 19:02:01 +0300 Subject: [PATCH 26/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index d52a987..72f4c2c 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); const {combine, timestamp, printf} = format; -var nullTransport = require('winston-null'); +const {NullTransport: nullTransport} = require('winston-null'); /* express and https */ const ejs = require('ejs'); const express = require('express'); From b3e06b2b61190da8f80b19c84d21682d98ecff3c Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 19:02:56 +0300 Subject: [PATCH 27/61] c --- app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 72f4c2c..04e9d33 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,7 @@ const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); const {combine, timestamp, printf} = format; -const {NullTransport: nullTransport} = require('winston-null'); +const NullTransport = require('winston-null'); /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -37,7 +37,7 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [nullTransport], + transports: [NullTransport], }); if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); From 7d0b5794b7d528359a165350d318ca4a5a322189 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 19:04:58 +0300 Subject: [PATCH 28/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 04e9d33..9aaecf7 100644 --- a/app.js +++ b/app.js @@ -37,7 +37,7 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [NullTransport], + transports: [new NullTransport()], }); if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); From c887ef423659e3daa8c3b8cd5980f9dc0570934b Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:03:01 +0300 Subject: [PATCH 29/61] c --- app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 9aaecf7..b8a0b9d 100644 --- a/app.js +++ b/app.js @@ -37,9 +37,10 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [new NullTransport()], + transports: [], }); +if (clArgv.length == 0) global.logger.add(NullTransport); if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); if (clArgv.indexOf('--log-error') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); From b28d6a99c0c7a9b8740e68e62058fb9186e0656e Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:09:30 +0300 Subject: [PATCH 30/61] c --- app.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app.js b/app.js index b8a0b9d..3a44512 100644 --- a/app.js +++ b/app.js @@ -37,11 +37,13 @@ global.logger = createLogger({ return `${timestamp} ${level}: ${message}`; }) ), - transports: [], + transports: [ + new transports.Console({ + silent: clArgv.indexOf('--log-info') == -1 + }) + ], }); -if (clArgv.length == 0) global.logger.add(NullTransport); -if (clArgv.indexOf('--log-info') > -1) global.logger.add(new transports.Console()); if (clArgv.indexOf('--log-error') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); /* */ From d5dab865288823beccb3110085f3b43cc340f2eb Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:19:27 +0300 Subject: [PATCH 31/61] Remove winston-null --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index d825282..6150dfe 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,7 @@ "passport-http-bearer": "^1.0.1", "passport-local": "^1.0.0", "passport-oauth2-client-password": "^0.1.2", - "winston": "^3.3.3", - "winston-null": "^2.0.0" + "winston": "^3.3.3" }, "devDependencies": { "eslint": "^7.21.0", From 7d423ae0d145fab160e1fc93378ee0e2619e31c7 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:27:32 +0300 Subject: [PATCH 32/61] Add logging and some code improvement --- app.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app.js b/app.js index 3a44512..5f77a44 100644 --- a/app.js +++ b/app.js @@ -5,7 +5,6 @@ const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); const {combine, timestamp, printf} = format; -const NullTransport = require('winston-null'); /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -26,7 +25,6 @@ const Device = require('./device'); /* */ const clArgv = process.argv.slice(2); -console.log(clArgv); /* Logging */ global.logger = createLogger({ @@ -138,7 +136,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { const ldevice = global.devices.find(d => d.data.id == deviceId); ldevice.updateState(`${message}`, instance); - /* */ + /* Make Request to Yandex Dialog notification API */ Promise.all(config.notification.map(el => { let {skill_id, oauth_token, user_id} = el; @@ -155,7 +153,6 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { }, res => { res.on('data', d => { global.logger.log('info', {message: `${d}`}); - // process.stdout.write(d); }); }); @@ -183,7 +180,6 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { })); /* */ - }); module.exports = app; From 03fe4e0d8db510281ef0992c4cdff3dcea71fcfd Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:27:41 +0300 Subject: [PATCH 33/61] Add logging --- routes/user.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/user.js b/routes/user.js index d3f230c..96224a1 100644 --- a/routes/user.js +++ b/routes/user.js @@ -39,7 +39,7 @@ module.exports.devices = [ res.status(200).send(r); } catch (e) { - console.error(e); + global.logger.log('error', {message: `${e}`}); res.status(404).send(undefined); } } From 4e108d3e570e0d0fe0afceea6dd892198a1bae87 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:33:00 +0300 Subject: [PATCH 34/61] Add logging and some code improvement --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 5f77a44..9824aa4 100644 --- a/app.js +++ b/app.js @@ -152,7 +152,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { } }, res => { res.on('data', d => { - global.logger.log('info', {message: `${d}`}); + global.logger.log('error', {message: `${d}`}); }); }); From f774b5e7c444c8b9f9f6baf0162f6d745b02a3f5 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:39:08 +0300 Subject: [PATCH 35/61] Add logging and some code improvement --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 9824aa4..5f77a44 100644 --- a/app.js +++ b/app.js @@ -152,7 +152,7 @@ global.mqttClient = mqtt.connect(`mqtt://${config.mqtt.host}`, { } }, res => { res.on('data', d => { - global.logger.log('error', {message: `${d}`}); + global.logger.log('info', {message: `${d}`}); }); }); From b00068710cc1018721ebf56eeb648508cde24130 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:40:24 +0300 Subject: [PATCH 36/61] Add logging and some code improvement --- device.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.js b/device.js index 3dc9aae..25e47ab 100644 --- a/device.js +++ b/device.js @@ -195,7 +195,7 @@ class Device { message = `${value}`; } catch(e) { topic = false; - console.log(e); + global.logger.log('error', {message: `${e}`}); } if (topic) { From 1661aeac9addfaa6fc18c1a00167d0cde208d7d5 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 20:44:38 +0300 Subject: [PATCH 37/61] Add logging and some code improvement --- device.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device.js b/device.js index 25e47ab..5b0168f 100644 --- a/device.js +++ b/device.js @@ -225,7 +225,7 @@ class Device { const value = this.getMappedValue(val, actType, false); cp.state = {instance, value: convertToYandexValue(value, actType)}; } catch(e) { - console.error(e); + global.logger.log('error', {message: `${e}`}); } } } From 5370f50b1540b4a21f3bc72a02507fdd03279c6a Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:20:09 +0300 Subject: [PATCH 38/61] Add logging and some code improvement --- db/access_tokens.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/db/access_tokens.js b/db/access_tokens.js index 0a43256..07f9a66 100644 --- a/db/access_tokens.js +++ b/db/access_tokens.js @@ -17,18 +17,18 @@ global.dbl = new loki('./loki.json', { module.exports.find = (key, done) => { const ltoken = global.authl.findOne({'token': key}); if (ltoken){ - console.log('Token found'); const {userId, clientId} = ltoken; return done(null, {userId, clientId}) } else { - return done(new Error('Token Not Found')); + global.logger.log('error', {message: `${new Error('Token Not Found')}`}); + return done(); } }; module.exports.findByUserIdAndClientId = (userId, clientId, done) => { const ltoken = global.authl.findOne({'userId': userId}); if (ltoken){ - console.log('Load token by userId: User found'); + global.logger.log('info', {message: `Load token by userId (${userId}): User found`}); const {token, userId: uid, clientId: cid} = ltoken; if (uid === userId && cid === clientId) return done(null, token); else return done(new Error('Token Not Found')); @@ -39,13 +39,13 @@ module.exports.findByUserIdAndClientId = (userId, clientId, done) => { }; module.exports.save = (token, userId, clientId, done) => { - console.log('Start saving token'); + global.logger.log('info', {message: `Start saving token`}); const ltoken = global.authl.findOne({'userId': userId}); if (ltoken){ - console.log('User Updated'); + global.logger.log('info', {message: `User Updated`}); global.authl.update(Object.assign({}, ltoken, {token, userId, clientId})); } else { - console.log('User not Found. Create new...'); + global.logger.log('info', {message: `User not Found. Create new...`}); global.authl.insert({'type': 'token', token, userId, clientId}); } done(); From 1761af28645b7099e2d27adefc62103578add959 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:24:10 +0300 Subject: [PATCH 39/61] Add logging and some code improvement --- app.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 5f77a44..b4d3c06 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,7 @@ const fs = require('fs'); const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); -const {combine, timestamp, printf} = format; +const {combine, timestamp, printf, errors, prettyPrint} = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -30,10 +30,12 @@ const clArgv = process.argv.slice(2); global.logger = createLogger({ level: 'info', format: combine( + errors({stack: true}), timestamp(), - printf(({level, message, timestamp}) => { - return `${timestamp} ${level}: ${message}`; - }) + // printf(({level, message, timestamp}) => { + // return `${timestamp} ${level}: ${message}`; + // }), + prettyPrint() ), transports: [ new transports.Console({ From bc2410719a21dcc04ad5030717710416aec46167 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:32:42 +0300 Subject: [PATCH 40/61] c --- app.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index b4d3c06..69b0ee7 100644 --- a/app.js +++ b/app.js @@ -32,10 +32,9 @@ global.logger = createLogger({ format: combine( errors({stack: true}), timestamp(), - // printf(({level, message, timestamp}) => { - // return `${timestamp} ${level}: ${message}`; - // }), - prettyPrint() + printf(({level, message, timestamp, stack}) => { + return `${timestamp} ${level}: ${message} ${stack}`; + }) ), transports: [ new transports.Console({ From 63af2b267d941c18d62b1fbdad7513efd1c364e9 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:34:22 +0300 Subject: [PATCH 41/61] c --- app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 69b0ee7..a6b6807 100644 --- a/app.js +++ b/app.js @@ -32,8 +32,9 @@ global.logger = createLogger({ format: combine( errors({stack: true}), timestamp(), - printf(({level, message, timestamp, stack}) => { - return `${timestamp} ${level}: ${message} ${stack}`; + printf((a/* {level, message, timestamp, stack} */) => { + // return `${timestamp} ${level}: ${message} ${stack}`; + return `${a}`; }) ), transports: [ From f72f3ccdae581986403027a4a0a0d685b6aa7ae1 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:35:13 +0300 Subject: [PATCH 42/61] c --- app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app.js b/app.js index a6b6807..b3b2a22 100644 --- a/app.js +++ b/app.js @@ -34,6 +34,7 @@ global.logger = createLogger({ timestamp(), printf((a/* {level, message, timestamp, stack} */) => { // return `${timestamp} ${level}: ${message} ${stack}`; + console.dir(a, {depth: 9}); return `${a}`; }) ), From b7fc5d4990e3b27aa50c5b310992255346168e9c Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:41:35 +0300 Subject: [PATCH 43/61] c --- db/access_tokens.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/access_tokens.js b/db/access_tokens.js index 07f9a66..23321f2 100644 --- a/db/access_tokens.js +++ b/db/access_tokens.js @@ -20,7 +20,7 @@ module.exports.find = (key, done) => { const {userId, clientId} = ltoken; return done(null, {userId, clientId}) } else { - global.logger.log('error', {message: `${new Error('Token Not Found')}`}); + global.logger.log('error', new Error('Token Not Found')); return done(); } }; From ce50a5d1c828eef2cb2358c888cfbdcb8c467d5a Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:44:49 +0300 Subject: [PATCH 44/61] c --- app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index b3b2a22..207dfee 100644 --- a/app.js +++ b/app.js @@ -32,11 +32,11 @@ global.logger = createLogger({ format: combine( errors({stack: true}), timestamp(), - printf((a/* {level, message, timestamp, stack} */) => { - // return `${timestamp} ${level}: ${message} ${stack}`; - console.dir(a, {depth: 9}); - return `${a}`; - }) + // printf((a/* {level, message, timestamp, stack} */) => { + // //console.dir(a, {depth: 9}); + // return `${timestamp} ${level}: ${message}`; + // }) + prettyPrint() ), transports: [ new transports.Console({ From ab64a6a94d1705a950294175240b2197611254a5 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:49:08 +0300 Subject: [PATCH 45/61] c --- app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index 207dfee..f61ee49 100644 --- a/app.js +++ b/app.js @@ -32,11 +32,11 @@ global.logger = createLogger({ format: combine( errors({stack: true}), timestamp(), - // printf((a/* {level, message, timestamp, stack} */) => { - // //console.dir(a, {depth: 9}); - // return `${timestamp} ${level}: ${message}`; - // }) - prettyPrint() + printf(({level, message, timestamp, stack}) => { + //console.dir(a, {depth: 9}); + return `${timestamp} ${level}: ${message} \n ${stack != undefinde ? stack : ''}`; + }) + // prettyPrint() ), transports: [ new transports.Console({ From bc000f717aef95f46a79ee68df977cbe09db912b Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:49:42 +0300 Subject: [PATCH 46/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index f61ee49..ddffedd 100644 --- a/app.js +++ b/app.js @@ -34,7 +34,7 @@ global.logger = createLogger({ timestamp(), printf(({level, message, timestamp, stack}) => { //console.dir(a, {depth: 9}); - return `${timestamp} ${level}: ${message} \n ${stack != undefinde ? stack : ''}`; + return `${timestamp} ${level}: ${message} \n ${stack != undefined ? stack : ''}`; }) // prettyPrint() ), From 3df4d029345237e79aefdfe1739a279b3191a7c2 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 21:52:27 +0300 Subject: [PATCH 47/61] c --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index ddffedd..30309cd 100644 --- a/app.js +++ b/app.js @@ -34,7 +34,7 @@ global.logger = createLogger({ timestamp(), printf(({level, message, timestamp, stack}) => { //console.dir(a, {depth: 9}); - return `${timestamp} ${level}: ${message} \n ${stack != undefined ? stack : ''}`; + return `${timestamp} ${level}: ${stack != undefined ? stack : message}`; }) // prettyPrint() ), From efcff178b6127ca8550ff0f296f8531c567429de Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 22:11:46 +0300 Subject: [PATCH 48/61] Add logging and some code improvement --- app.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app.js b/app.js index 30309cd..669fe23 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,7 @@ const fs = require('fs'); const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); -const {combine, timestamp, printf, errors, prettyPrint} = format; +const {combine, timestamp, printf, errors} = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -33,10 +33,8 @@ global.logger = createLogger({ errors({stack: true}), timestamp(), printf(({level, message, timestamp, stack}) => { - //console.dir(a, {depth: 9}); return `${timestamp} ${level}: ${stack != undefined ? stack : message}`; - }) - // prettyPrint() + }), ), transports: [ new transports.Console({ From 4d2f87be6a98d4fe491e0d58f892fddaa0587ce6 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 22:35:17 +0300 Subject: [PATCH 49/61] Add logging and some code improvement --- app.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app.js b/app.js index 669fe23..f231134 100644 --- a/app.js +++ b/app.js @@ -4,7 +4,6 @@ const fs = require('fs'); const path = require('path'); /* */ const {createLogger, format, transports} = require('winston'); -const {combine, timestamp, printf, errors} = format; /* express and https */ const ejs = require('ejs'); const express = require('express'); @@ -29,10 +28,10 @@ const clArgv = process.argv.slice(2); /* Logging */ global.logger = createLogger({ level: 'info', - format: combine( - errors({stack: true}), - timestamp(), - printf(({level, message, timestamp, stack}) => { + format: format.combine( + format.errors({stack: true}), + format.timestamp(), + format.printf(({level, message, timestamp, stack}) => { return `${timestamp} ${level}: ${stack != undefined ? stack : message}`; }), ), From 07bff61978041f2d55936494ad4a92493100afd8 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Sun, 16 May 2021 23:53:55 +0300 Subject: [PATCH 50/61] Add logging --- db/access_tokens.js | 39 ++++++++++++++++++++++----------------- db/authorization_codes.js | 9 +++++++-- db/clients.js | 7 +++++-- db/users.js | 7 +++++-- device.js | 10 ++++++---- 5 files changed, 45 insertions(+), 27 deletions(-) diff --git a/db/access_tokens.js b/db/access_tokens.js index 23321f2..dacc2c4 100644 --- a/db/access_tokens.js +++ b/db/access_tokens.js @@ -1,5 +1,6 @@ 'use strict'; +const {logger, authl} = global; const loki = require('lokijs'); global.dbl = new loki('./loki.json', { @@ -7,46 +8,50 @@ global.dbl = new loki('./loki.json', { autosave: true, autosaveInterval: 5000, autoloadCallback() { - global.authl = global.dbl.getCollection('tokens'); - if (global.authl === null) { - global.authl = global.dbl.addCollection('tokens'); + authl = global.dbl.getCollection('tokens'); + if (authl === null) { + authl = global.dbl.addCollection('tokens'); } } }); module.exports.find = (key, done) => { - const ltoken = global.authl.findOne({'token': key}); + const ltoken = authl.findOne({'token': key}); if (ltoken){ const {userId, clientId} = ltoken; return done(null, {userId, clientId}) } else { - global.logger.log('error', new Error('Token Not Found')); + logger.log('error', new Error('Token Not Found')); return done(); } }; module.exports.findByUserIdAndClientId = (userId, clientId, done) => { - const ltoken = global.authl.findOne({'userId': userId}); + const ltoken = authl.findOne({'userId': userId}); if (ltoken){ - global.logger.log('info', {message: `Load token by userId (${userId}): User found`}); + logger.log('info', {message: `Load token by userId (${userId}): User found`}); const {token, userId: uid, clientId: cid} = ltoken; - if (uid === userId && cid === clientId) return done(null, token); - else return done(new Error('Token Not Found')); + if (uid === userId && cid === clientId) { + return done(null, token); + } else { + logger.log('error', new Error('Token Not Found')); + return done(); + } } else { - console.log('User not found'); - return done(new Error('User Not Found')); + logger.log('error', new Error('User Not Found')); + return done(); } }; module.exports.save = (token, userId, clientId, done) => { - global.logger.log('info', {message: `Start saving token`}); - const ltoken = global.authl.findOne({'userId': userId}); + logger.log('info', {message: `Start saving token`}); + const ltoken = authl.findOne({'userId': userId}); if (ltoken){ - global.logger.log('info', {message: `User Updated`}); - global.authl.update(Object.assign({}, ltoken, {token, userId, clientId})); + logger.log('info', {message: `User Updated`}); + authl.update(Object.assign({}, ltoken, {token, userId, clientId})); } else { - global.logger.log('info', {message: `User not Found. Create new...`}); - global.authl.insert({'type': 'token', token, userId, clientId}); + logger.log('info', {message: `User not Found. Create new...`}); + authl.insert({'type': 'token', token, userId, clientId}); } done(); }; diff --git a/db/authorization_codes.js b/db/authorization_codes.js index ae37649..c716cf2 100644 --- a/db/authorization_codes.js +++ b/db/authorization_codes.js @@ -1,10 +1,15 @@ 'use strict'; +const {logger} = global; const codes = {}; module.exports.find = (key, done) => { - if (codes[key]) return done(null, codes[key]); - return done(new Error('Code Not Found')); + if (codes[key]) { + return done(null, codes[key]); + } else { + logger.log('error', new Error('Code Not Found')); + return done(); + } }; module.exports.save = (code, clientId, redirectUri, userId, userName, done) => { diff --git a/db/clients.js b/db/clients.js index e49069f..4308a4b 100644 --- a/db/clients.js +++ b/db/clients.js @@ -1,17 +1,20 @@ 'use strict'; +const {logger} = global; const {clients} = require('../config'); module.exports.findById = (id, done) => { for (const client of clients) { if (client.id === id) return done(null, client); } - return done(new Error('Client Not Found')); + logger.log('error', new Error('Client Not Found')); + return done(); }; module.exports.findByClientId = (clientId, done) => { for (const client of clients) { if (client.clientId === clientId) return done(null, client); } - return done(new Error('Client Not Found')); + logger.log('error', new Error('Client Not Found')); + return done(); }; diff --git a/db/users.js b/db/users.js index 906954d..e2bf6a6 100644 --- a/db/users.js +++ b/db/users.js @@ -1,17 +1,20 @@ 'use strict'; +const {logger} = global; const {users} = require('../config'); module.exports.findById = (id, done) => { for (const user of users) { if (user.id === id) return done(null, user); } - return done(new Error('User Not Found')); + logger.log('error', new Error('User Not Found')); + return done(); }; module.exports.findByUsername = (username, done) => { for (const user of users) { if (user.username === username) return done(null, user); } - return done(new Error('User Not Found')); + logger.log('error', new Error('User Not Found')); + return done(); }; diff --git a/device.js b/device.js index 5b0168f..0f3c069 100644 --- a/device.js +++ b/device.js @@ -1,3 +1,5 @@ +const {logger} = global; + /* function for convert system values to Yandex (depends of capability or property type) */ function convertToYandexValue(val, actType) { switch(actType) { @@ -8,7 +10,7 @@ function convertToYandexValue(val, actType) { const value = parseFloat(val); return isNaN(value) ? 0.0 : value; } catch(e) { - console.error(`Can't parse to float: ${val}`); + logger.log('error', {message: `Can't parse to float: ${val}`}); return 0.0; } } @@ -96,7 +98,7 @@ class Device { } } default: { - console.error(`Unsupported capability type: ${type}`) + logger.log('error', {message: `Unsupported capability type: ${type}`}); return undefined; } } @@ -195,7 +197,7 @@ class Device { message = `${value}`; } catch(e) { topic = false; - global.logger.log('error', {message: `${e}`}); + logger.log('error', {message: `${e}`}); } if (topic) { @@ -225,7 +227,7 @@ class Device { const value = this.getMappedValue(val, actType, false); cp.state = {instance, value: convertToYandexValue(value, actType)}; } catch(e) { - global.logger.log('error', {message: `${e}`}); + logger.log('error', {message: `${e}`}); } } } From 198de695280d8dfca28ffea3476b11e480026e63 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:03:25 +0300 Subject: [PATCH 51/61] Update readme --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3d6f00e..3130a5e 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ Прочий функционал (изменение громкости, каналов, отключение звука), поидее, так же должны работать. ## ChangeLog +###### 16.05.2021 +Добавлено логирование некоторых событий. + ###### 13.05.2021 Добавлена поддержка API уведомлений об изменении состояний устройств. @@ -59,7 +62,7 @@ npm start ``` ## Настройка yandex2mqtt -Все основные настройки моста прописываются в файл config.js. Перед запуском обязательно отредактируйте его. +Все основные настройки моста прописываются в файл ~~config.js~~. Перед запуском обязательно отредактируйте его. ``` mv config.orig.js config.js ``` @@ -331,6 +334,9 @@ valueMapping: [ - [Типы умений устройства](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/capability-types.html) - [Типы встроенных датчиков](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/properties-types.html) +## Логирование + + ## Создание службы В папке /etc/systemd/system/ создать файл yandex2mqtt.service со следующим содержанем: ``` @@ -339,7 +345,7 @@ Description=yandex2mqtt After=network.target [Service] -ExecStart=/usr/bin/npm start +ExecStart=/usr/bin/node app.js WorkingDirectory=/opt/yandex2mqtt StandardOutput=inherit StandardError=inherit From 5a70512d8fa3e73d56f0cf1943b18715bd8b3d72 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:05:14 +0300 Subject: [PATCH 52/61] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3130a5e..281d21d 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ npm start ``` ## Настройка yandex2mqtt -Все основные настройки моста прописываются в файл ~~config.js~~. Перед запуском обязательно отредактируйте его. +Все основные настройки моста прописываются в файл . Перед запуском обязательно отредактируйте его. ``` mv config.orig.js config.js ``` From 5b48706153f4fbb6550727db14c0f5594d129a65 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:06:04 +0300 Subject: [PATCH 53/61] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 281d21d..1e59608 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ npm start ``` ## Настройка yandex2mqtt -Все основные настройки моста прописываются в файл . Перед запуском обязательно отредактируйте его. +Все основные настройки моста прописываются в файл `config.js`. Перед запуском обязательно отредактируйте его. ``` mv config.orig.js config.js ``` From 6c07dd726ddcccdf5fab2ceac1a0a90d39496efe Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:21:13 +0300 Subject: [PATCH 54/61] Add logging and some code improvement --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index f231134..94e9496 100644 --- a/app.js +++ b/app.js @@ -42,7 +42,7 @@ global.logger = createLogger({ ], }); -if (clArgv.indexOf('--log-error') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); +if (clArgv.indexOf('--log-errors') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); /* */ app.engine('ejs', ejs.__express); From f375a0b75516e3b43c53776c42e48834334a94bd Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:22:39 +0300 Subject: [PATCH 55/61] Add logging and some code improvement --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1e59608..67bfc32 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Форк [Проекта](https://github.com/munrexio/yandex2mqtt) и [Статья на Хабре](https://habr.com/ru/post/465537/) к оригиналу. ## Важно -Те, кто пользуется оригинальным проектом (или его форками), обратите внимание на то, что немного изменились настройки устройств (блок **devices** в файле конфигурации). +Те, кто пользуется оригинальным проектом (или его форками), обратите внимание на то, что немного изменились настройки устройств (блок `devices` в файле конфигурации). На данный момент проверено получение температуры и влажности с датчиков (датчики дверей и движения пока в бета-тесте), и включение/выключение света (вкл./выкл. других устройств по аналогии тоже должно работать). @@ -23,7 +23,7 @@ ###### Release Проведён рефакторинг кода и, местами, внесены значительные правки. -Добавлена поддержка датчиков (устройств **devices.types.sensor**) +Добавлена поддержка датчиков (устройств `devices.types.sensor`) ## Требования - **"Белый" IP адрес и домен**. Если нет своего домена и белого IP адреса можно воспользоваться Dynamic DNS сервисами (например, noip.com). @@ -305,7 +305,7 @@ notification: [ Если к yandex2mqtt "подключено" несколько навыков УД, то в массиве необходимо указать настройки для каждого навыка УД, который должен получать уведомления. -skill_id (идентификатор вызываемого навыка, присвоенный при создании) и oauth_token (авторизационный токен владельца навыка) можно узнать из документации на [Уведомление об изменении состояний устройств](https://yandex.ru/dev/dialogs/smart-home/doc/reference-alerts/post-skill_id-callback-state.html), а user_id - id пользователя в файле конфигурации yandex2mqtt. +`skill_id` (идентификатор вызываемого навыка, присвоенный при создании) и `oauth_token` (авторизационный токен владельца навыка) можно узнать из документации на [Уведомление об изменении состояний устройств](https://yandex.ru/dev/dialogs/smart-home/doc/reference-alerts/post-skill_id-callback-state.html), а `user_id` - id пользователя в файле конфигурации yandex2mqtt. *Важно. Уведомления будут отправляться при изменнии mqtt топика хранящего состояние устройства. Соответственно, если для устройства не задан топик state, то уведомление для устройтва отправляться не будет.* @@ -313,10 +313,10 @@ skill_id (идентификатор вызываемого навыка, при #### Разрешенные пользователи для устройств (allowedUsers) В блоке конфигурации можно указать пользователей (id пользователей), для которых будет доступно устройство. -В опции allowedUsers указыватся массив (строковых значений) id. Если данная опция не указана, то для неё будет назначено значение ['1']; +В опции `allowedUsers` указыватся массив (строковых значений) id. Если данная опция не указана, то для неё будет назначено значение ['1']; #### Mapping значений -Блок valueMapping позволяет настроить конвертацию значений между yandex api и MQTT. Это может быть актуально для умений типа **devices.capabilities.on_off** и **devices.capabilities.toggle**. +Блок valueMapping позволяет настроить конвертацию значений между yandex api и MQTT. Это может быть актуально для умений типа `devices.capabilities.on_off` и `devices.capabilities.toggle`. *Например, если в УД состояние влючено/выключено соответствует значениям 1/0, то Вам понадобиться их конвертировать, т.к. в навыках Yandex значения true/false.* ``` @@ -335,10 +335,10 @@ valueMapping: [ - [Типы встроенных датчиков](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/properties-types.html) ## Логирование - +Добавлено две "стратегии" логирования: логироване сообщений об ощибках в файл `log/errors.log` (аргумент запуска `--log-errors`) и логирование всех сообщений в консоль (`--log-info`). ## Создание службы -В папке /etc/systemd/system/ создать файл yandex2mqtt.service со следующим содержанем: +В папке `/etc/systemd/system/` создать файл `yandex2mqtt.service` со следующим содержанем: ``` [Unit] Description=yandex2mqtt From 0cbb90ba1e8f5fa5c8186b24e87e739414626301 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:22:51 +0300 Subject: [PATCH 56/61] Add logging and some code improvement --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 94e9496..f74acd6 100644 --- a/app.js +++ b/app.js @@ -42,7 +42,7 @@ global.logger = createLogger({ ], }); -if (clArgv.indexOf('--log-errors') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); +if (clArgv.indexOf('--log-errors') > -1) global.logger.add(new transports.File({filename: 'log/errors.log', level: 'error'})); /* */ app.engine('ejs', ejs.__express); From 6471a0d6aaf2df9af2b98329dc1ed21235af84fb Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:26:02 +0300 Subject: [PATCH 57/61] Add logging and some code improvement --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 67bfc32..82814ef 100644 --- a/README.md +++ b/README.md @@ -335,7 +335,8 @@ valueMapping: [ - [Типы встроенных датчиков](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/properties-types.html) ## Логирование -Добавлено две "стратегии" логирования: логироване сообщений об ощибках в файл `log/errors.log` (аргумент запуска `--log-errors`) и логирование всех сообщений в консоль (`--log-info`). +Добавлено две "стратегии" логирования: логироване сообщений об ощибках в файл `log/error.log` (аргумент запуска `--log-error`) и логирование всех сообщений в консоль (`--log-info`). +Для запуска y2m с логирование нужно добавить аргумент запуска в команду запуска в файле настройки служба (**раздел ниже**) или запускать из консоли. ## Создание службы В папке `/etc/systemd/system/` создать файл `yandex2mqtt.service` со следующим содержанем: @@ -345,7 +346,7 @@ Description=yandex2mqtt After=network.target [Service] -ExecStart=/usr/bin/node app.js +ExecStart=/usr/bin/node app.js --log-error WorkingDirectory=/opt/yandex2mqtt StandardOutput=inherit StandardError=inherit From 28226e490427f06c2bb206d99d19a16fcea11807 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:26:08 +0300 Subject: [PATCH 58/61] Add logging and some code improvement --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index f74acd6..f231134 100644 --- a/app.js +++ b/app.js @@ -42,7 +42,7 @@ global.logger = createLogger({ ], }); -if (clArgv.indexOf('--log-errors') > -1) global.logger.add(new transports.File({filename: 'log/errors.log', level: 'error'})); +if (clArgv.indexOf('--log-error') > -1) global.logger.add(new transports.File({filename: 'log/error.log', level: 'error'})); /* */ app.engine('ejs', ejs.__express); From 23152a9d38ba7aa19c974249e80ef1d18d41b179 Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:27:17 +0300 Subject: [PATCH 59/61] Update documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82814ef..73f5dfe 100644 --- a/README.md +++ b/README.md @@ -335,7 +335,7 @@ valueMapping: [ - [Типы встроенных датчиков](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/properties-types.html) ## Логирование -Добавлено две "стратегии" логирования: логироване сообщений об ощибках в файл `log/error.log` (аргумент запуска `--log-error`) и логирование всех сообщений в консоль (`--log-info`). +Добавлено две "стратегии" логирования: сообщений об ощибках в файл `log/error.log` (аргумент запуска `--log-error`) и всех сообщений в консоль (`--log-info`). Для запуска y2m с логирование нужно добавить аргумент запуска в команду запуска в файле настройки служба (**раздел ниже**) или запускать из консоли. ## Создание службы From a9a1621ac9e95f5fc8e69db26b8e9cdf51d2829a Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:31:28 +0300 Subject: [PATCH 60/61] Update documentation --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 73f5dfe..f73c318 100644 --- a/README.md +++ b/README.md @@ -335,8 +335,8 @@ valueMapping: [ - [Типы встроенных датчиков](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/properties-types.html) ## Логирование -Добавлено две "стратегии" логирования: сообщений об ощибках в файл `log/error.log` (аргумент запуска `--log-error`) и всех сообщений в консоль (`--log-info`). -Для запуска y2m с логирование нужно добавить аргумент запуска в команду запуска в файле настройки служба (**раздел ниже**) или запускать из консоли. +Добавлено две "стратегии" логирования: сообщений об ошибках в файл `log/error.log` (аргумент запуска `--log-error`) и всех сообщений в консоль (`--log-info`). +Для запуска y2m с логирование необходимо добавить аргумент запуска в команду запуска в файле настройки служба (**раздел ниже**) или запустить из консоли. ## Создание службы В папке `/etc/systemd/system/` создать файл `yandex2mqtt.service` со следующим содержанем: From bfdce6970b58ddb0bc0184f418435e26f1200c9e Mon Sep 17 00:00:00 2001 From: Evgenii Abramov Date: Mon, 17 May 2021 00:31:55 +0300 Subject: [PATCH 61/61] Update documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f73c318..e09d1bd 100644 --- a/README.md +++ b/README.md @@ -291,7 +291,7 @@ devices: [ #### Уведомление об изменении состояний устройств Платформа УД Яндекс предоставляет сервис уведомлений об изменении состояний устройств. При изменении состояния устройства (например, изменение влажности) yandex2mqtt будет отправлять запрос с новым состоянием. -В настройках предусмотрен блок **notification**. +В настройках предусмотрен блок `notification`. ``` notification: [