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