PEP fixes for light.hue plugin and new methods xy and ct added

This commit is contained in:
Fabio Manganiello 2019-05-23 18:43:49 +02:00
parent aa9f5d9be8
commit 95d2a48bff

View file

@ -55,8 +55,7 @@ class LightHuePlugin(LightPlugin):
self.bridge_address = bridge self.bridge_address = bridge
self.bridge = None self.bridge = None
self.logger.info('Initializing Hue lights plugin - bridge: "{}"'. self.logger.info('Initializing Hue lights plugin - bridge: "{}"'.format(self.bridge_address))
format(self.bridge_address))
self.connect() self.connect()
self.lights = []; self.groups = [] self.lights = []; self.groups = []
@ -85,7 +84,7 @@ class LightHuePlugin(LightPlugin):
yet, uncomment the ``.connect()`` and ``.get_api()`` lines and retry yet, uncomment the ``.connect()`` and ``.get_api()`` lines and retry
after clicking the pairing button on your bridge. after clicking the pairing button on your bridge.
:todo: Support for dynamic retry and better user interaction in case of bridge pairing neeeded. :todo: Support for dynamic retry and better user interaction in case of bridge pairing needed.
""" """
# Lazy init # Lazy init
@ -115,7 +114,6 @@ class LightHuePlugin(LightPlugin):
else: else:
self.logger.info('Bridge already connected') self.logger.info('Bridge already connected')
@action @action
def get_scenes(self): def get_scenes(self):
""" """
@ -148,7 +146,6 @@ class LightHuePlugin(LightPlugin):
return self.bridge.get_scene() return self.bridge.get_scene()
@action @action
def get_lights(self): def get_lights(self):
""" """
@ -190,7 +187,6 @@ class LightHuePlugin(LightPlugin):
return self.bridge.get_light() return self.bridge.get_light()
@action @action
def get_groups(self): def get_groups(self):
""" """
@ -243,7 +239,6 @@ class LightHuePlugin(LightPlugin):
return self.bridge.get_group() return self.bridge.get_group()
def _exec(self, attr, *args, **kwargs): def _exec(self, attr, *args, **kwargs):
try: try:
self.connect() self.connect()
@ -281,7 +276,6 @@ class LightHuePlugin(LightPlugin):
self.bridge = None self.bridge = None
raise e raise e
@action @action
def set_light(self, light, **kwargs): def set_light(self, light, **kwargs):
""" """
@ -331,7 +325,7 @@ class LightHuePlugin(LightPlugin):
self.bridge.set_group(group, **kwargs) self.bridge.set_group(group, **kwargs)
@action @action
def on(self, lights=[], groups=[], **kwargs): def on(self, lights=None, groups=None, **kwargs):
""" """
Turn lights/groups on. Turn lights/groups on.
@ -339,10 +333,14 @@ class LightHuePlugin(LightPlugin):
:param groups: Groups to turn on (names or group objects). Default: plugin default groups :param groups: Groups to turn on (names or group objects). Default: plugin default groups
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('on', True, lights=lights, groups=groups, **kwargs) return self._exec('on', True, lights=lights, groups=groups, **kwargs)
@action @action
def off(self, lights=[], groups=[], **kwargs): def off(self, lights=None, groups=None, **kwargs):
""" """
Turn lights/groups off. Turn lights/groups off.
@ -350,10 +348,14 @@ class LightHuePlugin(LightPlugin):
:param groups: Groups to turn off (names or group objects). Default: plugin default groups :param groups: Groups to turn off (names or group objects). Default: plugin default groups
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('on', False, lights=lights, groups=groups, **kwargs) return self._exec('on', False, lights=lights, groups=groups, **kwargs)
@action @action
def toggle(self, lights=[], groups=[], **kwargs): def toggle(self, lights=None, groups=None, **kwargs):
""" """
Toggle lights/groups on/off. Toggle lights/groups on/off.
@ -361,6 +363,10 @@ class LightHuePlugin(LightPlugin):
:param groups: Groups to turn off (names or group objects). Default: plugin default groups :param groups: Groups to turn off (names or group objects). Default: plugin default groups
""" """
if groups is None:
groups = []
if lights is None:
lights = []
lights_on = [] lights_on = []
lights_off = [] lights_off = []
groups_on = [] groups_on = []
@ -402,7 +408,7 @@ class LightHuePlugin(LightPlugin):
self._exec('on', True, lights=lights_off, groups=groups_off, **kwargs) self._exec('on', True, lights=lights_off, groups=groups_off, **kwargs)
@action @action
def bri(self, value, lights=[], groups=[], **kwargs): def bri(self, value, lights=None, groups=None, **kwargs):
""" """
Set lights/groups brightness. Set lights/groups brightness.
@ -411,11 +417,15 @@ class LightHuePlugin(LightPlugin):
:param value: Brightness value (range: 0-255) :param value: Brightness value (range: 0-255)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('bri', int(value) % (self.MAX_BRI+1), return self._exec('bri', int(value) % (self.MAX_BRI+1),
lights=lights, groups=groups, **kwargs) lights=lights, groups=groups, **kwargs)
@action @action
def sat(self, value, lights=[], groups=[], **kwargs): def sat(self, value, lights=None, groups=None, **kwargs):
""" """
Set lights/groups saturation. Set lights/groups saturation.
@ -424,11 +434,15 @@ class LightHuePlugin(LightPlugin):
:param value: Saturation value (range: 0-255) :param value: Saturation value (range: 0-255)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('sat', int(value) % (self.MAX_SAT+1), return self._exec('sat', int(value) % (self.MAX_SAT+1),
lights=lights, groups=groups, **kwargs) lights=lights, groups=groups, **kwargs)
@action @action
def hue(self, value, lights=[], groups=[], **kwargs): def hue(self, value, lights=None, groups=None, **kwargs):
""" """
Set lights/groups color hue. Set lights/groups color hue.
@ -437,11 +451,43 @@ class LightHuePlugin(LightPlugin):
:param value: Hue value (range: 0-65535) :param value: Hue value (range: 0-65535)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('hue', int(value) % (self.MAX_HUE+1), return self._exec('hue', int(value) % (self.MAX_HUE+1),
lights=lights, groups=groups, **kwargs) lights=lights, groups=groups, **kwargs)
@action @action
def delta_bri(self, delta, lights=[], groups=[], **kwargs): def xy(self, value, lights=None, groups=None, **kwargs):
"""
Set lights/groups XY colors.
:param value: xY value
:type value: list[float] containing the two values
"""
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('xy', value, lights=lights, groups=groups, **kwargs)
@action
def ct(self, value, lights=None, groups=None, **kwargs):
"""
Set lights/groups color temperature.
:param value: Temperature value (range: 0-255)
:type value: int
"""
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('ct', value, lights=lights, groups=groups, **kwargs)
@action
def delta_bri(self, delta, lights=None, groups=None, **kwargs):
""" """
Change lights/groups brightness by a delta [-100, 100] compared to the current state. Change lights/groups brightness by a delta [-100, 100] compared to the current state.
@ -450,6 +496,10 @@ class LightHuePlugin(LightPlugin):
:param delta: Brightness delta value (range: -100, 100) :param delta: Brightness delta value (range: -100, 100)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
bri = 0 bri = 0
if lights: if lights:
@ -482,7 +532,7 @@ class LightHuePlugin(LightPlugin):
return self._exec('bri', int(bri), lights=lights, groups=groups, **kwargs) return self._exec('bri', int(bri), lights=lights, groups=groups, **kwargs)
@action @action
def delta_sat(self, delta, lights=[], groups=[], **kwargs): def delta_sat(self, delta, lights=None, groups=None, **kwargs):
""" """
Change lights/groups saturation by a delta [-100, 100] compared to the current state. Change lights/groups saturation by a delta [-100, 100] compared to the current state.
@ -491,6 +541,10 @@ class LightHuePlugin(LightPlugin):
:param delta: Saturation delta value (range: -100, 100) :param delta: Saturation delta value (range: -100, 100)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
sat = 0 sat = 0
if lights: if lights:
@ -523,7 +577,7 @@ class LightHuePlugin(LightPlugin):
return self._exec('sat', int(sat), lights=lights, groups=groups, **kwargs) return self._exec('sat', int(sat), lights=lights, groups=groups, **kwargs)
@action @action
def delta_hue(self, delta, lights=[], groups=[], **kwargs): def delta_hue(self, delta, lights=None, groups=None, **kwargs):
""" """
Change lights/groups hue by a delta [-100, 100] compared to the current state. Change lights/groups hue by a delta [-100, 100] compared to the current state.
@ -532,6 +586,10 @@ class LightHuePlugin(LightPlugin):
:param delta: Hue delta value (range: -100, 100) :param delta: Hue delta value (range: -100, 100)
""" """
if groups is None:
groups = []
if lights is None:
lights = []
hue = 0 hue = 0
if lights: if lights:
@ -565,7 +623,7 @@ class LightHuePlugin(LightPlugin):
@action @action
def scene(self, name, lights=[], groups=[], **kwargs): def scene(self, name, lights=None, groups=None, **kwargs):
""" """
Set a scene by name. Set a scene by name.
@ -574,6 +632,10 @@ class LightHuePlugin(LightPlugin):
:param name: Name of the scene :param name: Name of the scene
""" """
if groups is None:
groups = []
if lights is None:
lights = []
return self._exec('scene', name=name, lights=lights, groups=groups, **kwargs) return self._exec('scene', name=name, lights=lights, groups=groups, **kwargs)
@action @action
@ -596,8 +658,8 @@ class LightHuePlugin(LightPlugin):
@action @action
def animate(self, animation, duration=None, def animate(self, animation, duration=None,
hue_range=[0, MAX_HUE], sat_range=[0, MAX_SAT], hue_range=None, sat_range=None,
bri_range=[MAX_BRI-1, MAX_BRI], lights=None, groups=None, bri_range=None, lights=None, groups=None,
hue_step=1000, sat_step=2, bri_step=1, transition_seconds=1.0): hue_step=1000, sat_step=2, bri_step=1, transition_seconds=1.0):
""" """
Run a lights animation. Run a lights animation.
@ -608,31 +670,39 @@ class LightHuePlugin(LightPlugin):
:param duration: Animation duration in seconds (default: None, i.e. continue until stop) :param duration: Animation duration in seconds (default: None, i.e. continue until stop)
:type duration: float :type duration: float
:param hue_range: If you selected a color transition, this will specify the hue range of your color transition. Default: [0, 65535] :param hue_range: If you selected a color transition, this will specify the hue range of your color transition.
Default: [0, 65535]
:type hue_range: list[int] :type hue_range: list[int]
:param sat_range: If you selected a color transition, this will specify the saturation range of your color transition. Default: [0, 255] :param sat_range: If you selected a color transition, this will specify the saturation range of your color
transition. Default: [0, 255]
:type sat_range: list[int] :type sat_range: list[int]
:param bri_range: If you selected a color transition, this will specify the brightness range of your color transition. Default: [254, 255] :param bri_range: If you selected a color transition, this will specify the brightness range of your color
:type bri_range: list[int] transition. Default: [254, 255] :type bri_range: list[int]
:param lights: Lights to control (names or light objects). Default: plugin default lights :param lights: Lights to control (names or light objects). Default: plugin default lights
:param groups: Groups to control (names or group objects). Default: plugin default groups :param groups: Groups to control (names or group objects). Default: plugin default groups
:param hue_step: If you selected a color transition, this will specify by how much the color hue will change between iterations. Default: 1000 :param hue_step: If you selected a color transition, this will specify by how much the color hue will change
:type hue_step: int between iterations. Default: 1000 :type hue_step: int
:param sat_step: If you selected a color transition, this will specify by how much the saturation will change between iterations. Default: 2 :param sat_step: If you selected a color transition, this will specify by how much the saturation will change
:type sat_step: int between iterations. Default: 2 :type sat_step: int
:param bri_step: If you selected a color transition, this will specify by how much the brightness will change between iterations. Default: 1 :param bri_step: If you selected a color transition, this will specify by how much the brightness will change
:type bri_step: int between iterations. Default: 1 :type bri_step: int
:param transition_seconds: Time between two transitions or blinks in seconds. Default: 1.0 :param transition_seconds: Time between two transitions or blinks in seconds. Default: 1.0
:type treansition_seconds: float :type transition_seconds: float
""" """
if bri_range is None:
bri_range = [self.MAX_BRI - 1, self.MAX_BRI]
if sat_range is None:
sat_range = [0, self.MAX_SAT]
if hue_range is None:
hue_range = [0, self.MAX_HUE]
if groups: if groups:
groups = [g for g in self.bridge.groups if g.name in groups] groups = [g for g in self.bridge.groups if g.name in groups]
lights = lights or [] lights = lights or []
@ -659,6 +729,9 @@ class LightHuePlugin(LightPlugin):
if animation == self.Animation.COLOR_TRANSITION: if animation == self.Animation.COLOR_TRANSITION:
for (light, attrs) in lights.items(): for (light, attrs) in lights.items():
for (attr, value) in attrs.items(): for (attr, value) in attrs.items():
attr_range = [0,0]
attr_step = 0
if attr == 'hue': if attr == 'hue':
attr_range = hue_range attr_range = hue_range
attr_step = hue_step attr_step = hue_step
@ -689,7 +762,6 @@ class LightHuePlugin(LightPlugin):
except QueueTimeoutError: except QueueTimeoutError:
return False return False
def _animate_thread(lights): def _animate_thread(lights):
set_thread_name('HueAnimate') set_thread_name('HueAnimate')
self.logger.info('Starting {} animation'.format( self.logger.info('Starting {} animation'.format(
@ -745,5 +817,9 @@ class LightHuePlugin(LightPlugin):
self.redis = Redis(**redis_args) self.redis = Redis(**redis_args)
return self.redis return self.redis
def status(self):
# TODO
pass
# vim:sw=4:ts=4:et: # vim:sw=4:ts=4:et: