@@ -247,7 +247,8 @@ HTTP_RGB.prototype = {
247
247
this . log ( 'getPowerState() failed: %s' , error . message ) ;
248
248
callback ( error ) ;
249
249
} else {
250
- var powerOn = parseInt ( responseBody ) > 0 ;
250
+ var stateObj = JSON . parse ( responseBody ) ;
251
+ var powerOn = stateObj . channel . red > 0 || stateObj . channel . green > 0 || stateObj . channel . blue > 0 ;
251
252
this . log ( 'power is currently %s' , powerOn ? 'ON' : 'OFF' ) ;
252
253
callback ( null , powerOn ) ;
253
254
}
@@ -269,11 +270,12 @@ HTTP_RGB.prototype = {
269
270
return ;
270
271
}
271
272
273
+ var rgb = this . _hsvToRgb ( this . cache . hue , this . cache . saturation , this . cache . brightness )
272
274
if ( state ) {
273
- url = this . switch . powerOn . set_url ;
275
+ url = this . switch . powerOn . set_url . replace ( '{{RED}}' , rgb . r ) . replace ( '{{GREEN}}' , rgb . g ) . replace ( '{{BLUE}}' , rgb . b ) ;
274
276
body = this . switch . powerOn . body ;
275
277
} else {
276
- url = this . switch . powerOff . set_url ;
278
+ url = this . switch . powerOn . set_url . replace ( '{{RED}}' , 0 ) . replace ( '{{GREEN}}' , 0 ) . replace ( '{{BLUE}}' , 0 ) ;
277
279
body = this . switch . powerOff . body ;
278
280
}
279
281
@@ -306,7 +308,9 @@ HTTP_RGB.prototype = {
306
308
this . log ( 'getBrightness() failed: %s' , error . message ) ;
307
309
callback ( error ) ;
308
310
} else {
309
- var level = parseInt ( responseBody ) ;
311
+ var responseObj = JSON . parse ( responseBody ) ;
312
+ var hsl = this . _rgbToHsl ( responseObj . channel . red , responseObj . channel . green , responseObj . channel . blue ) ;
313
+ var level = hsl . l ;
310
314
this . log ( 'brightness is currently at %s %' , level ) ;
311
315
callback ( null , level ) ;
312
316
}
@@ -365,14 +369,14 @@ HTTP_RGB.prototype = {
365
369
this . log ( '... getHue() failed: %s' , error . message ) ;
366
370
callback ( error ) ;
367
371
} else {
368
- var rgb = responseBody ;
369
- var levels = this . _rgbToHsl (
370
- parseInt ( rgb . substr ( 0 , 2 ) , 16 ) ,
371
- parseInt ( rgb . substr ( 2 , 2 ) , 16 ) ,
372
- parseInt ( rgb . substr ( 4 , 2 ) , 16 )
373
- ) ;
372
+ var stateObj = JSON . parse ( responseBody ) ;
373
+ var hsl = this . _rgbToHsl (
374
+ stateObj . channel . red ,
375
+ stateObj . channel . green ,
376
+ stateObj . channel . blue
377
+ ) ;
374
378
375
- var hue = levels [ 0 ] ;
379
+ var hue = hsl . h ;
376
380
377
381
this . log ( '... hue is currently %s' , hue ) ;
378
382
this . cache . hue = hue ;
@@ -420,14 +424,14 @@ HTTP_RGB.prototype = {
420
424
this . log ( '... getSaturation() failed: %s' , error . message ) ;
421
425
callback ( error ) ;
422
426
} else {
423
- var rgb = responseBody ;
424
- var levels = this . _rgbToHsl (
425
- parseInt ( rgb . substr ( 0 , 2 ) , 16 ) ,
426
- parseInt ( rgb . substr ( 2 , 2 ) , 16 ) ,
427
- parseInt ( rgb . substr ( 4 , 2 ) , 16 )
428
- ) ;
427
+ var stateObj = JSON . parse ( responseBody ) ;
428
+ var hsl = this . _rgbToHsl (
429
+ stateObj . channel . red ,
430
+ stateObj . channel . green ,
431
+ stateObj . channel . blue
432
+ ) ;
429
433
430
- var saturation = levels [ 1 ] ;
434
+ var saturation = hsl . s ;
431
435
432
436
this . log ( '... saturation is currently %s' , saturation ) ;
433
437
this . cache . saturation = saturation ;
@@ -465,24 +469,13 @@ HTTP_RGB.prototype = {
465
469
*/
466
470
_setRGB : function ( callback ) {
467
471
var rgb = this . _hsvToRgb ( this . cache . hue , this . cache . saturation , this . cache . brightness ) ;
468
- var r = this . _decToHex ( rgb . r ) ;
469
- var g = this . _decToHex ( rgb . g ) ;
470
- var b = this . _decToHex ( rgb . b ) ;
472
+ var r = rgb . r ;
473
+ var g = rgb . g ;
474
+ var b = rgb . b ;
471
475
472
- var url = this . color . set_url . replace ( '%s ' , r + g + b ) ;
476
+ var url = this . color . set_url . replace ( '{{RED}} ' , r ) . replace ( '{{GREEN}}' , g ) . replace ( '{{BLUE}}' , b ) ;
473
477
this . cacheUpdated = false ;
474
-
475
- this . log ( '_setRGB converting H:%s S:%s B:%s to RGB:%s ...' , this . cache . hue , this . cache . saturation , this . cache . brightness , r + g + b ) ;
476
-
477
- this . _httpRequest ( url , '' , this . color . http_method , function ( error , response , body ) {
478
- if ( error ) {
479
- this . log ( '... _setRGB() failed: %s' , error ) ;
480
- callback ( error ) ;
481
- } else {
482
- this . log ( '... _setRGB() successfully set to #%s' , r + g + b ) ;
483
- callback ( ) ;
484
- }
485
- } . bind ( this ) ) ;
478
+ this . _httpRequest ( url , '' , 'GET' , callback ) ;
486
479
} ,
487
480
488
481
/** Utility Functions **/
@@ -514,7 +507,7 @@ HTTP_RGB.prototype = {
514
507
* Converts an HSV color value to RGB. Conversion formula
515
508
* adapted from http://stackoverflow.com/a/17243070/2061684
516
509
* Assumes h in [0..360], and s and l in [0..100] and
517
- * returns r, g, and b in [0..255 ].
510
+ * returns r, g, and b in [0..1 ].
518
511
*
519
512
* @param {Number } h The hue
520
513
* @param {Number } s The saturation
@@ -541,14 +534,14 @@ HTTP_RGB.prototype = {
541
534
case 4 : r = t ; g = p ; b = v ; break ;
542
535
case 5 : r = v ; g = p ; b = q ; break ;
543
536
}
544
- var rgb = { r : Math . round ( r * 255 ) , g : Math . round ( g * 255 ) , b : Math . round ( b * 255 ) } ;
537
+ var rgb = { r : r , g : g , b : b } ;
545
538
return rgb ;
546
539
} ,
547
540
548
541
/**
549
542
* Converts an RGB color value to HSL. Conversion formula
550
543
* adapted from http://en.wikipedia.org/wiki/HSL_color_space.
551
- * Assumes r, g, and b are in [0..255 ] and
544
+ * Assumes r, g, and b are in [0..1 ] and
552
545
* returns h in [0..360], and s and l in [0..100].
553
546
*
554
547
* @param {Number } r The red color value
@@ -557,9 +550,6 @@ HTTP_RGB.prototype = {
557
550
* @return {Array } The HSL representation
558
551
*/
559
552
_rgbToHsl : function ( r , g , b ) {
560
- r /= 255 ;
561
- g /= 255 ;
562
- b /= 255 ;
563
553
var max = Math . max ( r , g , b ) , min = Math . min ( r , g , b ) ;
564
554
var h , s , l = ( max + min ) / 2 ;
565
555
@@ -579,26 +569,7 @@ HTTP_RGB.prototype = {
579
569
h *= 360 ; // return degrees [0..360]
580
570
s *= 100 ; // return percent [0..100]
581
571
l *= 100 ; // return percent [0..100]
582
- return [ parseInt ( h ) , parseInt ( s ) , parseInt ( l ) ] ;
572
+ return { h : parseInt ( h ) , s : parseInt ( s ) , l : parseInt ( l ) } ;
583
573
} ,
584
574
585
- /**
586
- * Converts a decimal number into a hexidecimal string, with optional
587
- * padding (default 2 characters).
588
- *
589
- * @param {Number } d Decimal number
590
- * @param {String } padding Padding for the string
591
- * @return {String } '0' padded hexidecimal number
592
- */
593
- _decToHex : function ( d , padding ) {
594
- var hex = Number ( d ) . toString ( 16 ) . toUpperCase ( ) ;
595
- padding = typeof ( padding ) === 'undefined' || padding === null ? padding = 2 : padding ;
596
-
597
- while ( hex . length < padding ) {
598
- hex = '0' + hex ;
599
- }
600
-
601
- return hex ;
602
- }
603
-
604
575
} ;
0 commit comments