mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Pushover image attachment feature (#509)
* Bugfix: node defaults not applying to messages * Implemented pushover attachment feature
This commit is contained in:
		| @@ -79,6 +79,7 @@ | ||||
|     <p><code>msg.topic</code>: set the title</p> | ||||
|     <p><code>msg.device</code>: set the device</p> | ||||
|     <p><code>msg.priority</code>: set the priority</p> | ||||
|     <p><code>msg.attachment</code>: attach an image (Buffer or file path)</p> | ||||
|     <p><code>msg.url</code>: to add a web address</p> | ||||
| 	<p><code>msg.url_title</code>: to add a url title if not already set in the properties</p> | ||||
| 	<p><code>msg.sound</code>: set the notification sound, <i><a href="https://pushover.net/api#sounds" target="_new">see the available options</a></i></p> | ||||
|   | ||||
| @@ -3,6 +3,7 @@ module.exports = function(RED) { | ||||
|     "use strict"; | ||||
|     var PushOver = require('pushover-notifications'); | ||||
|     var util = require('util'); | ||||
|     var fs = require('fs'); | ||||
|  | ||||
|     function PushoverNode(n) { | ||||
|         RED.nodes.createNode(this,n); | ||||
| @@ -30,13 +31,14 @@ module.exports = function(RED) { | ||||
|         var node = this; | ||||
|  | ||||
|         this.on("input",function(msg) { | ||||
|             var titl = this.title || msg.topic || "Node-RED"; | ||||
|             var pri = this.priority || msg.priority || 0; | ||||
|             var dev = this.device || msg.device; | ||||
|             var sound = this.sound || msg.sound || null; | ||||
|             var url = this.url || msg.url || null; | ||||
|             var url_title = this.url_title || msg.url_title || null; | ||||
|             var html = this.html || false; | ||||
|             var title = node.title || msg.topic || "Node-RED"; | ||||
|             var pri = node.priority || msg.priority || 0; | ||||
|             var dev = node.device || msg.device; | ||||
|             var sound = node.sound || msg.sound || null; | ||||
|             var url = node.url || msg.url || null; | ||||
|             var url_title = node.url_title || msg.url_title || null; | ||||
|             var html = node.html || false; | ||||
|             var attachment = msg.attachment || null; | ||||
|             if (isNaN(pri)) {pri=0;} | ||||
|             if (pri > 2) {pri = 2;} | ||||
|             if (pri < -2) {pri = -2;} | ||||
| @@ -47,7 +49,7 @@ module.exports = function(RED) { | ||||
|             if (pusher) { | ||||
|                 var pushmsg = { | ||||
|                     message: msg.payload, | ||||
|                     title: titl, | ||||
|                     title: title, | ||||
|                     priority: pri, | ||||
|                     retry: 30, | ||||
|                     expire: 600, | ||||
| @@ -58,16 +60,50 @@ module.exports = function(RED) { | ||||
|                 if (typeof(url) === 'string') { pushmsg.url = url; } | ||||
|                 if (typeof(url_title) === 'string') { pushmsg.url_title = url_title; } | ||||
|                 if (html) { pushmsg.html = 1; } | ||||
|                 //node.log("Sending "+JSON.stringify(pushmsg)); | ||||
|                 pusher.send( pushmsg, function(err, response) { | ||||
|                     if (err) { node.error("Pushover Error: "+err); } | ||||
|                     //console.log(response); | ||||
|                 }); | ||||
|                 if (typeof(attachment) === 'string') { | ||||
|                     // Treat attachment as a path | ||||
|                     fs.readFile(attachment,function(err, data) { | ||||
|                         if (err) { | ||||
|                             node.error("[57-pushover.js] Error: File Read Error: "+err); | ||||
|                             return; | ||||
|                         } | ||||
|                         pushmsg.file = { data: data }; | ||||
|                         pushMessage(pushmsg); | ||||
|                     }); | ||||
|                     return; | ||||
|                 } | ||||
|                 else if (attachment instanceof Buffer) { | ||||
|                     // Is it base64 encoded or binary? | ||||
|                     var attachmentString = attachment.toString(); | ||||
|                     var attachmentBuffer = Buffer.from(attachmentString,'base64'); | ||||
|                     if(attachmentString === attachmentBuffer.toString('base64')) { | ||||
|                         // If converts back to same, then it was base64 so set to binary | ||||
|                         // https://stackoverflow.com/a/48770228 | ||||
|                         attachment = attachmentBuffer; | ||||
|                     } | ||||
|                     // Unset these temporary values | ||||
|                     attachmentBuffer = attachmentString = undefined; | ||||
|                     // attach the buffer | ||||
|                     pushmsg.file = { data: attachment }; | ||||
|                 } | ||||
|                 else if (attachment) { | ||||
|                     node.error("[57-pushover.js] Error: attachment property must be a path to a local file or a Buffer containing an image"); | ||||
|                     return; | ||||
|                 } | ||||
|                 pushMessage(pushmsg); | ||||
|             } | ||||
|             else { | ||||
|                 node.warn("Pushover credentials not set."); | ||||
|             } | ||||
|         }); | ||||
|  | ||||
|         function pushMessage(pushmsg) { | ||||
|             pusher.send( pushmsg, function(err, response) { | ||||
|                 if (err) { node.error("[57-pushover.js] Error: "+err); } | ||||
|                 response = JSON.parse(response); | ||||
|                 if (response.status !== 1) { node.error("[57-pushover.js] Error: "+response); } | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
|     RED.nodes.registerType("pushover",PushoverNode,{ | ||||
|         credentials: { | ||||
|   | ||||
| @@ -21,6 +21,7 @@ Optionally uses `msg.topic` to set the configuration, if not already set in the | ||||
|  - `msg.device`: to set the device | ||||
|  - `msg.priority`: to set the priority | ||||
|  - `msg.topic`: to set the title | ||||
|  - `msg.attachment`: to specify an image to attach to message (path as a string or Buffer containing image) | ||||
|  - `msg.url`: to add a web address | ||||
|  - `msg.url_title`: to add a url title | ||||
|  - `msg.sound`: to set the alert sound, see the [available options](https://pushover.net/api#sounds) | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| { | ||||
|     "name"          : "node-red-node-pushover", | ||||
|     "version"       : "0.0.13", | ||||
|     "version"       : "0.0.14", | ||||
|     "description"   : "A Node-RED node to send alerts via Pushover", | ||||
|     "dependencies"  : { | ||||
|         "pushover-notifications"   : "~0.2.4" | ||||
|         "pushover-notifications"   : "^1.2.0" | ||||
|     }, | ||||
|     "repository" : { | ||||
|         "type":"git", | ||||
| @@ -20,5 +20,12 @@ | ||||
|         "name": "Dave Conway-Jones", | ||||
|         "email": "ceejay@vnet.ibm.com", | ||||
|         "url": "http://nodered.org" | ||||
|     } | ||||
|     }, | ||||
|     "contributors": [ | ||||
|         { | ||||
|             "name": "Damien Clark", | ||||
|             "email": "damo.clarky@gmail.com", | ||||
|             "url": "https://damos.world" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user