Update main.js

This commit is contained in:
2018-09-25 10:24:46 +08:00
parent ef734419de
commit 6ba151e30a
+141 -139
View File
@@ -1,139 +1,141 @@
/** /**
* *
* yunkong2 pushover Adapter * yunkong2 pushover Adapter
* *
* (c) 2014-2018 bluefox * (c) 2014-2018 bluefox
* *
* MIT License * MIT License
* *
*/ */
/* jshint -W097 */// jshint strict:false /* jshint -W097 */// jshint strict:false
/*jslint node: true */ /*jslint node: true */
'use strict'; 'use strict';
const utils = require(__dirname + '/lib/utils'); // Get common adapter utils const utils = require(__dirname + '/lib/utils'); // Get common adapter utils
const Pushover = require('pushover-notifications'); const Pushover = require('pushover-notifications');
const adapter = new utils.Adapter('pushover'); const adapter = new utils.Adapter('pushover');
adapter.on('message', obj => { adapter.on('message', obj => {
if (obj && obj.command === 'send') { if (obj && obj.command === 'send') {
processMessage(obj); processMessage(obj);
} }
processMessages(); processMessages();
}); });
adapter.on('ready', main); adapter.on('ready', main);
let stopTimer = null; let stopTimer = null;
let pushover; let pushover;
let lastMessageTime = 0; let lastMessageTime = 0;
let lastMessageText = ''; let lastMessageText = '';
// Terminate adapter after 30 seconds idle // Terminate adapter after 30 seconds idle
function stop() { function stop() {
if (stopTimer) { if (stopTimer) {
clearTimeout(stopTimer); clearTimeout(stopTimer);
} }
// Stop only if subscribe mode // Stop only if subscribe mode
if (adapter.common && adapter.common.mode === 'subscribe') { if (adapter.common && adapter.common.mode === 'subscribe') {
stopTimer = setTimeout(() => { stopTimer = setTimeout(() => {
stopTimer = null; stopTimer = null;
adapter.stop(); adapter.stop();
}, 30000); }, 30000);
} }
} }
function processMessage(obj) { function processMessage(obj) {
if (!obj || !obj.message) return; if (!obj || !obj.message) return;
// filter out double messages // filter out double messages
const json = JSON.stringify(obj.message); const json = JSON.stringify(obj.message);
if (lastMessageTime && lastMessageText === JSON.stringify(obj.message) && new Date().getTime() - lastMessageTime < 1000) { if (lastMessageTime && lastMessageText === JSON.stringify(obj.message) && new Date().getTime() - lastMessageTime < 1000) {
adapter.log.debug('Filter out double message [first was for ' + (new Date().getTime() - lastMessageTime) + 'ms]: ' + json); adapter.log.debug('Filter out double message [first was for ' + (new Date().getTime() - lastMessageTime) + 'ms]: ' + json);
return; return;
} }
lastMessageTime = new Date().getTime(); lastMessageTime = new Date().getTime();
lastMessageText = json; lastMessageText = json;
if (stopTimer) clearTimeout(stopTimer); if (stopTimer) clearTimeout(stopTimer);
sendNotification(obj.message, (err, response) => { sendNotification(obj.message, (err, response) => {
if (obj.callback) adapter.sendTo(obj.from, 'send', { error: err, response: response}, obj.callback); if (obj.callback) adapter.sendTo(obj.from, 'send', { error: err, response: response}, obj.callback);
}); });
stop(); stop();
} }
function processMessages() { function processMessages() {
adapter.getMessage((err, obj) => { adapter.getMessage((err, obj) => {
if (obj) { if (obj) {
processMessage(obj); processMessage(obj);
processMessages(); processMessages();
} }
}); });
} }
function main() { function main() {
// Adapter is started only if some one writes into "system.adapter.pushover.X.messagebox" new value // Adapter is started only if some one writes into "system.adapter.pushover.X.messagebox" new value
processMessages(); processMessages();
stop(); stop();
} }
function sendNotification(message, callback) { function sendNotification(message, callback) {
if (!message) message = {}; if (!message) message = {};
if (!pushover) { if (!pushover) {
if (adapter.config.user && adapter.config.token) { if (adapter.config.user && adapter.config.token) {
pushover = new Pushover({ pushover = new Pushover({
user: adapter.config.user, user: adapter.config.user,
token: adapter.config.token token: adapter.config.token
}); });
} else { } else {
adapter.log.error('Cannot send notification while not configured'); adapter.log.error('Cannot send notification while not configured');
} }
} }
if (!pushover) return; if (!pushover) return;
if (typeof message !== 'object') { if (typeof message !== 'object') {
message = {message: message}; message = {message: message};
} }
if (message.hasOwnProperty('token')) { if (message.hasOwnProperty('token')) {
pushover.token = message.token pushover.token = message.token
} else { } else {
pushover.token = adapter.config.token pushover.token = adapter.config.token
} }
message.title = message.title || adapter.config.title; message.title = message.title || adapter.config.title;
message.sound = message.sound || (adapter.config.sound ? adapter.config.sound : undefined); message.sound = message.sound || (adapter.config.sound ? adapter.config.sound : undefined);
message.priority = message.priority || adapter.config.priority; message.priority = message.priority || adapter.config.priority;
message.url = message.url || adapter.config.url; message.url = message.url || adapter.config.url;
message.url_title = message.url_title || adapter.config.url_title; message.url_title = message.url_title || adapter.config.url_title;
message.device = message.device || adapter.config.device; message.device = message.device || adapter.config.device;
message.message = message.message || ''; message.message = message.message || '';
// if timestamp in ms => make seconds // if greater than 2000.01.01 00:00:00 // if timestamp in ms => make seconds // if greater than 2000.01.01 00:00:00
if (message.timestamp && message.timestamp > 946681200000) { if (message.timestamp && message.timestamp > 946681200000) {
message.timestamp = Math.round(message.timestamp / 1000); message.timestamp = Math.round(message.timestamp / 1000);
} }
// mandatory parameters if priority is high (2) // mandatory parameters if priority is high (2)
if (message.priority === 2) { if (message.priority === 2) {
message.retry = parseInt(message.retry, 10) || 60; message.retry = parseInt(message.retry, 10) || 60;
message.expire = parseInt(message.expire, 10) || 3600; message.expire = parseInt(message.expire, 10) || 3600;
} }
adapter.log.info('Send pushover notification: ' + JSON.stringify(message)); adapter.log.info('Send pushover notification: ' + JSON.stringify(message));
pushover.send(message, (err, result) => { /*
if (err) { pushover.send(message, (err, result) => {
adapter.log.error('Cannot send notification: ' + JSON.stringify(err)); if (err) {
if (callback) callback(err); adapter.log.error('Cannot send notification: ' + JSON.stringify(err));
return false; if (callback) callback(err);
} else { return false;
if (callback) callback(null, result); } else {
return true; if (callback) callback(null, result);
} return true;
}); }
} });
*/
}