diff --git a/homeassistant/components/light/__init__.py b/homeassistant/components/light/__init__.py index c398f9d8c82..64f54c3d66a 100644 --- a/homeassistant/components/light/__init__.py +++ b/homeassistant/components/light/__init__.py @@ -82,6 +82,12 @@ ATTR_BRIGHTNESS = "brightness" # String representing a profile (built-in ones or external defined) ATTR_PROFILE = "profile" +# If the light should flash, can be FLASH_SHORT or FLASH_LONG +ATTR_FLASH = "flash" +FLASH_SHORT = "short" +FLASH_LONG = "long" + + LIGHT_PROFILES_FILE = "light_profiles.csv" _LOGGER = logging.getLogger(__name__) @@ -96,40 +102,31 @@ def is_on(hass, entity_id=None): # pylint: disable=too-many-arguments def turn_on(hass, entity_id=None, transition=None, brightness=None, - rgb_color=None, xy_color=None, profile=None): + rgb_color=None, xy_color=None, profile=None, flash=None): """ Turns all or specified light on. """ - data = {} - - if entity_id: - data[ATTR_ENTITY_ID] = entity_id - - if profile: - data[ATTR_PROFILE] = profile - - if transition is not None: - data[ATTR_TRANSITION] = transition - - if brightness is not None: - data[ATTR_BRIGHTNESS] = brightness - - if rgb_color: - data[ATTR_RGB_COLOR] = rgb_color - - if xy_color: - data[ATTR_XY_COLOR] = xy_color + data = { + key: value for key, value in [ + (ATTR_ENTITY_ID, entity_id), + (ATTR_PROFILE, profile), + (ATTR_TRANSITION, transition), + (ATTR_BRIGHTNESS, brightness), + (ATTR_RGB_COLOR, rgb_color), + (ATTR_XY_COLOR, xy_color), + (ATTR_FLASH, flash), + ] if value is not None + } hass.services.call(DOMAIN, SERVICE_TURN_ON, data) def turn_off(hass, entity_id=None, transition=None): """ Turns all or specified light off. """ - data = {} - - if entity_id: - data[ATTR_ENTITY_ID] = entity_id - - if transition is not None: - data[ATTR_TRANSITION] = transition + data = { + key: value for key, value in [ + (ATTR_ENTITY_ID, entity_id), + (ATTR_TRANSITION, transition), + ] if value is not None + } hass.services.call(DOMAIN, SERVICE_TURN_OFF, data) @@ -273,6 +270,13 @@ def setup(hass, config): # ValueError if not all values can be converted to int pass + if ATTR_FLASH in dat: + if dat[ATTR_FLASH] == FLASH_SHORT: + params[ATTR_FLASH] = FLASH_SHORT + + elif dat[ATTR_FLASH] == FLASH_LONG: + params[ATTR_FLASH] = FLASH_LONG + for light in lights: # pylint: disable=star-args light.turn_on(**params) diff --git a/homeassistant/components/light/hue.py b/homeassistant/components/light/hue.py index 19f4034eb39..2cede156381 100644 --- a/homeassistant/components/light/hue.py +++ b/homeassistant/components/light/hue.py @@ -7,7 +7,7 @@ import homeassistant.util as util from homeassistant.helpers import ToggleDevice from homeassistant.const import ATTR_FRIENDLY_NAME, CONF_HOST from homeassistant.components.light import ( - ATTR_BRIGHTNESS, ATTR_XY_COLOR, ATTR_TRANSITION) + ATTR_BRIGHTNESS, ATTR_XY_COLOR, ATTR_TRANSITION, ATTR_FLASH, FLASH_LONG) MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10) MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1) @@ -95,6 +95,11 @@ class HueLight(ToggleDevice): if ATTR_XY_COLOR in kwargs: command['xy'] = kwargs[ATTR_XY_COLOR] + flash = kwargs.get(ATTR_FLASH) + + if flash is not None: + command['alert'] = 'lselect' if flash == FLASH_LONG else 'select' + self.bridge.set_light(self.light_id, command) def turn_off(self, **kwargs):