diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 8de8c713f04..fa78f719557 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -275,7 +275,9 @@ async def async_setup(hass, config): ZWaveNetwork.SIGNAL_SCENE_EVENT, ZWaveNetwork.SIGNAL_NODE_EVENT, ZWaveNetwork.SIGNAL_AWAKE_NODES_QUERIED, - ZWaveNetwork.SIGNAL_ALL_NODES_QUERIED): + ZWaveNetwork.SIGNAL_ALL_NODES_QUERIED, + ZWaveNetwork + .SIGNAL_ALL_NODES_QUERIED_SOME_DEAD): pprint(_obj_to_dict(value)) print("") @@ -356,6 +358,12 @@ async def async_setup(hass, config): "have been queried") hass.bus.fire(const.EVENT_NETWORK_COMPLETE) + def network_complete_some_dead(): + """Handle the querying of all nodes on network.""" + _LOGGER.info("Z-Wave network is complete. All nodes on the network " + "have been queried, but some node are marked dead") + hass.bus.fire(const.EVENT_NETWORK_COMPLETE_SOME_DEAD) + dispatcher.connect( value_added, ZWaveNetwork.SIGNAL_VALUE_ADDED, weak=False) dispatcher.connect( @@ -364,6 +372,9 @@ async def async_setup(hass, config): network_ready, ZWaveNetwork.SIGNAL_AWAKE_NODES_QUERIED, weak=False) dispatcher.connect( network_complete, ZWaveNetwork.SIGNAL_ALL_NODES_QUERIED, weak=False) + dispatcher.connect( + network_complete_some_dead, + ZWaveNetwork.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD, weak=False) def add_node(service): """Switch into inclusion mode.""" diff --git a/homeassistant/components/zwave/const.py b/homeassistant/components/zwave/const.py index 775da8fbc51..b84f0287349 100644 --- a/homeassistant/components/zwave/const.py +++ b/homeassistant/components/zwave/const.py @@ -60,6 +60,7 @@ EVENT_SCENE_ACTIVATED = "zwave.scene_activated" EVENT_NODE_EVENT = "zwave.node_event" EVENT_NETWORK_READY = "zwave.network_ready" EVENT_NETWORK_COMPLETE = "zwave.network_complete" +EVENT_NETWORK_COMPLETE_SOME_DEAD = "zwave.network_complete_some_dead" EVENT_NETWORK_START = "zwave.network_start" EVENT_NETWORK_STOP = "zwave.network_stop" diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 2b3019b2f8d..a2290d8aabf 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -458,6 +458,33 @@ def test_network_complete(hass, mock_openzwave): assert len(events) == 1 +@asyncio.coroutine +def test_network_complete_some_dead(hass, mock_openzwave): + """Test Node network complete some dead event.""" + mock_receivers = [] + + def mock_connect(receiver, signal, *args, **kwargs): + if signal == MockNetwork.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD: + mock_receivers.append(receiver) + + with patch('pydispatch.dispatcher.connect', new=mock_connect): + yield from async_setup_component(hass, 'zwave', {'zwave': {}}) + + assert len(mock_receivers) == 1 + + events = [] + + def listener(event): + events.append(event) + + hass.bus.async_listen(const.EVENT_NETWORK_COMPLETE_SOME_DEAD, listener) + + hass.async_add_job(mock_receivers[0]) + yield from hass.async_block_till_done() + + assert len(events) == 1 + + class TestZWaveDeviceEntityValues(unittest.TestCase): """Tests for the ZWaveDeviceEntityValues helper.""" diff --git a/tests/mock/zwave.py b/tests/mock/zwave.py index 59d97ddb621..36735b1693b 100644 --- a/tests/mock/zwave.py +++ b/tests/mock/zwave.py @@ -88,7 +88,8 @@ class MockNetwork(MagicMock): SIGNAL_NODE_QUERIES_COMPLETE = 'mock_NodeQueriesComplete' SIGNAL_AWAKE_NODES_QUERIED = 'mock_AwakeNodesQueried' SIGNAL_ALL_NODES_QUERIED = 'mock_AllNodesQueried' - SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'mock_AllNodesQueriedSomeDead' + SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = \ + 'mock_AllNodesQueriedSomeDead' SIGNAL_MSG_COMPLETE = 'mock_MsgComplete' SIGNAL_NOTIFICATION = 'mock_Notification' SIGNAL_CONTROLLER_COMMAND = 'mock_ControllerCommand'