Example #1
0
 /**
  * Test: convert XY and brightness to RGB
  *
  * @covers \Phue\Helper\ColorConversion::convertXYToRGB
  */
 public function testConvertXYToRGB()
 {
     // Conversion back from the test above
     // Alice Blue
     $rgb = ColorConversion::convertXYToRGB(0.3088, 0.3212, 233);
     $this->assertEquals($rgb['red'], 239);
     $this->assertEquals($rgb['green'], 247);
     $this->assertEquals($rgb['blue'], 255);
     // Firebrick
     $rgb = ColorConversion::convertXYToRGB(0.6622, 0.3024, 35);
     $this->assertEquals($rgb['red'], 178);
     $this->assertEquals($rgb['green'], 33);
     $this->assertEquals($rgb['blue'], 33);
     // Medium Sea Green
     $rgb = ColorConversion::convertXYToRGB(0.1979, 0.5004999999999999, 81);
     $this->assertEquals($rgb['red'], 61);
     $this->assertEquals($rgb['green'], 178);
     $this->assertEquals($rgb['blue'], 112);
 }
Example #2
0
File: Group.php Project: sqmk/phue
 /**
  * Set XY and brightness calculated from RGB
  *
  * @param int $red   Red value
  * @param int $green Green value
  * @param int $blue  Blue value
  *
  * @return self This object
  */
 public function setRGB($red, $green, $blue)
 {
     $x = new SetGroupState($this);
     $y = $x->rgb((int) $red, (int) $green, (int) $blue);
     $this->client->sendCommand($y);
     // Change internal xy, brightness and colormode state
     $xy = ColorConversion::convertRGBToXY($red, $green, $blue);
     $this->attributes->action->xy = array($xy['x'], $xy['y']);
     $this->attributes->action->bri = $xy['bri'];
     $this->attributes->action->colormode = 'xy';
     return $this;
 }
Example #3
0
 /**
  * Test: set XY and brightness via RGB
  *
  * @dataProvider providerRGB
  *
  * @covers \Phue\Command\SetLightState::rgb
  * @covers \Phue\Command\SetLightState::send
  */
 public function testRGBSend($red, $green, $blue)
 {
     // Build command
     $command = new SetLightState($this->mockLight);
     // Set expected payload
     $xy = ColorConversion::convertRGBToXY($red, $green, $blue);
     $this->stubTransportSendRequestWithPayload((object) array('xy' => array($xy['x'], $xy['y']), 'bri' => $xy['bri']));
     // Ensure instance is returned
     $this->assertEquals($command, $command->rgb($red, $green, $blue));
     // Send
     $command->send($this->mockClient);
 }
Example #4
0
 /**
  * Test: Get/Set RGB
  *
  * @covers \Phue\Light::getRGB
  * @covers \Phue\Light::setRGB
  */
 public function testGetSetRGB()
 {
     $this->stubMockClientSendSetLightStateCommand();
     // Make sure original rgb is retrievable
     $rgb = ColorConversion::convertXYToRGB($this->attributes->state->xy[0], $this->attributes->state->xy[1], $this->attributes->state->bri);
     $this->assertEquals(array('red' => $rgb['red'], 'green' => $rgb['green'], 'blue' => $rgb['blue']), $this->light->getRGB());
     // Ensure setRGB returns self
     $this->assertEquals($this->light, $this->light->setRGB(50, 50, 50));
     // Make sure light attributes are updated
     $this->assertEquals(array('red' => 50, 'green' => 50, 'blue' => 50), $this->light->getRGB());
 }
Example #5
0
 /**
  * Sets xy and brightness calculated from RGB
  *
  * @param int $red
  *          Red value
  * @param int $green
  *          Green value
  * @param int $blue
  *          Blue value
  *
  * @throws \InvalidArgumentException
  *
  * @return self This object
  */
 public function rgb($red, $green, $blue)
 {
     // Don't continue if rgb values are invalid
     foreach (array($red, $green, $blue) as $value) {
         if (!(self::RGB_MIN <= $value && $value <= self::RGB_MAX)) {
             throw new \InvalidArgumentException("RGB values must be between " . self::RGB_MIN . " and " . self::RGB_MAX);
         }
     }
     $xy = ColorConversion::convertRGBToXY($red, $green, $blue);
     return $this->xy($xy['x'], $xy['y'])->brightness($xy['bri']);
 }