diff --git a/hardware/hue/104-hue_manage.html b/hardware/hue/104-hue_manage.html
index 99950970..c5c364c1 100644
--- a/hardware/hue/104-hue_manage.html
+++ b/hardware/hue/104-hue_manage.html
@@ -17,6 +17,7 @@
-->
@@ -77,6 +85,7 @@
username: {value:"", required:true},
discovery_mode: {value: "", required:false},
lamp_id: {value:"", required:false},
+ ip_address: {value:"", required:false},
color: {value:"EBF5FF"},
brightness: {value:"100"},
lamp_status:{}
diff --git a/hardware/hue/104-hue_manage.js b/hardware/hue/104-hue_manage.js
index 9d1374f2..5f79fcc4 100644
--- a/hardware/hue/104-hue_manage.js
+++ b/hardware/hue/104-hue_manage.js
@@ -41,6 +41,69 @@ function hexToRgb(hex) {
} : null;
}
+function setLights(node, myMsg) {
+
+ var msg2 = {};
+ msg2.topic = this.topic;
+
+ //set light status
+ var api = new HueApi(node.gw_ipaddress, node.username);
+ var lightState = hue.lightState;
+ var state = lightState.create();
+
+ var status;
+ var lamp = -1;
+
+ //check for AUTO status (lamp settings set through node input)
+ if(node.lamp_status=="AUTO") {
+ var color;
+ var brightness;
+
+ //get lamp id from msg.lamp:
+ lamp = myMsg.lamp;
+
+ //get brightness:
+ brightness = myMsg.brightness;
+
+ //get colour either from msg.color or msg.topic
+ if(myMsg.color!=null && myMsg.color.length>0) {
+ color = myMsg.color;
+ }
+ else if(myMsg.topic!=null && myMsg.topic.length>0) {
+ color = myMsg.topic;
+ }
+
+
+ //check the payload for on/off/alert:
+ //case of ALERT:
+ if(myMsg.payload=="ALERT" || myMsg.payload=="alert"){
+ api.setLightState(lamp, state.alert()).then(displayResult).fail(displayError).done();
+ }
+
+ //case of ON:
+ if(myMsg.payload=="ON" || myMsg.payload=="on") {
+ api.setLightState(lamp, state.on().rgb(hexToRgb(color).r,hexToRgb(color).g,hexToRgb(color).b).brightness(brightness)).then(displayResult).fail(displayError).done();
+ }
+ else {
+ api.setLightState(lamp, state.off()).then(displayResult).fail(displayError).done();
+ }
+
+ }
+ else {
+ //set lamp according to node settings
+ if(node.lamp_status=="ON")
+ api.setLightState(node.lamp_id, state.on().rgb(hexToRgb(node.color).r,hexToRgb(node.color).g,hexToRgb(node.color).b).brightness(node.brightness)).then(displayResult).fail(displayError).done();
+ else
+ api.setLightState(node.lamp_id, state.off()).then(displayResult).fail(displayError).done();
+ }
+
+ if(lamp!=-1)
+ msg2.payload = 'Light with ID: '+lamp+ ' was set to '+myMsg.payload;
+ else
+ msg2.payload = 'Light with ID: '+node.lamp_id+ ' was set to '+node.lamp_status;
+ node.send(msg2);
+}
+
// The main node definition - most things happen in here
function HueNode(n) {
@@ -53,89 +116,34 @@ function HueNode(n) {
this.username = n.username;
this.lamp_status = n.lamp_status;
this.lamp_id = n.lamp_id;
+ this.gw_ipaddress = n.ip_address;
this.color = n.color;
this.brightness = n.brightness;
-
// Store local copies of the node configuration (as defined in the .html)
this.topic = n.topic;
-
+
var msg = {};
-
+
msg.topic = this.topic;
this.on("input", function(msg){
var myMsg = msg;
- //set the lamp status
+ //set the lamp status
+ if (this.gw_ipaddress) {
+ setLights(node, myMsg);
+ } else {
//first locate the Hue gateway:
hue.locateBridges(function(err, result) {
- var msg2 = {};
- msg2.topic = this.topic;
+
if (err) throw err;
//check for found bridges
if(result[0]!=null) {
//save the IP address of the 1st bridge found
this.gw_ipaddress = result[0].ipaddress;
-
-
- //set light status
- var api = new HueApi(this.gw_ipaddress, node.username);
- var lightState = hue.lightState;
- var state = lightState.create();
-
- var status;
- var lamp = -1;
-
- //check for AUTO status (lamp settings set through node input)
- if(node.lamp_status=="AUTO") {
- var color;
- var brightness;
-
- //get lamp id from msg.lamp:
- lamp = myMsg.lamp;
-
- //get brightness:
- brightness = myMsg.brightness;
-
- //get colour either from msg.color or msg.topic
- if(myMsg.color!=null && myMsg.color.length>0) {
- color = myMsg.color;
- }
- else if(myMsg.topic!=null && myMsg.topic.length>0) {
- color = myMsg.topic;
- }
-
-
- //check the payload for on/off/alert:
- //case of ALERT:
- if(myMsg.payload=="ALERT" || myMsg.payload=="alert"){
- api.setLightState(lamp, state.alert()).then(displayResult).fail(displayError).done();
- }
-
- //case of ON:
- if(myMsg.payload=="ON" || myMsg.payload=="on") {
- api.setLightState(lamp, state.on().rgb(hexToRgb(color).r,hexToRgb(color).g,hexToRgb(color).b).brightness(brightness)).then(displayResult).fail(displayError).done();
- }
- else {
- api.setLightState(lamp, state.off()).then(displayResult).fail(displayError).done();
- }
-
- }
- else {
- //set lamp according to node settings
- if(node.lamp_status=="ON")
- api.setLightState(node.lamp_id, state.on().rgb(hexToRgb(node.color).r,hexToRgb(node.color).g,hexToRgb(node.color).b).brightness(node.brightness)).then(displayResult).fail(displayError).done();
- else
- api.setLightState(node.lamp_id, state.off()).then(displayResult).fail(displayError).done();
- }
-
- if(lamp!=-1)
- msg2.payload = 'Light with ID: '+lamp+ ' was set to '+myMsg.payload;
- else
- msg2.payload = 'Light with ID: '+node.lamp_id+ ' was set to '+node.lamp_status;
- node.send(msg2);
+ setLights(node, myMsg);
}
else {
//bridge not found:
@@ -145,6 +153,7 @@ function HueNode(n) {
}
});
+ }
});