Improvements to LIFX reliability (#14848)

* Improve fault tolerance of LIFX initialization

* Update aiolifx to 0.6.3

* Use list comprehension
This commit is contained in:
Anders Melchiorsen 2018-06-07 16:06:29 +02:00 committed by Paulus Schoutsen
parent 83ce9450f7
commit 6b2b92a732
2 changed files with 12 additions and 17 deletions

View file

@ -30,7 +30,7 @@ import homeassistant.util.color as color_util
_LOGGER = logging.getLogger(__name__)
REQUIREMENTS = ['aiolifx==0.6.1', 'aiolifx_effects==0.1.2']
REQUIREMENTS = ['aiolifx==0.6.3', 'aiolifx_effects==0.1.2']
UDP_BROADCAST_PORT = 56700
@ -201,7 +201,7 @@ def merge_hsbk(base, change):
"""Copy change on top of base, except when None."""
if change is None:
return None
return list(map(lambda x, y: y if y is not None else x, base, change))
return [b if c is None else c for b, c in zip(base, change)]
class LIFXManager(object):
@ -256,7 +256,7 @@ class LIFXManager(object):
async def start_effect(self, entities, service, **kwargs):
"""Start a light effect on entities."""
devices = list(map(lambda l: l.device, entities))
devices = [light.device for light in entities]
if service == SERVICE_EFFECT_PULSE:
effect = aiolifx_effects().EffectPulse(
@ -314,12 +314,13 @@ class LIFXManager(object):
# Read initial state
ack = AwaitAioLIFX().wait
version_resp = await ack(device.get_version)
if version_resp:
color_resp = await ack(device.get_color)
color_resp = await ack(device.get_color)
if color_resp:
version_resp = await ack(device.get_version)
if version_resp is None or color_resp is None:
if color_resp is None or version_resp is None:
_LOGGER.error("Failed to initialize %s", device.ip_addr)
device.registered = False
else:
device.timeout = MESSAGE_TIMEOUT
device.retry_count = MESSAGE_RETRIES
@ -440,18 +441,13 @@ class LIFXLight(Light):
@property
def brightness(self):
"""Return the brightness of this light between 0..255."""
brightness = convert_16_to_8(self.device.color[2])
_LOGGER.debug("brightness: %d", brightness)
return brightness
return convert_16_to_8(self.device.color[2])
@property
def color_temp(self):
"""Return the color temperature."""
kelvin = self.device.color[3]
temperature = color_util.color_temperature_kelvin_to_mired(kelvin)
_LOGGER.debug("color_temp: %d", temperature)
return temperature
return color_util.color_temperature_kelvin_to_mired(kelvin)
@property
def is_on(self):
@ -564,7 +560,6 @@ class LIFXLight(Light):
async def async_update(self):
"""Update bulb status."""
_LOGGER.debug("%s async_update", self.who)
if self.available and not self.lock.locked():
await AwaitAioLIFX().wait(self.device.get_color)
@ -627,7 +622,7 @@ class LIFXStrip(LIFXColor):
zones = list(range(0, num_zones))
else:
zones = list(filter(lambda x: x < num_zones, set(zones)))
zones = [x for x in set(zones) if x < num_zones]
# Zone brightness is not reported when powered off
if not self.is_on and hsbk[2] is None:

View file

@ -95,7 +95,7 @@ aiohue==1.5.0
aioimaplib==0.7.13
# homeassistant.components.light.lifx
aiolifx==0.6.1
aiolifx==0.6.3
# homeassistant.components.light.lifx
aiolifx_effects==0.1.2