This repository has been archived on 2026-04-30. You can view files and clone it, but cannot push or open issues or pull requests.
huegasm/app/components/bridge-controls.js
2015-08-10 22:35:25 -07:00

69 lines
1.7 KiB
JavaScript

import Em from 'ember';
export default Em.Component.extend({
bridgeIp: null,
bridgeUsername: null,
lightsData: null,
lightsDataIntervalHandle: null,
lightsApiURL: function(){
return 'http://' + this.get('bridgeIp') + '/api/' + this.get('bridgeUsername') + '/lights';
}.property('bridgeIp', 'bridgeUsername'),
didInsertElement: function() {
this.set('lightsDataIntervalHandle', setInterval(this.updateLightData.bind(this), 1000));
},
lightsOn: function(){
var lightsData = this.get('lightsData');
for (var key in lightsData) {
if (lightsData.hasOwnProperty(key)) {
if(lightsData[key].state.on){
return true;
}
}
}
return false;
}.property('lightsData'),
onLightsOnChange: function(){
var lightsData = this.get('lightsData'), lightsOnState = false, lightsOn = this.get('lightsOn');
for (let key in lightsData) {
if (lightsData.hasOwnProperty(key)) {
if(lightsData[key].state.on){
lightsOnState = true;
break;
}
}
}
if(lightsOn !== lightsOnState){
for (let key in lightsData) {
Em.$.ajax(this.get('lightsApiURL') + '/' + key + '/state', {
data: JSON.stringify({"on": lightsOn}),
contentType: 'application/json',
type: 'PUT'
})
}
}
}.observes('lightsOn'),
lightsOnTxt: function(){
return this.get('lightsOn') ? 'On' : 'Off';
}.property('lightsOn'),
updateLightData: function(){
var self = this;
Em.$.get(this.get('lightsApiURL'), function (result, status) {
if (status === 'success') {
self.set('lightsData', result);
}
});
}
});