Remove zwave cover invert workaround. Use config instead. (#6832)

This commit is contained in:
Andrey 2017-03-28 23:01:29 +03:00 committed by GitHub
parent b5336ed04e
commit fb8323f48d
4 changed files with 15 additions and 10 deletions

View File

@ -20,12 +20,13 @@ _LOGGER = logging.getLogger(__name__)
SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE
def get_device(values, **kwargs): def get_device(values, node_config, **kwargs):
"""Create zwave entity device.""" """Create zwave entity device."""
invert_buttons = node_config.get(zwave.CONF_INVERT_OPENCLOSE_BUTTONS)
if (values.primary.command_class == if (values.primary.command_class ==
zwave.const.COMMAND_CLASS_SWITCH_MULTILEVEL zwave.const.COMMAND_CLASS_SWITCH_MULTILEVEL
and values.primary.index == 0): and values.primary.index == 0):
return ZwaveRollershutter(values) return ZwaveRollershutter(values, invert_buttons)
elif (values.primary.command_class in [ elif (values.primary.command_class in [
zwave.const.COMMAND_CLASS_SWITCH_BINARY, zwave.const.COMMAND_CLASS_SWITCH_BINARY,
zwave.const.COMMAND_CLASS_BARRIER_OPERATOR]): zwave.const.COMMAND_CLASS_BARRIER_OPERATOR]):
@ -36,13 +37,14 @@ def get_device(values, **kwargs):
class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice): class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice):
"""Representation of an Zwave roller shutter.""" """Representation of an Zwave roller shutter."""
def __init__(self, values): def __init__(self, values, invert_buttons):
"""Initialize the zwave rollershutter.""" """Initialize the zwave rollershutter."""
ZWaveDeviceEntity.__init__(self, values, DOMAIN) ZWaveDeviceEntity.__init__(self, values, DOMAIN)
# pylint: disable=no-member # pylint: disable=no-member
self._open_id = None self._open_id = None
self._close_id = None self._close_id = None
self._current_position = None self._current_position = None
self._invert_buttons = invert_buttons
self._workaround = workaround.get_device_mapping(values.primary) self._workaround = workaround.get_device_mapping(values.primary)
if self._workaround: if self._workaround:
@ -56,10 +58,9 @@ class ZwaveRollershutter(zwave.ZWaveDeviceEntity, CoverDevice):
if self.values.open and self.values.close and \ if self.values.open and self.values.close and \
self._open_id is None and self._close_id is None: self._open_id is None and self._close_id is None:
if self._workaround == workaround.WORKAROUND_REVERSE_OPEN_CLOSE: if self._invert_buttons:
self._open_id = self.values.close.value_id self._open_id = self.values.close.value_id
self._close_id = self.values.open.value_id self._close_id = self.values.open.value_id
self._workaround = None
else: else:
self._open_id = self.values.open.value_id self._open_id = self.values.open.value_id
self._close_id = self.values.close.value_id self._close_id = self.values.close.value_id

View File

