mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 04:07:08 +00:00
parent
3f38b9e52f
commit
8325f9db8a
@ -229,7 +229,6 @@ omit =
|
||||
homeassistant/components/light/yeelightsunflower.py
|
||||
homeassistant/components/light/piglow.py
|
||||
homeassistant/components/light/zengge.py
|
||||
homeassistant/components/light/zwave.py
|
||||
homeassistant/components/lirc.py
|
||||
homeassistant/components/lock/nuki.py
|
||||
homeassistant/components/lock/zwave.py
|
||||
|
@ -264,10 +264,10 @@ class ZwaveColorLight(ZwaveDimmer):
|
||||
if self._zw098:
|
||||
if kwargs[ATTR_COLOR_TEMP] > TEMP_MID_HASS:
|
||||
self._ct = TEMP_WARM_HASS
|
||||
rgbw = b'#000000FF00'
|
||||
rgbw = b'#000000ff00'
|
||||
else:
|
||||
self._ct = TEMP_COLD_HASS
|
||||
rgbw = b'#00000000FF'
|
||||
rgbw = b'#00000000ff'
|
||||
|
||||
elif ATTR_RGB_COLOR in kwargs:
|
||||
self._rgb = kwargs[ATTR_RGB_COLOR]
|
||||
|
@ -1,6 +1,10 @@
|
||||
"""Test Z-Wave lights."""
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
import homeassistant.components.zwave
|
||||
from homeassistant.components.zwave import const
|
||||
from homeassistant.components.light import zwave, ATTR_BRIGHTNESS
|
||||
from homeassistant.components.light import (
|
||||
zwave, ATTR_BRIGHTNESS, ATTR_COLOR_TEMP, ATTR_RGB_COLOR)
|
||||
|
||||
from tests.mock.zwave import (
|
||||
MockNode, MockValue, MockEntityValues, value_changed)
|
||||
@ -24,6 +28,7 @@ def test_get_device_detects_dimmer(mock_openzwave):
|
||||
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
assert isinstance(device, zwave.ZwaveDimmer)
|
||||
assert device.supported_features == zwave.SUPPORT_ZWAVE_DIMMER
|
||||
|
||||
|
||||
def test_get_device_detects_colorlight(mock_openzwave):
|
||||
@ -34,6 +39,18 @@ def test_get_device_detects_colorlight(mock_openzwave):
|
||||
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
assert isinstance(device, zwave.ZwaveColorLight)
|
||||
assert device.supported_features == zwave.SUPPORT_ZWAVE_COLOR
|
||||
|
||||
|
||||
def test_get_device_detects_zw098(mock_openzwave):
|
||||
"""Test get_device returns a zw098 color light."""
|
||||
node = MockNode(manufacturer_id='0086', product_id='0062',
|
||||
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
values = MockLightValues(primary=value)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
assert isinstance(device, zwave.ZwaveColorLight)
|
||||
assert device.supported_features == zwave.SUPPORT_ZWAVE_COLORTEMP
|
||||
|
||||
|
||||
def test_dimmer_turn_on(mock_openzwave):
|
||||
@ -61,6 +78,21 @@ def test_dimmer_turn_on(mock_openzwave):
|
||||
assert brightness == 46 # int(120 / 255 * 99)
|
||||
|
||||
|
||||
def test_dimmer_turn_off(mock_openzwave):
|
||||
"""Test turning off a dimmable Z-Wave light."""
|
||||
node = MockNode()
|
||||
value = MockValue(data=46, node=node)
|
||||
values = MockLightValues(primary=value)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
device.turn_off()
|
||||
|
||||
assert node.set_dimmer.called
|
||||
value_id, brightness = node.set_dimmer.mock_calls[0][1]
|
||||
assert value_id == value.value_id
|
||||
assert brightness == 0
|
||||
|
||||
|
||||
def test_dimmer_value_changed(mock_openzwave):
|
||||
"""Test value changed for dimmer lights."""
|
||||
node = MockNode()
|
||||
@ -75,3 +107,218 @@ def test_dimmer_value_changed(mock_openzwave):
|
||||
|
||||
assert device.is_on
|
||||
assert device.brightness == 118
|
||||
|
||||
|
||||
def test_dimmer_refresh_value(mock_openzwave):
|
||||
"""Test value changed for dimmer lights."""
|
||||
node = MockNode()
|
||||
value = MockValue(data=0, node=node)
|
||||
values = MockLightValues(primary=value)
|
||||
device = zwave.get_device(node=node, values=values, node_config={
|
||||
homeassistant.components.zwave.CONF_REFRESH_VALUE: True,
|
||||
homeassistant.components.zwave.CONF_REFRESH_DELAY: 5,
|
||||
})
|
||||
|
||||
assert not device.is_on
|
||||
|
||||
with patch.object(zwave, 'Timer', MagicMock()) as mock_timer:
|
||||
value.data = 46
|
||||
value_changed(value)
|
||||
|
||||
assert not device.is_on
|
||||
assert mock_timer.called
|
||||
assert len(mock_timer.mock_calls) == 2
|
||||
timeout, callback = mock_timer.mock_calls[0][1][:2]
|
||||
assert timeout == 5
|
||||
assert mock_timer().start.called
|
||||
assert len(mock_timer().start.mock_calls) == 1
|
||||
|
||||
with patch.object(zwave, 'Timer', MagicMock()) as mock_timer_2:
|
||||
value_changed(value)
|
||||
assert not device.is_on
|
||||
assert mock_timer().cancel.called
|
||||
assert len(mock_timer_2.mock_calls) == 2
|
||||
timeout, callback = mock_timer_2.mock_calls[0][1][:2]
|
||||
assert timeout == 5
|
||||
assert mock_timer_2().start.called
|
||||
assert len(mock_timer_2().start.mock_calls) == 1
|
||||
|
||||
callback()
|
||||
assert device.is_on
|
||||
assert device.brightness == 118
|
||||
|
||||
|
||||
def test_set_rgb_color(mock_openzwave):
|
||||
"""Test setting zwave light color."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB only
|
||||
color_channels = MockValue(data=0x1c, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert color.data == b'#0000000000'
|
||||
|
||||
device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})
|
||||
|
||||
assert color.data == b'#c896640000'
|
||||
|
||||
|
||||
def test_set_rgbw_color(mock_openzwave):
|
||||
"""Test setting zwave light color."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGBW
|
||||
color_channels = MockValue(data=0x1d, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert color.data == b'#0000000000'
|
||||
|
||||
device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})
|
||||
|
||||
assert color.data == b'#c86400c800'
|
||||
|
||||
|
||||
def test_zw098_set_color_temp(mock_openzwave):
|
||||
"""Test setting zwave light color."""
|
||||
node = MockNode(manufacturer_id='0086', product_id='0062',
|
||||
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB, warm white, cold white
|
||||
color_channels = MockValue(data=0x1f, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert color.data == b'#0000000000'
|
||||
|
||||
device.turn_on(**{ATTR_COLOR_TEMP: 200})
|
||||
|
||||
assert color.data == b'#00000000ff'
|
||||
|
||||
device.turn_on(**{ATTR_COLOR_TEMP: 400})
|
||||
|
||||
assert color.data == b'#000000ff00'
|
||||
|
||||
|
||||
def test_rgb_not_supported(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts color temperature only
|
||||
color_channels = MockValue(data=0x01, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color is None
|
||||
|
||||
|
||||
def test_no_color_value(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
values = MockLightValues(primary=value)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color is None
|
||||
|
||||
|
||||
def test_no_color_channels_value(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
values = MockLightValues(primary=value, color=color)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color is None
|
||||
|
||||
|
||||
def test_rgb_value_changed(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB only
|
||||
color_channels = MockValue(data=0x1c, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color == [0, 0, 0]
|
||||
|
||||
color.data = b'#c896640000'
|
||||
value_changed(color)
|
||||
|
||||
assert device.rgb_color == [200, 150, 100]
|
||||
|
||||
|
||||
def test_rgbww_value_changed(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB, Warm White
|
||||
color_channels = MockValue(data=0x1d, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color == [0, 0, 0]
|
||||
|
||||
color.data = b'#c86400c800'
|
||||
value_changed(color)
|
||||
|
||||
assert device.rgb_color == [200, 150, 100]
|
||||
|
||||
|
||||
def test_rgbcw_value_changed(mock_openzwave):
|
||||
"""Test value changed for rgb lights."""
|
||||
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB, Cold White
|
||||
color_channels = MockValue(data=0x1e, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.rgb_color == [0, 0, 0]
|
||||
|
||||
color.data = b'#c86400c800'
|
||||
value_changed(color)
|
||||
|
||||
assert device.rgb_color == [200, 150, 100]
|
||||
|
||||
|
||||
def test_ct_value_changed(mock_openzwave):
|
||||
"""Test value changed for zw098 lights."""
|
||||
node = MockNode(manufacturer_id='0086', product_id='0062',
|
||||
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||
value = MockValue(data=0, node=node)
|
||||
color = MockValue(data=b'#0000000000', node=node)
|
||||
# Suppoorts RGB, Cold White
|
||||
color_channels = MockValue(data=0x1f, node=node)
|
||||
values = MockLightValues(primary=value, color=color,
|
||||
color_channels=color_channels)
|
||||
device = zwave.get_device(node=node, values=values, node_config={})
|
||||
|
||||
assert device.color_temp == zwave.TEMP_MID_HASS
|
||||
|
||||
color.data = b'#000000ff00'
|
||||
value_changed(color)
|
||||
|
||||
assert device.color_temp == zwave.TEMP_WARM_HASS
|
||||
|
||||
color.data = b'#00000000ff'
|
||||
value_changed(color)
|
||||
|
||||
assert device.color_temp == zwave.TEMP_COLD_HASS
|
||||
|
@ -78,6 +78,10 @@ class MockValue(MagicMock):
|
||||
"""Create child mocks with right MagicMock class."""
|
||||
return MagicMock(**kw)
|
||||
|
||||
def refresh(self):
|
||||
"""Mock refresh of node value."""
|
||||
value_changed(self)
|
||||
|
||||
|
||||
class MockEntityValues():
|
||||
"""Mock Z-Wave entity values."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user