Skip to content

Commit

Permalink
Merge pull request #20559 from home-assistant/rc
Browse files Browse the repository at this point in the history
0.86.4
  • Loading branch information
balloob committed Jan 29, 2019
2 parents c78d3b6 + fe47253 commit aa29eeb
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 12 deletions.
2 changes: 1 addition & 1 deletion homeassistant/components/asuswrt.py
Expand Up @@ -14,7 +14,7 @@
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.discovery import async_load_platform

REQUIREMENTS = ['aioasuswrt==1.1.17']
REQUIREMENTS = ['aioasuswrt==1.1.18']

_LOGGER = logging.getLogger(__name__)

Expand Down
12 changes: 11 additions & 1 deletion homeassistant/components/hue/light.py
Expand Up @@ -41,6 +41,7 @@
}

ATTR_IS_HUE_GROUP = 'is_hue_group'
GAMUT_TYPE_UNAVAILABLE = 'None'
# Minimum Hue Bridge API version to support groups
# 1.4.0 introduced extended group info
# 1.12 introduced the state object for groups
Expand Down Expand Up @@ -221,14 +222,23 @@ def __init__(self, light, request_bridge_update, bridge, is_group=False):
if is_group:
self.is_osram = False
self.is_philips = False
self.gamut_typ = 'None'
self.gamut_typ = GAMUT_TYPE_UNAVAILABLE
self.gamut = None
else:
self.is_osram = light.manufacturername == 'OSRAM'
self.is_philips = light.manufacturername == 'Philips'
self.gamut_typ = self.light.colorgamuttype
self.gamut = self.light.colorgamut
_LOGGER.debug("Color gamut of %s: %s", self.name, str(self.gamut))
if self.gamut:
if not color.check_valid_gamut(self.gamut):
err = "Please check for software updates of the bridge " \
"and/or bulb in the Philips Hue App, " \
"Color gamut of %s: %s, not valid, " \
"setting gamut to None."
_LOGGER.warning(err, self.name, str(self.gamut))
self.gamut_typ = GAMUT_TYPE_UNAVAILABLE
self.gamut = None