@ -45,6 +45,7 @@ CONF_POLLING_INTERVAL = 'polling_interval'
CONF_USB_STICK_PATH = 'usb_path' CONF_USB_STICK_PATH = 'usb_path'
CONF_CONFIG_PATH = 'config_path' CONF_CONFIG_PATH = 'config_path'
CONF_IGNORED = 'ignored' CONF_IGNORED = 'ignored'
CONF_INVERT_OPENCLOSE_BUTTONS = 'invert_openclose_buttons'
CONF_REFRESH_VALUE = 'refresh_value' CONF_REFRESH_VALUE = 'refresh_value'
CONF_REFRESH_DELAY = 'delay' CONF_REFRESH_DELAY = 'delay'
CONF_DEVICE_CONFIG = 'device_config' CONF_DEVICE_CONFIG = 'device_config'
@ -58,6 +59,7 @@ DEFAULT_CONF_USB_STICK_PATH = '/zwaveusbstick'
DEFAULT_POLLING_INTERVAL = 60000 DEFAULT_POLLING_INTERVAL = 60000
DEFAULT_DEBUG = False DEFAULT_DEBUG = False
DEFAULT_CONF_IGNORED = False DEFAULT_CONF_IGNORED = False
DEFAULT_CONF_INVERT_OPENCLOSE_BUTTONS = False
DEFAULT_CONF_REFRESH_VALUE = False DEFAULT_CONF_REFRESH_VALUE = False
DEFAULT_CONF_REFRESH_DELAY = 5 DEFAULT_CONF_REFRESH_DELAY = 5
@ -105,6 +107,8 @@ SET_WAKEUP_SCHEMA = vol.Schema({
DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema({ DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema({
vol.Optional(CONF_POLLING_INTENSITY): cv.positive_int, vol.Optional(CONF_POLLING_INTENSITY): cv.positive_int,
vol.Optional(CONF_IGNORED, default=DEFAULT_CONF_IGNORED): cv.boolean, vol.Optional(CONF_IGNORED, default=DEFAULT_CONF_IGNORED): cv.boolean,
vol.Optional(CONF_INVERT_OPENCLOSE_BUTTONS,
default=DEFAULT_CONF_INVERT_OPENCLOSE_BUTTONS): cv.boolean,
vol.Optional(CONF_REFRESH_VALUE, default=DEFAULT_CONF_REFRESH_VALUE): vol.Optional(CONF_REFRESH_VALUE, default=DEFAULT_CONF_REFRESH_VALUE):
cv.boolean, cv.boolean,
vol.Optional(CONF_REFRESH_DELAY, default=DEFAULT_CONF_REFRESH_DELAY): vol.Optional(CONF_REFRESH_DELAY, default=DEFAULT_CONF_REFRESH_DELAY):

View File

@ -30,7 +30,6 @@ WENZHOU_SLIM_SENSOR_MOTION_MTII = (
# Workarounds # Workarounds
WORKAROUND_NO_OFF_EVENT = 'trigger_no_off_event' WORKAROUND_NO_OFF_EVENT = 'trigger_no_off_event'
WORKAROUND_NO_POSITION = 'workaround_no_position' WORKAROUND_NO_POSITION = 'workaround_no_position'
WORKAROUND_REVERSE_OPEN_CLOSE = 'reverse_open_close'
WORKAROUND_REFRESH_NODE_ON_UPDATE = 'refresh_node_on_update' WORKAROUND_REFRESH_NODE_ON_UPDATE = 'refresh_node_on_update'
WORKAROUND_IGNORE = 'workaround_ignore' WORKAROUND_IGNORE = 'workaround_ignore'
@ -43,12 +42,10 @@ DEVICE_MAPPINGS_MTII = {
} }
SOMFY_ZRTSI_CONTROLLER_MT = (SOMFY, SOMFY_ZRTSI) SOMFY_ZRTSI_CONTROLLER_MT = (SOMFY, SOMFY_ZRTSI)
FIBARO_FGRM222_MT = (FIBARO, FGRM222_SHUTTER2)
# List of workarounds by (manufacturer_id, product_type) # List of workarounds by (manufacturer_id, product_type)
DEVICE_MAPPINGS_MT = { DEVICE_MAPPINGS_MT = {
SOMFY_ZRTSI_CONTROLLER_MT: WORKAROUND_NO_POSITION, SOMFY_ZRTSI_CONTROLLER_MT: WORKAROUND_NO_POSITION,
FIBARO_FGRM222_MT: WORKAROUND_REVERSE_OPEN_CLOSE,
} }

View File

@ -120,14 +120,17 @@ def test_roller_commands(mock_network, mock_openzwave):
@patch('homeassistant.components.zwave.NETWORK') @patch('homeassistant.components.zwave.NETWORK')
def test_roller_reverse_open_close(mock_network, mock_openzwave): def test_roller_reverse_open_close(mock_network, mock_openzwave):
"""Test position changed.""" """Test position changed."""
node = MockNode(manufacturer_id='010f', product_type='0301') node = MockNode()
value = MockValue(data=50, node=node, value = MockValue(data=50, node=node,
command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL)
open_value = MockValue(data=False, node=node) open_value = MockValue(data=False, node=node)
close_value = MockValue(data=False, node=node) close_value = MockValue(data=False, node=node)
values = MockEntityValues(primary=value, open=open_value, values = MockEntityValues(primary=value, open=open_value,
close=close_value, node=node) close=close_value, node=node)
device = zwave.get_device(node=node, values=values, node_config={}) device = zwave.get_device(
node=node,
values=values,
node_config={zwave.zwave.CONF_INVERT_OPENCLOSE_BUTTONS: True})
device.open_cover() device.open_cover()
assert mock_network.manager.pressButton.called assert mock_network.manager.pressButton.called