Add zwave.rename_node service ()

* 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
homeassistant/components

View file

@ -100,3 +100,13 @@ zwave:
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.
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 time
from pprint import pprint
import voluptuous as vol
from homeassistant.helpers import discovery
from homeassistant.const import (
@ -16,6 +17,8 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP)
from homeassistant.helpers.event import track_time_change
from homeassistant.util import convert, slugify
import homeassistant.config as conf_util
import homeassistant.helpers.config_validation as cv
DOMAIN = "zwave"
REQUIREMENTS = ['pydispatcher==2.0.5']
@ -40,6 +43,7 @@ SERVICE_SOFT_RESET = "soft_reset"
SERVICE_TEST_NETWORK = "test_network"
SERVICE_STOP_NETWORK = "stop_network"
SERVICE_START_NETWORK = "start_network"
SERVICE_RENAME_NODE = "rename_node"
EVENT_SCENE_ACTIVATED = "zwave.scene_activated"
EVENT_NODE_EVENT = "zwave.node_event"
@ -187,10 +191,15 @@ DISCOVERY_COMPONENTS = [
ATTR_NODE_ID = "node_id"
ATTR_VALUE_ID = "value_id"
ATTR_OBJECT_ID = "object_id"
ATTR_NAME = "name"
ATTR_SCENE_ID = "scene_id"
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
_LOGGER = logging.getLogger(__name__)
@ -272,6 +281,9 @@ def setup(hass, config):
# pylint: disable=global-statement, import-error
global NETWORK
descriptions = conf_util.load_yaml_config_file(
os.path.join(os.path.dirname(__file__), "services.yaml"))
try:
import libopenzwave
except ImportError:
@ -461,6 +473,16 @@ def setup(hass, config):
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):
"""Startup Z-Wave 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_STOP_NETWORK, stop_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
if autoheal: