mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
switch.flux: add interval and transition attributes (#9700)
This commit is contained in:
parent
bd4304e838
commit
80053ef21b
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user