better brightness bar sliding, averaging the lights for the light color
This commit is contained in:
parent
930d22ac61
commit
46b34015e6
4 changed files with 88 additions and 71 deletions
|
|
@ -13,5 +13,5 @@ module.exports = {
|
|||
globals: {
|
||||
chrome: false,
|
||||
introJs: false
|
||||
},
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -15,21 +15,21 @@ export default Component.extend({
|
|||
// COLOR LOOP related stuff
|
||||
colorLoopOn: false,
|
||||
|
||||
lightsOnTxt: computed('lightsOn', function () {
|
||||
lightsOnTxt: computed('lightsOn', function() {
|
||||
return this.get('lightsOn') ? 'On' : 'Off';
|
||||
}),
|
||||
|
||||
colorloopOnTxt: computed('colorLoopOn', function () {
|
||||
colorloopOnTxt: computed('colorLoopOn', function() {
|
||||
return this.get('colorLoopOn') ? 'On' : 'Off';
|
||||
}),
|
||||
|
||||
// determines the average brightness of the hue system for the brightness slider
|
||||
lightsBrightness: computed('lightsData', 'activeLights.[]', function () {
|
||||
lightsBrightness: computed('lightsData', 'activeLights.[]', function() {
|
||||
let lightsData = this.get('lightsData'),
|
||||
activeLights = this.get('activeLights'),
|
||||
lightsBrightness = 0;
|
||||
|
||||
activeLights.forEach(function (light) {
|
||||
activeLights.forEach(function(light) {
|
||||
lightsBrightness += lightsData[light].state.bri;
|
||||
});
|
||||
|
||||
|
|
@ -38,22 +38,22 @@ export default Component.extend({
|
|||
|
||||
brightnessControlDisabled: computed.not('lightsOn'),
|
||||
|
||||
onColorLoopOnChange: observer('colorLoopOn', function () {
|
||||
onColorLoopOnChange: observer('colorLoopOn', function() {
|
||||
let lightsData = this.get('lightsData'),
|
||||
activeLights = this.get('activeLights'),
|
||||
colorLoopsOn = this.get('colorLoopOn'),
|
||||
effect = colorLoopsOn ? 'colorloop' : 'none';
|
||||
|
||||
let colorLoopsOnSystem = activeLights.some(function (light) {
|
||||
let colorLoopsOnSystem = activeLights.some(function(light) {
|
||||
return lightsData[light].state.effect === 'colorloop';
|
||||
});
|
||||
|
||||
// if the internal lights state is different than the one from lightsData (user manually toggled the switch), send the request to change the bulbs state
|
||||
if (colorLoopsOn !== colorLoopsOnSystem) {
|
||||
activeLights.forEach((light) => {
|
||||
activeLights.forEach(light => {
|
||||
if (this.get('lightsData')[light].state.effect !== effect) {
|
||||
$.ajax(this.get('apiURL') + '/lights/' + light + '/state', {
|
||||
data: JSON.stringify({ 'effect': effect }),
|
||||
data: JSON.stringify({ effect: effect }),
|
||||
contentType: 'application/json',
|
||||
type: 'PUT'
|
||||
});
|
||||
|
|
@ -62,15 +62,15 @@ export default Component.extend({
|
|||
}
|
||||
}),
|
||||
|
||||
rgbPreview: observer('rgb', function () {
|
||||
rgbPreview: observer('rgb', function() {
|
||||
let rgb = this.get('rgb'),
|
||||
xy = rgbToCie(rgb[0], rgb[1], rgb[2]);
|
||||
|
||||
this.set('colorLoopOn', false);
|
||||
|
||||
this.get('activeLights').forEach((light) => {
|
||||
this.get('activeLights').forEach(light => {
|
||||
$.ajax(this.get('apiURL') + '/lights/' + light + '/state', {
|
||||
data: JSON.stringify({ "xy": xy }),
|
||||
data: JSON.stringify({ xy: xy }),
|
||||
contentType: 'application/json',
|
||||
type: 'PUT'
|
||||
});
|
||||
|
|
@ -80,59 +80,61 @@ export default Component.extend({
|
|||
$('.color').css('background', 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')');
|
||||
}),
|
||||
|
||||
onActiveLightsChange: on('init', observer('activeLights.[]', function () {
|
||||
onActiveLightsChange: observer('activeLights.[]', function() {
|
||||
let lightsData = this.get('lightsData'),
|
||||
xy = null,
|
||||
setRGB = true;
|
||||
activeLights = this.get('activeLights'),
|
||||
xy = null;
|
||||
|
||||
if (!isEmpty(lightsData)) {
|
||||
this.get('activeLights').forEach((i) => {
|
||||
activeLights.forEach(i => {
|
||||
let light = lightsData[i];
|
||||
|
||||
if (light && light.state && light.state.xy) {
|
||||
if (xy !== null && xy[0] !== light.state.xy[0] && xy[1] !== light.state.xy[1]) {
|
||||
setRGB = false;
|
||||
if (xy === null) {
|
||||
xy = [0, 0];
|
||||
}
|
||||
|
||||
xy = light.state.xy;
|
||||
xy[0] += light.state.xy[0];
|
||||
xy[1] += light.state.xy[1];
|
||||
}
|
||||
});
|
||||
|
||||
if (setRGB && xy) {
|
||||
let rgb = cieToRgb(xy[0], xy[1]);
|
||||
if (xy) {
|
||||
let rgb = cieToRgb(xy[0] / activeLights.length, xy[1] / activeLights.length);
|
||||
|
||||
$('.color').css('background', 'rgb(' + Math.abs(rgb[0]) + ',' + Math.abs(rgb[1]) + ',' + Math.abs(rgb[2]) + ')');
|
||||
} else {
|
||||
$('.color').css('background', 'rgb(' + 255 + ',' + 255 + ',' + 255 + ')');
|
||||
}
|
||||
}
|
||||
})),
|
||||
}),
|
||||
|
||||
// determines whether the lights are on/off for the lights switch
|
||||
lightsOnChange: on('init', observer('lightsData.@each.state.on', 'activeLights.[]', function () {
|
||||
lightsOnChange: on(
|
||||
'init',
|
||||
observer('lightsData.@each.state.on', 'activeLights.[]', function() {
|
||||
if (!this.get('strobeOn')) {
|
||||
let lightsData = this.get('lightsData'), lightsOn = this.get('activeLights').some(function (light) {
|
||||
let lightsData = this.get('lightsData'),
|
||||
lightsOn = this.get('activeLights').some(function(light) {
|
||||
return lightsData[light].state.on === true;
|
||||
});
|
||||
|
||||
this.set('lightsOn', lightsOn);
|
||||
}
|
||||
})),
|
||||
})
|
||||
),
|
||||
|
||||
onLightsOnChange: observer('lightsOn', function () {
|
||||
onLightsOnChange: observer('lightsOn', function() {
|
||||
let lightsData = this.get('lightsData'),
|
||||
activeLights = this.get('activeLights'),
|
||||
lightsOn = this.get('lightsOn');
|
||||
|
||||
let lightsOnSystem = activeLights.some(function (light) {
|
||||
let lightsOnSystem = activeLights.some(function(light) {
|
||||
return lightsData[light].state.on === true;
|
||||
});
|
||||
|
||||
// if the internal lights state is different than the one from lightsData (user manually toggled the switch), send the request to change the bulbs state
|
||||
if (lightsOn !== lightsOnSystem) {
|
||||
activeLights.forEach((light) => {
|
||||
activeLights.forEach(light => {
|
||||
$.ajax(this.get('apiURL') + '/lights/' + light + '/state', {
|
||||
data: JSON.stringify({ "on": lightsOn }),
|
||||
data: JSON.stringify({ on: lightsOn }),
|
||||
contentType: 'application/json',
|
||||
type: 'PUT'
|
||||
});
|
||||
|
|
@ -146,7 +148,7 @@ export default Component.extend({
|
|||
lightsBrightness = this.get('lightsBrightness'),
|
||||
activeLights = this.get('activeLights');
|
||||
|
||||
activeLights.forEach(function (light) {
|
||||
activeLights.forEach(function(light) {
|
||||
lightsBrightnessSystem += lightsData[light].state.bri;
|
||||
});
|
||||
|
||||
|
|
@ -154,9 +156,9 @@ export default Component.extend({
|
|||
|
||||
// if the internal lights state is different than the one from lightsData (user manually toggled the switch), send the request to change the bulbs state
|
||||
if (lightsBrightness !== lightsBrightnessSystem) {
|
||||
activeLights.forEach((light) => {
|
||||
activeLights.forEach(light => {
|
||||
$.ajax(this.get('apiURL') + '/lights/' + light + '/state', {
|
||||
data: JSON.stringify({ "bri": lightsBrightness }),
|
||||
data: JSON.stringify({ bri: lightsBrightness }),
|
||||
contentType: 'application/json',
|
||||
type: 'PUT'
|
||||
});
|
||||
|
|
@ -164,19 +166,20 @@ export default Component.extend({
|
|||
}
|
||||
},
|
||||
|
||||
onBrightnessChanged: observer('lightsBrightness', function () {
|
||||
onBrightnessChanged: observer('lightsBrightness', function() {
|
||||
let activeLights = this.get('activeLights').length;
|
||||
|
||||
throttle(this, this.changeLightsBrightness, activeLights * 69);
|
||||
throttle(this, this.changeLightsBrightness, activeLights * 69, false);
|
||||
}),
|
||||
|
||||
// sync the current light settings to the newly added light
|
||||
onaActiveLightsChange: observer('syncLight', function () {
|
||||
onaActiveLightsChange: observer('syncLight', function() {
|
||||
let options = {
|
||||
on: this.get('lightsOn'),
|
||||
bri: this.get('lightsBrightness'),
|
||||
effect: this.get('colorLoopOn') ? 'colorloop' : 'none'
|
||||
}, rgb = this.get('rgb'),
|
||||
},
|
||||
rgb = this.get('rgb'),
|
||||
syncLight = this.get('syncLight');
|
||||
|
||||
if (rgb[0] !== 255 && rgb[1] !== 255 && rgb[2] !== 255) {
|
||||
|
|
@ -192,6 +195,10 @@ export default Component.extend({
|
|||
});
|
||||
}),
|
||||
|
||||
didInsertElement() {
|
||||
this.onActiveLightsChange();
|
||||
},
|
||||
|
||||
// **************** STROBE LIGHT START ****************
|
||||
strobeOn: false,
|
||||
|
||||
|
|
@ -199,7 +206,7 @@ export default Component.extend({
|
|||
preStrobeOnLightsDataCache: null,
|
||||
nextLightIdx: 0,
|
||||
|
||||
onStrobeOnChange: observer('strobeOn', function () {
|
||||
onStrobeOnChange: observer('strobeOn', function() {
|
||||
let lightsData = this.get('lightsData'),
|
||||
strobeOn = this.get('strobeOn');
|
||||
|
||||
|
|
@ -222,8 +229,10 @@ export default Component.extend({
|
|||
}
|
||||
|
||||
this.set('strobeOnInervalHandle', setInterval(this.strobeStep.bind(this), 500));
|
||||
} else { // revert the light system to pre-strobe
|
||||
let preStrobeOnLightsDataCache = this.get('preStrobeOnLightsDataCache'), updateLight = (lightIndex) => {
|
||||
} else {
|
||||
// revert the light system to pre-strobe
|
||||
let preStrobeOnLightsDataCache = this.get('preStrobeOnLightsDataCache'),
|
||||
updateLight = lightIndex => {
|
||||
$.ajax(this.get('apiURL') + '/lights/' + lightIndex + '/state', {
|
||||
data: JSON.stringify({
|
||||
on: preStrobeOnLightsDataCache[lightIndex].state.on,
|
||||
|
|
@ -263,7 +272,7 @@ export default Component.extend({
|
|||
type: 'PUT'
|
||||
});
|
||||
$.ajax(this.get('apiURL') + '/lights/' + nextStrobeLight + '/state', {
|
||||
data: JSON.stringify({ 'on': false, 'transitiontime': 0 }),
|
||||
data: JSON.stringify({ on: false, transitiontime: 0 }),
|
||||
contentType: 'application/json',
|
||||
type: 'PUT'
|
||||
});
|
||||
|
|
@ -271,11 +280,11 @@ export default Component.extend({
|
|||
this.set('nextLightIdx', ++nextLightIdx);
|
||||
},
|
||||
|
||||
strobeOnTxt: computed('strobeOn', function () {
|
||||
strobeOnTxt: computed('strobeOn', function() {
|
||||
return this.get('strobeOn') ? 'On' : 'Off';
|
||||
}),
|
||||
|
||||
dimmerOnClass: computed('dimmerOn', function () {
|
||||
dimmerOnClass: computed('dimmerOn', function() {
|
||||
return this.get('dimmerOn') ? 'dimmerOn' : null;
|
||||
}),
|
||||
|
||||
|
|
@ -285,9 +294,11 @@ export default Component.extend({
|
|||
},
|
||||
|
||||
randomizeHues() {
|
||||
$('.dice').velocity({ scale: 1.10 }, 100).velocity({ scale: 1 }, 100);
|
||||
$('.dice')
|
||||
.velocity({ scale: 1.1 }, 100)
|
||||
.velocity({ scale: 1 }, 100);
|
||||
|
||||
this.get('activeLights').forEach((light) => {
|
||||
this.get('activeLights').forEach(light => {
|
||||
let options = { hue: Math.floor(Math.random() * 65535) };
|
||||
|
||||
if (this.get('lightsData')[light].state.on === false) {
|
||||
|
|
@ -300,6 +311,10 @@ export default Component.extend({
|
|||
type: 'PUT'
|
||||
});
|
||||
});
|
||||
|
||||
later(() => {
|
||||
this.onActiveLightsChange();
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -349,7 +349,9 @@ export default Mixin.create({
|
|||
this.set('blackoutMode', false);
|
||||
}
|
||||
|
||||
if (!isNone(value)) {
|
||||
this.get('storage').set('huegasm.' + option, value);
|
||||
}
|
||||
}),
|
||||
|
||||
onRepeatChange: on(
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
|
||||
"@ember/test-helpers@^0.7.1":
|
||||
version "0.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.1.tgz#14ba828ebc5b7b0e6eb7889352cb40af0c995349"
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-0.7.2.tgz#ca33170a5ce82bc921d7e84e4132aee425b7e67a"
|
||||
dependencies:
|
||||
broccoli-funnel "^2.0.1"
|
||||
ember-cli-babel "^6.8.1"
|
||||
|
|
@ -2251,8 +2251,8 @@ ember-basic-dropdown@^0.34.0:
|
|||
ember-wormhole "^0.5.2"
|
||||
|
||||
ember-cli-app-version@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-app-version/-/ember-cli-app-version-3.1.1.tgz#6be6a998b4887f79c7280729b7c77dc7821f18a7"
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ember-cli-app-version/-/ember-cli-app-version-3.1.3.tgz#26d25f5e653ff0106f0b39da6d75518ba8ed282d"
|
||||
dependencies:
|
||||
ember-cli-babel "^6.8.0"
|
||||
git-repo-version "^1.0.0"
|
||||
|
|
@ -5120,8 +5120,8 @@ micromatch@^2.1.5, micromatch@^2.3.7:
|
|||
regex-cache "^0.4.2"
|
||||
|
||||
"mime-db@>= 1.30.0 < 2":
|
||||
version "1.31.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.31.0.tgz#a49cd8f3ebf3ed1a482b60561d9105ad40ca74cb"
|
||||
version "1.32.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
|
||||
|
||||
mime-db@~1.30.0:
|
||||
version "1.30.0"
|
||||
|
|
|
|||
Reference in a new issue