Add zwave.rename_node service (#2923)

* Add zwave.rename_node service

* Validate service data

* Better schema
This commit is contained in:
Jesse Newland 2016-08-21 16:36:44 -05:00 committed by Paulus Schoutsen
parent d70d1e1303
commit 520d4d5dc0
2 changed files with 36 additions and 1 deletions

View file

@ -100,3 +100,13 @@ zwave:
test_network: test_network:
description: This will send test to nodes in the zwave network. This will greatly slow down the zwave network while it is being processed. Refer to OZW.log for details. description: This will send test to nodes in the zwave network. This will greatly slow down the zwave network while it is being processed. Refer to OZW.log for details.
rename_node:
description: Set the name of a node.
fields:
entity_id:
description: Name(s) of entities to to rename
example: 'light.leviton_vrmx11lz_multilevel_scene_switch_level_40'
name:
description: New Name
example: 'kitchen'

View file

@ -8,6 +8,7 @@ import logging
import os.path import os.path
import time import time
from pprint import pprint from pprint import pprint
import voluptuous as vol
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
from homeassistant.const import ( from homeassistant.const import (
@ -16,6 +17,8 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP) EVENT_HOMEASSISTANT_STOP)
from homeassistant.helpers.event import track_time_change from homeassistant.helpers.event import track_time_change
from homeassistant.util import convert, slugify from homeassistant.util import convert, slugify
import homeassistant.config as conf_util
import homeassistant.helpers.config_validation as cv
DOMAIN = "zwave" DOMAIN = "zwave"
REQUIREMENTS = ['pydispatcher==2.0.5'] REQUIREMENTS = ['pydispatcher==2.0.5']
@ -40,6 +43,7 @@ SERVICE_SOFT_RESET = "soft_reset"
SERVICE_TEST_NETWORK = "test_network" SERVICE_TEST_NETWORK = "test_network"
SERVICE_STOP_NETWORK = "stop_network" SERVICE_STOP_NETWORK = "stop_network"
SERVICE_START_NETWORK = "start_network" SERVICE_START_NETWORK = "start_network"
SERVICE_RENAME_NODE = "rename_node"
EVENT_SCENE_ACTIVATED = "zwave.scene_activated" EVENT_SCENE_ACTIVATED = "zwave.scene_activated"
EVENT_NODE_EVENT = "zwave.node_event" EVENT_NODE_EVENT = "zwave.node_event"
@ -187,10 +191,15 @@ DISCOVERY_COMPONENTS = [
ATTR_NODE_ID = "node_id" ATTR_NODE_ID = "node_id"
ATTR_VALUE_ID = "value_id" ATTR_VALUE_ID = "value_id"
ATTR_OBJECT_ID = "object_id" ATTR_OBJECT_ID = "object_id"
ATTR_NAME = "name"
ATTR_SCENE_ID = "scene_id" ATTR_SCENE_ID = "scene_id"
ATTR_BASIC_LEVEL = "basic_level" ATTR_BASIC_LEVEL = "basic_level"
RENAME_NODE_SCHEMA = vol.Schema({
vol.Required(ATTR_ENTITY_ID): cv.entity_id,
vol.Required(ATTR_NAME): cv.string,
})
NETWORK = None NETWORK = None
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -272,6 +281,9 @@ def setup(hass, config):
# pylint: disable=global-statement, import-error # pylint: disable=global-statement, import-error
global NETWORK global NETWORK
descriptions = conf_util.load_yaml_config_file(
os.path.join(os.path.dirname(__file__), "services.yaml"))
try: try:
import libopenzwave import libopenzwave
except ImportError: except ImportError:
@ -461,6 +473,16 @@ def setup(hass, config):
NETWORK.stop() NETWORK.stop()
hass.bus.fire(EVENT_NETWORK_STOP) hass.bus.fire(EVENT_NETWORK_STOP)
def rename_node(service):
"""Rename a node."""
state = hass.states.get(service.data.get(ATTR_ENTITY_ID))
node_id = state.attributes.get(ATTR_NODE_ID)
node = NETWORK.nodes[node_id]
name = service.data.get(ATTR_NAME)
node.name = name
_LOGGER.info(
"Renamed ZWave node %d to %s", node_id, name)
def start_zwave(_service_or_event): def start_zwave(_service_or_event):
"""Startup Z-Wave network.""" """Startup Z-Wave network."""
_LOGGER.info("Starting ZWave network.") _LOGGER.info("Starting ZWave network.")
@ -505,6 +527,9 @@ def setup(hass, config):
hass.services.register(DOMAIN, SERVICE_TEST_NETWORK, test_network) hass.services.register(DOMAIN, SERVICE_TEST_NETWORK, test_network)
hass.services.register(DOMAIN, SERVICE_STOP_NETWORK, stop_zwave) hass.services.register(DOMAIN, SERVICE_STOP_NETWORK, stop_zwave)
hass.services.register(DOMAIN, SERVICE_START_NETWORK, start_zwave) hass.services.register(DOMAIN, SERVICE_START_NETWORK, start_zwave)
hass.services.register(DOMAIN, SERVICE_RENAME_NODE, rename_node,
descriptions[DOMAIN][SERVICE_RENAME_NODE],
schema=RENAME_NODE_SCHEMA)
# Setup autoheal # Setup autoheal
if autoheal: if autoheal: