From 17a8dd3f7030a1b91e80225840f35d0edce2f114 Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 5 Oct 2016 07:04:19 +0200 Subject: [PATCH] Add set_config_parameter service (#3696) --- homeassistant/components/zwave/__init__.py | 23 ++++++++++++++++++++ homeassistant/components/zwave/const.py | 4 ++++ homeassistant/components/zwave/services.yaml | 11 ++++++++++ 3 files changed, 38 insertions(+) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index d5080752eab..5aa9c5dc132 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -117,6 +117,12 @@ RENAME_NODE_SCHEMA = vol.Schema({ vol.Required(ATTR_ENTITY_ID): cv.entity_id, vol.Required(const.ATTR_NAME): cv.string, }) +SET_CONFIG_PARAMETER_SCHEMA = vol.Schema({ + vol.Required(ATTR_ENTITY_ID): cv.entity_id, + vol.Required(const.ATTR_CONFIG_PARAMETER): vol.Coerce(int), + vol.Required(const.ATTR_CONFIG_VALUE): vol.Coerce(int), + vol.Optional(const.ATTR_CONFIG_SIZE): vol.Coerce(int) +}) _LOGGER = logging.getLogger(__name__) @@ -399,6 +405,18 @@ def setup(hass, config): _LOGGER.info( "Renamed ZWave node %d to %s", node_id, name) + def set_config_parameter(service): + """Set a config parameter to a node.""" + state = hass.states.get(service.data.get(ATTR_ENTITY_ID)) + node_id = state.attributes.get(const.ATTR_NODE_ID) + node = NETWORK.nodes[node_id] + param = service.data.get(const.ATTR_CONFIG_PARAMETER) + value = service.data.get(const.ATTR_CONFIG_VALUE) + size = service.data.get(const.ATTR_CONFIG_SIZE, 2) + node.set_config_param(param, value, size) + _LOGGER.info("Setting config parameter %s on Node %s " + "with value %s and size=%s", param, node_id, value, size) + def start_zwave(_service_or_event): """Startup Z-Wave network.""" _LOGGER.info("Starting ZWave network.") @@ -459,6 +477,11 @@ def setup(hass, config): hass.services.register(DOMAIN, const.SERVICE_RENAME_NODE, rename_node, descriptions[const.SERVICE_RENAME_NODE], schema=RENAME_NODE_SCHEMA) + hass.services.register(DOMAIN, const.SERVICE_SET_CONFIG_PARAMETER, + set_config_parameter, + descriptions[ + const.SERVICE_SET_CONFIG_PARAMETER], + schema=SET_CONFIG_PARAMETER_SCHEMA) # Setup autoheal if autoheal: diff --git a/homeassistant/components/zwave/const.py b/homeassistant/components/zwave/const.py index 155bc545ad4..6b5c5fc55e5 100644 --- a/homeassistant/components/zwave/const.py +++ b/homeassistant/components/zwave/const.py @@ -6,6 +6,9 @@ ATTR_OBJECT_ID = "object_id" ATTR_NAME = "name" ATTR_SCENE_ID = "scene_id" ATTR_BASIC_LEVEL = "basic_level" +ATTR_CONFIG_PARAMETER = "parameter" +ATTR_CONFIG_SIZE = "size" +ATTR_CONFIG_VALUE = "value" NETWORK_READY_WAIT_SECS = 30 SERVICE_ADD_NODE = "add_node" @@ -15,6 +18,7 @@ SERVICE_CANCEL_COMMAND = "cancel_command" SERVICE_HEAL_NETWORK = "heal_network" SERVICE_SOFT_RESET = "soft_reset" SERVICE_TEST_NETWORK = "test_network" +SERVICE_SET_CONFIG_PARAMETER = "set_config_parameter" SERVICE_STOP_NETWORK = "stop_network" SERVICE_START_NETWORK = "start_network" SERVICE_RENAME_NODE = "rename_node" diff --git a/homeassistant/components/zwave/services.yaml b/homeassistant/components/zwave/services.yaml index 234faf0a87d..2542502badb 100644 --- a/homeassistant/components/zwave/services.yaml +++ b/homeassistant/components/zwave/services.yaml @@ -13,6 +13,17 @@ heal_network: remove_node: description: Remove a node from the Z-Wave network. Refer to OZW.log for details. +set_config_parameter: + description: Set a config parameter to a node on the Z-Wave network. + fields: + entity_id: + description: Name of entity to set config parameter to. + parameter: + description: Parameter number to set (integer). + value: + description: Value to set on parameter. (integer). + size: + description: (Optional) The size of the value. Defaults to 2. start_network: description: Start the Z-Wave network. This might take a while, depending on how big your Z-Wave network is.