node-red-contrib-deconz
Advanced tools
Comparing version 0.9.1 to 0.10.0
@@ -42,9 +42,8 @@ var request = require('request'); | ||
if (controller && controller.constructor.name === "ServerNode") { | ||
controller.getDeviceMeta(function (items) { | ||
if (items) { | ||
res.json(items.state); | ||
} else { | ||
res.status(404).end(); | ||
} | ||
}, config.uniqueid); | ||
var item = controller.getDevice(config.uniqueid); | ||
if (item) { | ||
res.json(item.state); | ||
} else { | ||
res.status(404).end(); | ||
} | ||
} else { | ||
@@ -51,0 +50,0 @@ res.status(404).end(); |
@@ -11,11 +11,16 @@ module.exports = function(RED) { | ||
node.server = RED.nodes.getNode(node.config.server); | ||
if (!node.server) { | ||
if (node.server) { | ||
node.server.on('onClose', () => this.onClose()); | ||
node.server.on('onSocketError', () => this.onSocketError()); | ||
node.server.on('onSocketClose', () => this.onSocketClose()); | ||
node.server.on('onSocketOpen', () => this.onSocketOpen()); | ||
node.server.on('onSocketPongTimeout', () => this.onSocketPongTimeout()); | ||
node.server.on('onNewDevice', (uniqueid) => this.onNewDevice(uniqueid)); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Server node error' | ||
text: 'server node error' | ||
}); | ||
} | ||
node.sendLastState(); | ||
} | ||
@@ -73,19 +78,18 @@ | ||
if (typeof (node.config.device) == 'string' && node.config.device.length) { | ||
node.server.getDeviceMeta(function (deviceMeta) { | ||
if (deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
node.meta = deviceMeta; | ||
if (node.config.outputAtStartup) { | ||
setTimeout(function(){ | ||
node.sendState(deviceMeta); | ||
}, 1500); //we need this timeout after restart of node-red (homekit delays) | ||
} | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Device not found' | ||
}); | ||
var deviceMeta = node.server.getDevice(node.config.device); | ||
if (deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
node.meta = deviceMeta; | ||
if (node.config.outputAtStartup) { | ||
setTimeout(function(){ | ||
node.sendState(deviceMeta); | ||
}, 1500); //we need this timeout after restart of node-red (homekit delays) | ||
} | ||
}, node.config.device); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
} else { | ||
@@ -95,3 +99,3 @@ node.status({ | ||
shape: "dot", | ||
text: 'Device not set' | ||
text: 'device not set' | ||
}); | ||
@@ -120,2 +124,42 @@ } | ||
onSocketPongTimeout() { | ||
var node = this; | ||
node.onSocketError(); | ||
} | ||
onSocketError() { | ||
var node = this; | ||
node.status({ | ||
fill: "yellow", | ||
shape: "dot", | ||
text: 'reconnecting...' | ||
}); | ||
} | ||
onClose() { | ||
var node = this; | ||
node.onSocketClose(); | ||
} | ||
onSocketClose() { | ||
var node = this; | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
onSocketOpen() { | ||
var node = this; | ||
node.sendLastState(); | ||
} | ||
onNewDevice(uniqueid) { | ||
var node = this; | ||
if (node.config.device === uniqueid) { | ||
node.sendLastState(); | ||
} | ||
} | ||
} | ||
@@ -122,0 +166,0 @@ RED.nodes.registerType('deconz-battery', deConzItemBattery); |
@@ -13,10 +13,17 @@ module.exports = function(RED) { | ||
node.server = RED.nodes.getNode(node.config.server); | ||
if (!node.server) { | ||
if (node.server) { | ||
node.server.devices[node.id] = 'event'; | ||
node.server.on('onClose', () => this.onClose()); | ||
node.server.on('onSocketError', () => this.onSocketError()); | ||
node.server.on('onSocketClose', () => this.onSocketClose()); | ||
node.server.on('onSocketOpen', () => this.onSocketOpen()); | ||
node.server.on('onSocketPongTimeout', () => this.onSocketPongTimeout()); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Server node error' | ||
text: 'server node error' | ||
}); | ||
} | ||
node.server.devices[node.id] = 'event'; | ||
@@ -28,6 +35,41 @@ node.sendLastState(); | ||
sendLastState() { | ||
this.status({}); | ||
var node = this; | ||
node.status({}); | ||
} | ||
onSocketPongTimeout() { | ||
var node = this; | ||
node.onSocketError(); | ||
} | ||
onSocketError() { | ||
var node = this; | ||
node.status({ | ||
fill: "yellow", | ||
shape: "dot", | ||
text: 'reconnecting...' | ||
}); | ||
} | ||
onClose() { | ||
var node = this; | ||
node.onSocketClose(); | ||
} | ||
onSocketClose() { | ||
var node = this; | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
onSocketOpen() { | ||
var node = this; | ||
node.sendLastState(); | ||
} | ||
} | ||
RED.nodes.registerType('deconz-event', deConzItemEvent); | ||
}; |
@@ -13,7 +13,9 @@ module.exports = function(RED) { | ||
node.server = RED.nodes.getNode(node.config.server); | ||
if (!node.server) { | ||
if (node.server) { | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Server node error' | ||
text: 'server node error' | ||
}); | ||
@@ -29,48 +31,48 @@ } | ||
node.server.getDeviceMeta(function(deviceMeta){ | ||
if (deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
var deviceMeta = node.server.getDevice(node.config.device); | ||
node.meta = deviceMeta; | ||
if (deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
node.meta = deviceMeta; | ||
//status | ||
if ("state" in deviceMeta && "reachable" in deviceMeta.state && deviceMeta.state.reachable === false) { | ||
node.status({ | ||
fill: "red", | ||
shape: "ring", | ||
text: "not reachable" | ||
}); | ||
} else if ("config" in deviceMeta && "reachable" in deviceMeta.config && deviceMeta.config.reachable === false) { | ||
node.status({ | ||
fill: "red", | ||
shape: "ring", | ||
text: "not reachable" | ||
}); | ||
} else { | ||
node.status({ | ||
fill: "green", | ||
shape: "dot", | ||
text: (config.state in node.meta.state)?(node.meta.state[config.state]?node.meta.state[config.state]:'false'):"received", | ||
}); | ||
node.send({ | ||
payload:(config.state in node.meta.state)?node.meta.state[config.state]:node.meta.state, | ||
meta:deviceMeta, | ||
}); | ||
} | ||
node.cleanTimer = setTimeout(function(){ | ||
node.status({}); //clean | ||
}, 3000); | ||
//status | ||
if ("state" in deviceMeta && "reachable" in deviceMeta.state && deviceMeta.state.reachable === false) { | ||
node.status({ | ||
fill: "red", | ||
shape: "ring", | ||
text: "not reachable" | ||
}); | ||
} else if ("config" in deviceMeta && "reachable" in deviceMeta.config && deviceMeta.config.reachable === false) { | ||
node.status({ | ||
fill: "red", | ||
shape: "ring", | ||
text: "not reachable" | ||
}); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
fill: "green", | ||
shape: "dot", | ||
text: 'Device not found' | ||
text: (config.state in node.meta.state)?(node.meta.state[config.state]?node.meta.state[config.state]:'false'):"received", | ||
}); | ||
node.send({ | ||
payload:(config.state in node.meta.state)?node.meta.state[config.state]:node.meta.state, | ||
meta:deviceMeta, | ||
}); | ||
} | ||
}, node.config.device); | ||
node.cleanTimer = setTimeout(function(){ | ||
node.status({}); //clean | ||
}, 3000); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Device not found' | ||
}); | ||
} | ||
}); | ||
@@ -77,0 +79,0 @@ } else { |
115
nodes/in.js
@@ -11,11 +11,16 @@ module.exports = function(RED) { | ||
node.server = RED.nodes.getNode(node.config.server); | ||
if (!node.server) { | ||
if (node.server) { | ||
node.server.on('onClose', () => this.onClose()); | ||
node.server.on('onSocketError', () => this.onSocketError()); | ||
node.server.on('onSocketClose', () => this.onSocketClose()); | ||
node.server.on('onSocketOpen', () => this.onSocketOpen()); | ||
node.server.on('onSocketPongTimeout', () => this.onSocketPongTimeout()); | ||
node.server.on('onNewDevice', (uniqueid) => this.onNewDevice(uniqueid)); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Server node error' | ||
text: 'server node error' | ||
}); | ||
} | ||
node.sendLastState(); | ||
} | ||
@@ -27,23 +32,22 @@ | ||
if (typeof (node.config.device) == 'string' && node.config.device.length) { | ||
node.server.getDeviceMeta(function (deviceMeta) { | ||
if (deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
node.meta = deviceMeta; | ||
if (node.config.outputAtStartup) { | ||
setTimeout(function () { | ||
node.sendState(deviceMeta); | ||
}, 1500); //we need this timeout after restart of node-red (homekit delays) | ||
} else { | ||
setTimeout(function () { | ||
node.status({}); //clean | ||
}, 1500); //update status with the same delay | ||
} | ||
var deviceMeta = node.server.getDevice(node.config.device); | ||
if (deviceMeta !== undefined && deviceMeta && "uniqueid" in deviceMeta) { | ||
node.server.devices[node.id] = deviceMeta.uniqueid; | ||
node.meta = deviceMeta; | ||
if (node.config.outputAtStartup) { | ||
setTimeout(function () { | ||
node.sendState(deviceMeta); | ||
}, 1500); //we need this timeout after restart of node-red (homekit delays) | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Device not found' | ||
}); | ||
setTimeout(function () { | ||
node.status({}); //clean | ||
}, 1500); //update status with the same delay | ||
} | ||
}, node.config.device); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
} else { | ||
@@ -53,3 +57,3 @@ node.status({ | ||
shape: "dot", | ||
text: 'Device not set' | ||
text: 'device not set' | ||
}); | ||
@@ -63,4 +67,4 @@ } | ||
if (device.state === undefined) { | ||
console.log("CODE: #66"); | ||
console.log(device); | ||
// console.log("CODE: #66"); | ||
// console.log(device); | ||
} else { | ||
@@ -99,3 +103,3 @@ //status | ||
formatHomeKit(device) { | ||
formatHomeKit(device, options) { | ||
var state = device.state; | ||
@@ -110,2 +114,5 @@ var config = device.config; | ||
} | ||
if (options !== undefined && "reachable" in options && !options['reachable']) { | ||
no_reponse = true; | ||
} | ||
@@ -237,2 +244,56 @@ var msg = {}; | ||
} | ||
onSocketPongTimeout() { | ||
var node = this; | ||
node.onSocketError(); | ||
} | ||
onSocketError() { | ||
var node = this; | ||
node.status({ | ||
fill: "yellow", | ||
shape: "dot", | ||
text: 'reconnecting...' | ||
}); | ||
//send NO_RESPONSE | ||
var deviceMeta = node.server.getDevice(node.config.device); | ||
if (deviceMeta) { | ||
node.send([ | ||
null, | ||
node.formatHomeKit(deviceMeta, {reachable:false}) | ||
]); | ||
} | ||
} | ||
onClose() { | ||
var node = this; | ||
node.onSocketClose(); | ||
} | ||
onSocketClose() { | ||
var node = this; | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
onSocketOpen() { | ||
var node = this; | ||
node.sendLastState(); | ||
} | ||
onNewDevice(uniqueid) { | ||
var node = this; | ||
if (node.config.device === uniqueid) { | ||
node.sendLastState(); | ||
} | ||
} | ||
} | ||
@@ -239,0 +300,0 @@ RED.nodes.registerType('deconz-input', deConzItemIn); |
106
nodes/out.js
@@ -13,7 +13,9 @@ var request = require('request'); | ||
node.server = RED.nodes.getNode(node.config.server); | ||
if (!node.server) { | ||
if (node.server) { | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Server node error' | ||
text: 'server node error' | ||
}); | ||
@@ -28,3 +30,3 @@ } | ||
if (typeof(config.device) == 'string' && config.device.length) { | ||
// if (typeof(config.device) == 'string' && config.device.length) { | ||
node.status({}); //clean | ||
@@ -113,44 +115,61 @@ | ||
if ((/group_/g).test(node.config.device)) { | ||
var url = 'http://' + node.server.ip + ':' + node.server.port + '/api/' + node.server.apikey + '/groups/' + ((node.config.device).split('group_').join('')) + '/action'; | ||
var post = {}; | ||
if (node.commandType == 'object' || node.commandType == 'homekit') { | ||
post = payload; | ||
var groupid = ((node.config.device).split('group_').join('')); | ||
var group = node.server.getGroup(groupid); | ||
if (group !== false) { | ||
var url = 'http://' + node.server.ip + ':' + node.server.port + '/api/' + node.server.apikey + '/groups/' + groupid + '/action'; | ||
var post = {}; | ||
if (node.commandType == 'object' || node.commandType == 'homekit') { | ||
post = payload; | ||
} else { | ||
if (command != 'on') post['on'] = true; | ||
if (command == 'bri') post['on'] = payload > 0 ? true : false; | ||
post[command] = payload; | ||
} | ||
node.postData(url, post); | ||
} else { | ||
if (command != 'on') post['on'] = true; | ||
if (command == 'bri') post['on'] = payload > 0 ? true : false; | ||
post[command] = payload; | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'no device' | ||
}); | ||
node.cleanTimer = setTimeout(function(){ | ||
node.status({}); //clean | ||
}, 3000); | ||
} | ||
node.postData(url, post); | ||
} else { | ||
node.server.getDeviceMeta(function (deviceMeta) { | ||
if (deviceMeta) { | ||
var url = 'http://' + node.server.ip + ':' + node.server.port + '/api/' + node.server.apikey + '/lights/' + deviceMeta.device_id + '/state'; | ||
var post = {}; | ||
if (node.commandType == 'object' || node.commandType == 'homekit') { | ||
post = payload; | ||
} else { | ||
if (command != 'on') post['on'] = true; | ||
if (command == 'bri') post['on'] = payload > 0 ? true : false; | ||
post[command] = payload; | ||
} | ||
node.postData(url, post); | ||
var deviceMeta = node.server.getDevice(node.config.device); | ||
if (deviceMeta !== undefined && deviceMeta && "device_id" in deviceMeta) { | ||
var url = 'http://' + node.server.ip + ':' + node.server.port + '/api/' + node.server.apikey + '/lights/' + deviceMeta.device_id + '/state'; | ||
var post = {}; | ||
if (node.commandType == 'object' || node.commandType == 'homekit') { | ||
post = payload; | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Device not found' | ||
}); | ||
if (command != 'on') post['on'] = true; | ||
if (command == 'bri') post['on'] = payload > 0 ? true : false; | ||
post[command] = payload; | ||
} | ||
}, node.config.device); | ||
node.postData(url, post); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'no device' | ||
}); | ||
node.cleanTimer = setTimeout(function(){ | ||
node.status({}); //clean | ||
}, 3000); | ||
} | ||
} | ||
}); | ||
} else { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'Device not set' | ||
}); | ||
} | ||
// } else { | ||
// node.status({ | ||
// fill: "red", | ||
// shape: "dot", | ||
// text: 'Device not set' | ||
// }); | ||
// } | ||
} | ||
@@ -169,3 +188,14 @@ | ||
}, function(error, response, body){ | ||
if (body) { | ||
if (error && typeof(error) === 'object') { | ||
node.warn(error); | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'connection', | ||
}); | ||
node.cleanTimer = setTimeout(function(){ | ||
node.status({}); //clean | ||
}, 3000); | ||
} else if (body) { | ||
var response = JSON.parse(body)[0]; | ||
@@ -172,0 +202,0 @@ |
@@ -19,7 +19,9 @@ var request = require('request'); | ||
node.apikey = n.apikey; | ||
node.pingTimeout = undefined; | ||
node.devices = {}; | ||
node.refreshDiscoverTimer = null; | ||
node.refreshDiscoverInterval = 15000; | ||
node.socket = new DeconzSocket({ | ||
@@ -39,225 +41,169 @@ hostname: this.ip, | ||
node.discoverDevices(function(){}, true); | ||
node.discoverDevices = function (callback, forceRefresh = false) { | ||
if (forceRefresh || node.items === undefined) { | ||
node.discoverProcess = true; | ||
node.log('discoverDevices: Refreshing devices list'); | ||
this.refreshDiscoverTimer = setInterval(function () { | ||
node.discoverDevices(function(){}, true); | ||
}, node.refreshDiscoverInterval); | ||
} | ||
var url = "http://" + node.ip + ":" + node.port + "/api/" + node.apikey; | ||
node.log('discoverDevices: Requesting: ' + url); | ||
request.get(url, function (error, result, data) { | ||
if (error) { | ||
callback(error); | ||
return; | ||
} | ||
try { | ||
var dataParsed = JSON.parse(data); | ||
} catch (e) { | ||
callback(RED._("deconz.error.invalid-json")); | ||
return; | ||
} | ||
node.items = []; | ||
if (dataParsed) { | ||
for (var index in dataParsed.sensors) { | ||
var prop = dataParsed.sensors[index]; | ||
prop.device_type = 'sensors'; | ||
prop.device_id = parseInt(index); | ||
discoverDevices(callback, forceRefresh = false) { | ||
var node = this; | ||
node.items[prop.uniqueid] = prop; | ||
} | ||
if (forceRefresh || node.items === undefined) { | ||
node.discoverProcess = true; | ||
// node.log('discoverDevices: Refreshing devices list'); | ||
for (var index in dataParsed.lights) { | ||
var prop = dataParsed.lights[index]; | ||
prop.device_type = 'lights'; | ||
prop.device_id = parseInt(index); | ||
var url = "http://" + node.ip + ":" + node.port + "/api/" + node.apikey; | ||
node.log('discoverDevices: Requesting: ' + url); | ||
node.items[prop.uniqueid] = prop; | ||
} | ||
if ("groups" in dataParsed) { | ||
node.groups = dataParsed.groups; | ||
// console.log(node.groups); | ||
} | ||
} | ||
request.get(url, function (error, result, data) { | ||
// console.log('discoverProcess = false'); | ||
if (error) { | ||
node.discoverProcess = false; | ||
callback(false); | ||
return; | ||
} | ||
callback(node.items); | ||
return node.items; | ||
}); | ||
} else { | ||
node.log('discoverDevices: Using cached devices'); | ||
callback(node.items); | ||
return node.items; | ||
} | ||
} | ||
try { | ||
var dataParsed = JSON.parse(data); | ||
} catch (e) { | ||
node.discoverProcess = false; | ||
callback(false); | ||
return; | ||
} | ||
node.getDeviceMeta = function (callback, uniqueid) { | ||
var result = null; | ||
node.oldItemsList = node.items !== undefined?node.items:undefined; | ||
node.items = []; | ||
if (dataParsed) { | ||
for (var index in dataParsed.sensors) { | ||
var prop = dataParsed.sensors[index]; | ||
prop.device_type = 'sensors'; | ||
prop.device_id = parseInt(index); | ||
if (node.items === undefined && !node.discoverProcess) { | ||
node.discoverDevices(function (items) { | ||
if (items) { | ||
for (var index in items) { | ||
var item = items[index]; | ||
if (index === uniqueid) { | ||
result = item; | ||
break; | ||
} | ||
if (node.oldItemsList !== undefined && prop.uniqueid in node.oldItemsList) {} else { | ||
node.items[prop.uniqueid] = prop; | ||
node.emit("onNewDevice", prop.uniqueid); | ||
} | ||
node.items[prop.uniqueid] = prop; | ||
} | ||
callback(result); | ||
return result; | ||
}, false); | ||
} else { | ||
if (node.getDiscoverProcess()) { | ||
var refreshIntervalId = setInterval(function(){ | ||
if (!node.getDiscoverProcess()) { | ||
clearInterval(refreshIntervalId); | ||
for (var index in dataParsed.lights) { | ||
var prop = dataParsed.lights[index]; | ||
prop.device_type = 'lights'; | ||
prop.device_id = parseInt(index); | ||
result = []; | ||
if ((node.items)) { | ||
for (var index in (node.items)) { | ||
var item = (node.items)[index]; | ||
if (index === uniqueid) { | ||
result = item; | ||
break; | ||
} | ||
} | ||
} | ||
callback(result); | ||
return result; | ||
if (node.oldItemsList !== undefined && prop.uniqueid in node.oldItemsList) {} else { | ||
node.items[prop.uniqueid] = prop; | ||
node.emit("onNewDevice", prop.uniqueid); | ||
} | ||
}, 100); | ||
} else { | ||
result = []; | ||
if ((node.items)) { | ||
for (var index in (node.items)) { | ||
var item = (node.items)[index]; | ||
if (index === uniqueid) { | ||
result = item; | ||
break; | ||
} | ||
} | ||
node.items[prop.uniqueid] = prop; | ||
} | ||
callback(result); | ||
return result; | ||
if ("groups" in dataParsed) { | ||
node.groups = dataParsed.groups; | ||
} | ||
} | ||
} | ||
node.discoverProcess = false; | ||
callback(node.items); | ||
return node.items; | ||
}); | ||
} else { | ||
node.log('discoverDevices: Using cached devices'); | ||
callback(node.items); | ||
return node.items; | ||
} | ||
} | ||
node.getItemsList = function (callback, forceRefresh = false) { | ||
node.discoverDevices(function(items){ | ||
node.items_list = []; | ||
for (var index in items) { | ||
var prop = items[index]; | ||
getDiscoverProcess() { | ||
var node = this; | ||
return node.discoverProcess; | ||
} | ||
node.items_list.push({ | ||
device_name: prop.name + ' : ' + prop.type, | ||
uniqueid: prop.uniqueid, | ||
meta: prop | ||
}); | ||
getDevice(uniqueid) { | ||
var node = this; | ||
var result = false; | ||
if (node.items !== undefined && node.items) { | ||
for (var index in (node.items)) { | ||
var item = (node.items)[index]; | ||
if (index === uniqueid) { | ||
result = item; | ||
break; | ||
} | ||
} | ||
} | ||
return result; | ||
} | ||
callback(node.items_list, node.groups); | ||
return node.items_list; | ||
}, forceRefresh); | ||
getGroup(groupid) { | ||
var node = this; | ||
var result = false; | ||
if (node.groups !== undefined && groupid in node.groups) { | ||
result = node.groups[groupid]; | ||
} | ||
node.getDiscoverProcess = function() { | ||
return node.discoverProcess; | ||
} | ||
return result; | ||
} | ||
getItemsList(callback, forceRefresh = false) { | ||
var node = this; | ||
node.discoverDevices(function(items){ | ||
node.items_list = []; | ||
for (var index in items) { | ||
var prop = items[index]; | ||
node.items_list.push({ | ||
device_name: prop.name + ' : ' + prop.type, | ||
uniqueid: prop.uniqueid, | ||
meta: prop | ||
}); | ||
} | ||
get deconz() { | ||
return this.socket; | ||
callback(node.items_list, node.groups); | ||
return node.items_list; | ||
}, forceRefresh); | ||
} | ||
onClose() { | ||
clearInterval(this.refreshDiscoverTimer); | ||
this.socket.close(); | ||
this.socket = null; | ||
for (var nodeId in this.devices) { | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node) { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
} | ||
this.emit('onClose'); | ||
} | ||
onSocketPongTimeout() { | ||
this.warn('WebSocket connection timeout, reconnecting'); | ||
for (var nodeId in this.devices) { | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node) { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
} | ||
var that = this; | ||
that.warn('WebSocket connection timeout, reconnecting'); | ||
that.emit('onSocketPongTimeout'); | ||
} | ||
onSocketClose(code, reason) { | ||
if (reason) { // don't bother the user unless there's a reason | ||
this.warn(`WebSocket disconnected: ${code} - ${reason}`); | ||
} | ||
for (var nodeId in this.devices) { | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node) { | ||
node.status({ | ||
fill: "red", | ||
shape: "dot", | ||
text: 'disconnected' | ||
}); | ||
} | ||
} | ||
} | ||
onSocketUnauthorized() { | ||
this.warn('WebSocket authentication failed'); | ||
var that = this; | ||
that.warn('WebSocket authentication failed'); | ||
that.emit('onSocketUnauthorized'); | ||
} | ||
onSocketError(err) { | ||
this.warn(`WebSocket error: ${err}`); | ||
var that = this; | ||
that.warn(`WebSocket error: ${err}`); | ||
that.emit('onSocketError'); | ||
} | ||
for (var nodeId in this.devices) { | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node) { | ||
node.status({ | ||
fill: "yellow", | ||
shape: "dot", | ||
text: 'reconnecting...' | ||
}); | ||
} | ||
onSocketClose(code, reason) { | ||
var that = this; | ||
if (reason) { // don't bother the user unless there's a reason | ||
that.warn(`WebSocket disconnected: ${code} - ${reason}`); | ||
} | ||
that.emit('onSocketClose'); | ||
} | ||
onSocketOpen(err) { | ||
// this.warn(`WebSocket opened`); | ||
// if ("sendLastState" in config && config.sendLastState) { | ||
for (var nodeId in this.devices) { | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node && typeof (node.sendLastState) == 'function') { | ||
node.sendLastState(); | ||
} | ||
} | ||
// } | ||
var that = this; | ||
that.log(`WebSocket opened`); | ||
that.emit('onSocketOpen'); | ||
} | ||
@@ -271,3 +217,3 @@ | ||
var node = RED.nodes.getNode(nodeId); | ||
if (node && "type" in node && node.type === "deconz-event") { | ||
if (node && "type" in node && node.type === "deconz-event" && serverNode && "items" in serverNode && dataParsed.uniqueid in serverNode.items) { | ||
var serverNode = RED.nodes.getNode(node.server.id); | ||
@@ -274,0 +220,0 @@ node.send({'payload': dataParsed, 'device': serverNode.items[dataParsed.uniqueid]}); |
@@ -41,3 +41,3 @@ { | ||
}, | ||
"version": "0.9.1" | ||
"version": "0.10.0" | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
762422
2701