@property
def unique_id(self):
Expand Down
15 changes: 11 additions & 4 deletions homeassistant/components/tellduslive/entry.py
Expand Up @@ -116,10 +116,17 @@ def unique_id(self) -> str:
def device_info(self):
"""Return device info."""
device = self._client.device_info(self.device.device_id)
return {
device_info = {
'identifiers': {('tellduslive', self.device.device_id)},
'name': self.device.name,
'model': device['model'].title(),
'manufacturer': device['protocol'].title(),
'via_hub': ('tellduslive', device.get('client')),
}
model = device.get('model')
if model is not None:
device_info['model'] = model.title()
protocol = device.get('protocol')
if protocol is not None:
device_info['manufacturer'] = protocol.title()
client = device.get('client')
if client is not None:
device_info['via_hub'] = ('tellduslive', client)
return device_info
2 changes: 1 addition & 1 deletion homeassistant/const.py
Expand Up @@ -2,7 +2,7 @@
"""Constants used by Home Assistant components."""
MAJOR_VERSION = 0
MINOR_VERSION = 86
PATCH_VERSION = '3'
PATCH_VERSION = '4'
__short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION)
__version__ = '{}.{}'.format(__short_version__, PATCH_VERSION)
REQUIRED_PYTHON_VER = (3, 5, 3)
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/helpers/config_validation.py
Expand Up @@ -156,7 +156,7 @@ def entity_id(value: Any) -> str:
value = string(value).lower()
if valid_entity_id(value):
return value
elif re.match(OLD_ENTITY_ID_VALIDATION, value):
if re.match(OLD_ENTITY_ID_VALIDATION, value):
# To ease the breaking change, we allow old slugs for now
# Remove after 0.94 or 1.0
fixed = '.'.join(util_slugify(part) for part in value.split('.', 1))
Expand Down
18 changes: 18 additions & 0 deletions homeassistant/util/color.py
Expand Up @@ -600,3 +600,21 @@ def check_point_in_lamps_reach(p: Tuple[float, float],
t = cross_product(v1, q) / cross_product(v1, v2)

return (s >= 0.0) and (t >= 0.0) and (s + t <= 1.0)


def check_valid_gamut(Gamut: GamutType) -> bool:
"""Check if the supplied gamut is valid."""
# Check if the three points of the supplied gamut are not on the same line.
v1 = XYPoint(Gamut.green.x - Gamut.red.x, Gamut.green.y - Gamut.red.y)
v2 = XYPoint(Gamut.blue.x - Gamut.red.x, Gamut.blue.y - Gamut.red.y)
not_on_line = cross_product(v1, v2) > 0.0001

# Check if all six coordinates of the gamut lie between 0 and 1.
red_valid = Gamut.red.x >= 0 and Gamut.red.x <= 1 and \
Gamut.red.y >= 0 and Gamut.red.y <= 1
green_valid = Gamut.green.x >= 0 and Gamut.green.x <= 1 and \
Gamut.green.y >= 0 and Gamut.green.y <= 1
blue_valid = Gamut.blue.x >= 0 and Gamut.blue.x <= 1 and \
Gamut.blue.y >= 0 and Gamut.blue.y <= 1

return not_on_line and red_valid and green_valid and blue_valid
2 changes: 1 addition & 1 deletion requirements_all.txt
Expand Up @@ -87,7 +87,7 @@ abodepy==0.15.0
afsapi==0.0.4

# homeassistant.components.asuswrt
aioasuswrt==1.1.17
aioasuswrt==1.1.18

# homeassistant.components.device_tracker.automatic
aioautomatic==0.6.5
Expand Down
12 changes: 9 additions & 3 deletions tests/components/hue/test_light.py
Expand Up @@ -701,7 +701,9 @@ def test_available():
"""Test available property."""
light = hue_light.HueLight(
light=Mock(state={'reachable': False},
raw=LIGHT_RAW),
raw=LIGHT_RAW,
colorgamuttype=LIGHT_GAMUT_TYPE,
colorgamut=LIGHT_GAMUT),
request_bridge_update=None,
bridge=Mock(allow_unreachable=False),
is_group=False,
Expand All @@ -711,7 +713,9 @@ def test_available():

light = hue_light.HueLight(
light=Mock(state={'reachable': False},
raw=LIGHT_RAW),
raw=LIGHT_RAW,
colorgamuttype=LIGHT_GAMUT_TYPE,
colorgamut=LIGHT_GAMUT),
request_bridge_update=None,
bridge=Mock(allow_unreachable=True),
is_group=False,
Expand All @@ -721,7 +725,9 @@ def test_available():

light = hue_light.HueLight(
light=Mock(state={'reachable': False},
raw=LIGHT_RAW),
raw=LIGHT_RAW,
colorgamuttype=LIGHT_GAMUT_TYPE,
colorgamut=LIGHT_GAMUT),
request_bridge_update=None,
bridge=Mock(allow_unreachable=False),
is_group=True,
Expand Down
20 changes: 20 additions & 0 deletions tests/util/test_color.py
Expand Up @@ -8,6 +8,18 @@
GAMUT = color_util.GamutType(color_util.XYPoint(0.704, 0.296),
color_util.XYPoint(0.2151, 0.7106),
color_util.XYPoint(0.138, 0.08))
GAMUT_INVALID_1 = color_util.GamutType(color_util.XYPoint(0.704, 0.296),
color_util.XYPoint(-0.201, 0.7106),
color_util.XYPoint(0.138, 0.08))
GAMUT_INVALID_2 = color_util.GamutType(color_util.XYPoint(0.704, 1.296),
color_util.XYPoint(0.2151, 0.7106),
color_util.XYPoint(0.138, 0.08))
GAMUT_INVALID_3 = color_util.GamutType(color_util.XYPoint(0.0, 0.0),
color_util.XYPoint(0.0, 0.0),
color_util.XYPoint(0.0, 0.0))
GAMUT_INVALID_4 = color_util.GamutType(color_util.XYPoint(0.1, 0.1),
color_util.XYPoint(0.3, 0.3),
color_util.XYPoint(0.7, 0.7))


class TestColorUtil(unittest.TestCase):
Expand Down Expand Up @@ -338,6 +350,14 @@ def test_color_rgb_to_hex(self):
assert color_util.color_rgb_to_hex(51, 153, 255) == '3399ff'
assert color_util.color_rgb_to_hex(255, 67.9204190, 0) == 'ff4400'

def test_gamut(self):
"""Test gamut functions."""
assert color_util.check_valid_gamut(GAMUT)
assert not color_util.check_valid_gamut(GAMUT_INVALID_1)
assert not color_util.check_valid_gamut(GAMUT_INVALID_2)
assert not color_util.check_valid_gamut(GAMUT_INVALID_3)
assert not color_util.check_valid_gamut(GAMUT_INVALID_4)


class ColorTemperatureMiredToKelvinTests(unittest.TestCase):
"""Test color_temperature_mired_to_kelvin."""
Expand Down

0 comments on commit aa29eeb

Please sign in to comment.