diff --git a/homeassistant/components/lock/zwave.py b/homeassistant/components/lock/zwave.py index 2ea8300fb9a4a..796c62377f186 100644 --- a/homeassistant/components/lock/zwave.py +++ b/homeassistant/components/lock/zwave.py @@ -8,8 +8,10 @@ import voluptuous as vol +from homeassistant.core import callback from homeassistant.components.lock import DOMAIN, LockDevice from homeassistant.components import zwave +from homeassistant.helpers.dispatcher import async_dispatcher_connect import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -133,9 +135,18 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): - """Set up the Z-Wave Lock platform.""" - await zwave.async_setup_platform( - hass, config, async_add_entities, discovery_info) + """Old method of setting up Z-Wave locks.""" + pass + + +async def async_setup_entry(hass, config_entry, async_add_entities): + """Set up Z-Wave Lock from Config Entry.""" + @callback + def async_add_lock(lock): + """Add Z-Wave Lock.""" + async_add_entities([lock]) + + async_dispatcher_connect(hass, 'zwave_new_lock', async_add_lock) network = hass.data[zwave.const.DATA_NETWORK] diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index a27d2112dcda7..4fb987fe56727 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -67,7 +67,7 @@ DEFAULT_CONF_REFRESH_DELAY = 5 SUPPORTED_PLATFORMS = ['binary_sensor', 'climate', 'cover', 'fan', - 'light', 'sensor', 'switch'] + 'lock', 'light', 'sensor', 'switch'] RENAME_NODE_SCHEMA = vol.Schema({ vol.Required(const.ATTR_NODE_ID): vol.Coerce(int), diff --git a/tests/components/lock/test_zwave.py b/tests/components/lock/test_zwave.py index 89ce034d4450a..e9ca5fb2b1f0d 100644 --- a/tests/components/lock/test_zwave.py +++ b/tests/components/lock/test_zwave.py @@ -3,6 +3,7 @@ from unittest.mock import patch, MagicMock +from homeassistant import config_entries from homeassistant.components.lock import zwave from homeassistant.components.zwave import const @@ -184,15 +185,27 @@ def test_lock_alarm_level(mock_openzwave): 'Tamper Alarm: Too many keypresses' +@asyncio.coroutine +def setup_ozw(hass, mock_openzwave): + """Set up the mock ZWave config entry.""" + hass.config.components.add('zwave') + config_entry = config_entries.ConfigEntry(1, 'zwave', 'Mock Title', { + 'usb_path': 'mock-path', + 'network_key': 'mock-key' + }, 'test', config_entries.CONN_CLASS_LOCAL_PUSH) + yield from hass.config_entries.async_forward_entry_setup(config_entry, + 'lock') + yield from hass.async_block_till_done() + + @asyncio.coroutine def test_lock_set_usercode_service(hass, mock_openzwave): """Test the zwave lock set_usercode service.""" mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock() + node = MockNode(node_id=12) value0 = MockValue(data=' ', node=node, index=0) value1 = MockValue(data=' ', node=node, index=1) - yield from zwave.async_setup_platform( - hass, {}, MagicMock()) node.get_values.return_value = { value0.value_id: value0, @@ -202,6 +215,10 @@ def test_lock_set_usercode_service(hass, mock_openzwave): mock_network.nodes = { node.node_id: node } + + yield from setup_ozw(hass, mock_openzwave) + yield from hass.async_block_till_done() + yield from hass.services.async_call( zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, { const.ATTR_NODE_ID: node.node_id, @@ -233,14 +250,15 @@ def test_lock_get_usercode_service(hass, mock_openzwave): node = MockNode(node_id=12) value0 = MockValue(data=None, node=node, index=0) value1 = MockValue(data='1234', node=node, index=1) - yield from zwave.async_setup_platform( - hass, {}, MagicMock()) node.get_values.return_value = { value0.value_id: value0, value1.value_id: value1, } + yield from setup_ozw(hass, mock_openzwave) + yield from hass.async_block_till_done() + with patch.object(zwave, '_LOGGER') as mock_logger: mock_network.nodes = {node.node_id: node} yield from hass.services.async_call( @@ -262,8 +280,6 @@ def test_lock_clear_usercode_service(hass, mock_openzwave): node = MockNode(node_id=12) value0 = MockValue(data=None, node=node, index=0) value1 = MockValue(data='123', node=node, index=1) - yield from zwave.async_setup_platform( - hass, {}, MagicMock()) node.get_values.return_value = { value0.value_id: value0, @@ -273,6 +289,10 @@ def test_lock_clear_usercode_service(hass, mock_openzwave): mock_network.nodes = { node.node_id: node } + + yield from setup_ozw(hass, mock_openzwave) + yield from hass.async_block_till_done() + yield from hass.services.async_call( zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, { const.ATTR_NODE_ID: node.node_id,