Add xy attribute to Yeelight (#9957)

Allows using light profiles with yeelight bulbs
pull/10017/head
Hydreliox 2017-10-22 02:59:55 +02:00 committed by Teemu R
parent 5ad715507b
commit 089e1ab6f4
1 changed files with 23 additions and 3 deletions

View File

@ -13,12 +13,15 @@ import voluptuous as vol
from homeassistant.util.color import (
color_temperature_mired_to_kelvin as mired_to_kelvin,
color_temperature_kelvin_to_mired as kelvin_to_mired,
color_temperature_to_rgb)
color_temperature_to_rgb,
color_RGB_to_xy,
color_xy_brightness_to_RGB)
from homeassistant.const import CONF_DEVICES, CONF_NAME
from homeassistant.components.light import (
ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_TRANSITION, ATTR_COLOR_TEMP,
ATTR_FLASH, FLASH_SHORT, FLASH_LONG, ATTR_EFFECT,
SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR, SUPPORT_TRANSITION,
ATTR_FLASH, ATTR_XY_COLOR, FLASH_SHORT, FLASH_LONG, ATTR_EFFECT,
SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR, SUPPORT_XY_COLOR,
SUPPORT_TRANSITION,
SUPPORT_COLOR_TEMP, SUPPORT_FLASH, SUPPORT_EFFECT,
Light, PLATFORM_SCHEMA)
import homeassistant.helpers.config_validation as cv
@ -51,6 +54,7 @@ SUPPORT_YEELIGHT = (SUPPORT_BRIGHTNESS |
SUPPORT_YEELIGHT_RGB = (SUPPORT_YEELIGHT |
SUPPORT_RGB_COLOR |
SUPPORT_XY_COLOR |
SUPPORT_EFFECT |
SUPPORT_COLOR_TEMP)
@ -154,6 +158,7 @@ class YeelightLight(Light):
self._color_temp = None
self._is_on = None
self._rgb = None
self._xy = None
@property
def available(self) -> bool:
@ -236,6 +241,11 @@ class YeelightLight(Light):
"""Return the color property."""
return self._rgb
@property
def xy_color(self) -> tuple:
"""Return the XY color value."""
return self._xy
@property
def _properties(self) -> dict:
return self._bulb.last_properties
@ -284,6 +294,12 @@ class YeelightLight(Light):
self._rgb = self._get_rgb_from_properties()
if self._rgb:
xyb = color_RGB_to_xy(*self._rgb)
self._xy = (xyb[0], xyb[1])
else:
self._xy = None
self._available = True
except yeelight.BulbException as ex:
if self._available: # just inform once
@ -410,6 +426,7 @@ class YeelightLight(Light):
rgb = kwargs.get(ATTR_RGB_COLOR)
flash = kwargs.get(ATTR_FLASH)
effect = kwargs.get(ATTR_EFFECT)
xy_color = kwargs.get(ATTR_XY_COLOR)
duration = int(self.config[CONF_TRANSITION]) # in ms
if ATTR_TRANSITION in kwargs: # passed kwarg overrides config
@ -427,6 +444,9 @@ class YeelightLight(Light):
except yeelight.BulbException as ex:
_LOGGER.error("Unable to turn on music mode,"
"consider disabling it: %s", ex)
if xy_color and brightness:
rgb = color_xy_brightness_to_RGB(xy_color[0], xy_color[1],
brightness)
try:
# values checked for none in methods