mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 09:17:10 +00:00
Z-Wave Lock Config Entry Support (#18209)
* Config Entry setup for zwave lock * fix merge conflict * lint * Update other tests * Fix tests * Remove debug line and unused import
This commit is contained in:
parent
3838be4cb8
commit
e87ecbd500
@ -8,8 +8,10 @@ import logging
|
|||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.core import callback
|
||||||
from homeassistant.components.lock import DOMAIN, LockDevice
|
from homeassistant.components.lock import DOMAIN, LockDevice
|
||||||
from homeassistant.components import zwave
|
from homeassistant.components import zwave
|
||||||
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -133,9 +135,18 @@ CLEAR_USERCODE_SCHEMA = vol.Schema({
|
|||||||
|
|
||||||
async def async_setup_platform(hass, config, async_add_entities,
|
async def async_setup_platform(hass, config, async_add_entities,
|
||||||
discovery_info=None):
|
discovery_info=None):
|
||||||
"""Set up the Z-Wave Lock platform."""
|
"""Old method of setting up Z-Wave locks."""
|
||||||
await zwave.async_setup_platform(
|
pass
|
||||||
hass, config, async_add_entities, discovery_info)
|
|
||||||
|
|
||||||
|
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]
|
network = hass.data[zwave.const.DATA_NETWORK]
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ DEFAULT_CONF_REFRESH_VALUE = False
|
|||||||
DEFAULT_CONF_REFRESH_DELAY = 5
|
DEFAULT_CONF_REFRESH_DELAY = 5
|
||||||
|
|
||||||
SUPPORTED_PLATFORMS = ['binary_sensor', 'climate', 'cover', 'fan',
|
SUPPORTED_PLATFORMS = ['binary_sensor', 'climate', 'cover', 'fan',
|
||||||
'light', 'sensor', 'switch']
|
'lock', 'light', 'sensor', 'switch']
|
||||||
|
|
||||||
RENAME_NODE_SCHEMA = vol.Schema({
|
RENAME_NODE_SCHEMA = vol.Schema({
|
||||||
vol.Required(const.ATTR_NODE_ID): vol.Coerce(int),
|
vol.Required(const.ATTR_NODE_ID): vol.Coerce(int),
|
||||||
|
@ -3,6 +3,7 @@ import asyncio
|
|||||||
|
|
||||||
from unittest.mock import patch, MagicMock
|
from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.lock import zwave
|
from homeassistant.components.lock import zwave
|
||||||
from homeassistant.components.zwave import const
|
from homeassistant.components.zwave import const
|
||||||
|
|
||||||
@ -184,15 +185,27 @@ def test_lock_alarm_level(mock_openzwave):
|
|||||||
'Tamper Alarm: Too many keypresses'
|
'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
|
@asyncio.coroutine
|
||||||
def test_lock_set_usercode_service(hass, mock_openzwave):
|
def test_lock_set_usercode_service(hass, mock_openzwave):
|
||||||
"""Test the zwave lock set_usercode service."""
|
"""Test the zwave lock set_usercode service."""
|
||||||
mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock()
|
mock_network = hass.data[zwave.zwave.DATA_NETWORK] = MagicMock()
|
||||||
|
|
||||||
node = MockNode(node_id=12)
|
node = MockNode(node_id=12)
|
||||||
value0 = MockValue(data=' ', node=node, index=0)
|
value0 = MockValue(data=' ', node=node, index=0)
|
||||||
value1 = MockValue(data=' ', node=node, index=1)
|
value1 = MockValue(data=' ', node=node, index=1)
|
||||||
yield from zwave.async_setup_platform(
|
|
||||||
hass, {}, MagicMock())
|
|
||||||
|
|
||||||
node.get_values.return_value = {
|
node.get_values.return_value = {
|
||||||
value0.value_id: value0,
|
value0.value_id: value0,
|
||||||
@ -202,6 +215,10 @@ def test_lock_set_usercode_service(hass, mock_openzwave):
|
|||||||
mock_network.nodes = {
|
mock_network.nodes = {
|
||||||
node.node_id: node
|
node.node_id: node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yield from setup_ozw(hass, mock_openzwave)
|
||||||
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
yield from hass.services.async_call(
|
yield from hass.services.async_call(
|
||||||
zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, {
|
zwave.DOMAIN, zwave.SERVICE_SET_USERCODE, {
|
||||||
const.ATTR_NODE_ID: node.node_id,
|
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)
|
node = MockNode(node_id=12)
|
||||||
value0 = MockValue(data=None, node=node, index=0)
|
value0 = MockValue(data=None, node=node, index=0)
|
||||||
value1 = MockValue(data='1234', node=node, index=1)
|
value1 = MockValue(data='1234', node=node, index=1)
|
||||||
yield from zwave.async_setup_platform(
|
|
||||||
hass, {}, MagicMock())
|
|
||||||
|
|
||||||
node.get_values.return_value = {
|
node.get_values.return_value = {
|
||||||
value0.value_id: value0,
|
value0.value_id: value0,
|
||||||
value1.value_id: value1,
|
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:
|
with patch.object(zwave, '_LOGGER') as mock_logger:
|
||||||
mock_network.nodes = {node.node_id: node}
|
mock_network.nodes = {node.node_id: node}
|
||||||
yield from hass.services.async_call(
|
yield from hass.services.async_call(
|
||||||
@ -262,8 +280,6 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
|
|||||||
node = MockNode(node_id=12)
|
node = MockNode(node_id=12)
|
||||||
value0 = MockValue(data=None, node=node, index=0)
|
value0 = MockValue(data=None, node=node, index=0)
|
||||||
value1 = MockValue(data='123', node=node, index=1)
|
value1 = MockValue(data='123', node=node, index=1)
|
||||||
yield from zwave.async_setup_platform(
|
|
||||||
hass, {}, MagicMock())
|
|
||||||
|
|
||||||
node.get_values.return_value = {
|
node.get_values.return_value = {
|
||||||
value0.value_id: value0,
|
value0.value_id: value0,
|
||||||
@ -273,6 +289,10 @@ def test_lock_clear_usercode_service(hass, mock_openzwave):
|
|||||||
mock_network.nodes = {
|
mock_network.nodes = {
|
||||||
node.node_id: node
|
node.node_id: node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
yield from setup_ozw(hass, mock_openzwave)
|
||||||
|
yield from hass.async_block_till_done()
|
||||||
|
|
||||||
yield from hass.services.async_call(
|
yield from hass.services.async_call(
|
||||||
zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, {
|
zwave.DOMAIN, zwave.SERVICE_CLEAR_USERCODE, {
|
||||||
const.ATTR_NODE_ID: node.node_id,
|
const.ATTR_NODE_ID: node.node_id,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user