-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathservice.js
More file actions
73 lines (59 loc) · 2.01 KB
/
service.js
File metadata and controls
73 lines (59 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
var utilAquila = require('./utilAquila');
module.exports = function(RED) {
function serviceNode(config) {
RED.nodes.createNode(this, config);
var self = this;
self.server = RED.nodes.getNode(config.server);
self.device = utilAquila.normalizeAddr(config.device);
self.method = config.method;
self.serviceName = config.serviceName;
if (self.server)
{
// Mark initial status as disconnected
self.status({fill:"red",shape:"ring",text:"disconnected"});
self.server.on('tokenReady', function(token)
{
// Mark as connected
self.status({fill:"green",shape:"dot",text:"connected"});
self.token = token;
var httpStr = "http://";
if(self.server.secure) httpStr = "https://";
self.url = httpStr + self.server.host + ':' + self.server.port + '/' +
'api/devices/' + self.device + '/service/' + self.serviceName;
var request = require('request');
self.on('input', function(msg)
{
var bodyObject = {};
if(typeof(msg.payload) === 'object') bodyObject = msg.payload;
try {
var body = JSON.stringify(bodyObject);
}
catch(err) {
return console.log("node-red-aquila: JSON Parsing Error:", err);
}
request({
url: self.url,
method : self.method,
headers : {
'Content-Type' : 'application/json',
'Authorization' : 'Bearer ' + self.token
},
body: body
}, function (error, response, body){
if (error) {
return console.log("node-red-aquila: There was an error with the request: ", error);
} else {
var msg = { payload: body };
return self.send(msg);
}
});
});
});
}
else
{
console.log("node-red-aquila: Server undefined");
}
}
RED.nodes.registerType("service", serviceNode);
}