Add zwave.rename_node service (#2923)
* Add zwave.rename_node service * Validate service data * Better schema
This commit is contained in:
parent
d70d1e1303
commit
520d4d5dc0
2 changed files with 36 additions and 1 deletions
|
@ -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'
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Add table
Reference in a new issue