/** * 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); }
/** * 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; }
/** * 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); }
/** * 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()); }
/** * 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']); }