diff --git a/homeassistant/components/switch/flux.py b/homeassistant/components/switch/flux.py index 4df8f792a4b..a232702df39 100644 --- a/homeassistant/components/switch/flux.py +++ b/homeassistant/components/switch/flux.py @@ -11,7 +11,8 @@ import logging import voluptuous as vol -from homeassistant.components.light import is_on, turn_on +from homeassistant.components.light import ( + is_on, turn_on, VALID_TRANSITION, ATTR_TRANSITION) from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.const import CONF_NAME, CONF_PLATFORM, CONF_LIGHTS from homeassistant.helpers.event import track_time_change @@ -35,6 +36,7 @@ CONF_STOP_CT = 'stop_colortemp' CONF_BRIGHTNESS = 'brightness' CONF_DISABLE_BRIGTNESS_ADJUST = 'disable_brightness_adjust' CONF_MODE = 'mode' +CONF_INTERVAL = 'interval' MODE_XY = 'xy' MODE_MIRED = 'mired' @@ -57,37 +59,39 @@ PLATFORM_SCHEMA = vol.Schema({ vol.All(vol.Coerce(int), vol.Range(min=0, max=255)), vol.Optional(CONF_DISABLE_BRIGTNESS_ADJUST): cv.boolean, vol.Optional(CONF_MODE, default=DEFAULT_MODE): - vol.Any(MODE_XY, MODE_MIRED, MODE_RGB) + vol.Any(MODE_XY, MODE_MIRED, MODE_RGB), + vol.Optional(CONF_INTERVAL, default=30): cv.positive_int, + vol.Optional(ATTR_TRANSITION, default=30): VALID_TRANSITION }) -def set_lights_xy(hass, lights, x_val, y_val, brightness): +def set_lights_xy(hass, lights, x_val, y_val, brightness, transition): """Set color of array of lights.""" for light in lights: if is_on(hass, light): turn_on(hass, light, xy_color=[x_val, y_val], brightness=brightness, - transition=30) + transition=transition) -def set_lights_temp(hass, lights, mired, brightness): +def set_lights_temp(hass, lights, mired, brightness, transition): """Set color of array of lights.""" for light in lights: if is_on(hass, light): turn_on(hass, light, color_temp=int(mired), brightness=brightness, - transition=30) + transition=transition) -def set_lights_rgb(hass, lights, rgb): +def set_lights_rgb(hass, lights, rgb, transition): """Set color of array of lights.""" for light in lights: if is_on(hass, light): turn_on(hass, light, rgb_color=rgb, - transition=30) + transition=transition) # pylint: disable=unused-argument @@ -103,9 +107,12 @@ def setup_platform(hass, config, add_devices, discovery_info=None): brightness = config.get(CONF_BRIGHTNESS) disable_brightness_adjust = config.get(CONF_DISABLE_BRIGTNESS_ADJUST) mode = config.get(CONF_MODE) - flux = FluxSwitch(name, hass, False, lights, start_time, stop_time, + interval = config.get(CONF_INTERVAL) + transition = config.get(ATTR_TRANSITION) + flux = FluxSwitch(name, hass, lights, start_time, stop_time, start_colortemp, sunset_colortemp, stop_colortemp, - brightness, disable_brightness_adjust, mode) + brightness, disable_brightness_adjust, mode, interval, + transition) add_devices([flux]) def update(call=None): @@ -119,9 +126,10 @@ def setup_platform(hass, config, add_devices, discovery_info=None): class FluxSwitch(SwitchDevice): """Representation of a Flux switch.""" - def __init__(self, name, hass, state, lights, start_time, stop_time, + def __init__(self, name, hass, lights, start_time, stop_time, start_colortemp, sunset_colortemp, stop_colortemp, - brightness, disable_brightness_adjust, mode): + brightness, disable_brightness_adjust, mode, interval, + transition): """Initialize the Flux switch.""" self._name = name self.hass = hass @@ -134,6 +142,8 @@ class FluxSwitch(SwitchDevice): self._brightness = brightness self._disable_brightness_adjust = disable_brightness_adjust self._mode = mode + self._interval = interval + self._transition = transition self.unsub_tracker = None @property @@ -155,7 +165,7 @@ class FluxSwitch(SwitchDevice): self.flux_update() self.unsub_tracker = track_time_change( - self.hass, self.flux_update, second=[0, 30]) + self.hass, self.flux_update, second=[0, self._interval]) self.schedule_update_ha_state() @@ -232,20 +242,21 @@ class FluxSwitch(SwitchDevice): brightness = None if self._mode == MODE_XY: set_lights_xy(self.hass, self._lights, x_val, - y_val, brightness) + y_val, brightness, self._transition) _LOGGER.info("Lights updated to x:%s y:%s brightness:%s, %s%% " "of %s cycle complete at %s", x_val, y_val, brightness, round( percentage_complete * 100), time_state, now) elif self._mode == MODE_RGB: - set_lights_rgb(self.hass, self._lights, rgb) + set_lights_rgb(self.hass, self._lights, rgb, self._transition) _LOGGER.info("Lights updated to rgb:%s, %s%% " "of %s cycle complete at %s", rgb, round(percentage_complete * 100), time_state, now) else: # Convert to mired and clamp to allowed values mired = color_temperature_kelvin_to_mired(temp) - set_lights_temp(self.hass, self._lights, mired, brightness) + set_lights_temp(self.hass, self._lights, mired, brightness, + self._transition) _LOGGER.info("Lights updated to mired:%s brightness:%s, %s%% " "of %s cycle complete at %s", mired, brightness, round(percentage_complete * 100), time_state, now)