From 905f4bf994a30c2b1423cf70abc2114080848917 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 17 Feb 2017 01:19:22 +0200 Subject: [PATCH] Support zwave glob & domain device settings. (#6046) * Support zwave glob & domain device settings. * data[DATA_DEVICE_CONFIG].get() now always return non-None * Update test * Update tests2 * Lint fix --- homeassistant/components/light/zwave.py | 2 +- homeassistant/components/zwave/__init__.py | 15 +++++++++++++-- tests/components/zwave/test_init.py | 3 ++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/light/zwave.py b/homeassistant/components/light/zwave.py index 184688a7b96..89c25059d94 100644 --- a/homeassistant/components/light/zwave.py +++ b/homeassistant/components/light/zwave.py @@ -55,7 +55,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): node = zwave.NETWORK.nodes[discovery_info[zwave.const.ATTR_NODE_ID]] value = node.values[discovery_info[zwave.const.ATTR_VALUE_ID]] name = '{}.{}'.format(DOMAIN, zwave.object_id(value)) - node_config = hass.data[zwave.DATA_DEVICE_CONFIG].get(name) or {} + node_config = hass.data[zwave.DATA_DEVICE_CONFIG].get(name) refresh = node_config.get(zwave.CONF_REFRESH_VALUE) delay = node_config.get(zwave.CONF_REFRESH_DELAY) _LOGGER.debug('name=%s node_config=%s CONF_REFRESH_VALUE=%s' diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index b4ae7396414..482f39eeb0f 100755 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -16,10 +16,12 @@ from homeassistant.const import ( ATTR_BATTERY_LEVEL, ATTR_LOCATION, ATTR_ENTITY_ID, ATTR_WAKEUP, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP) from homeassistant.helpers.entity import Entity +from homeassistant.helpers.entity_values import EntityValues 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 + from . import const from . import workaround @@ -38,6 +40,8 @@ CONF_IGNORED = 'ignored' CONF_REFRESH_VALUE = 'refresh_value' CONF_REFRESH_DELAY = 'delay' CONF_DEVICE_CONFIG = 'device_config' +CONF_DEVICE_CONFIG_GLOB = 'device_config_glob' +CONF_DEVICE_CONFIG_DOMAIN = 'device_config_domain' DEFAULT_CONF_AUTOHEAL = True DEFAULT_CONF_USB_STICK_PATH = '/zwaveusbstick' @@ -175,6 +179,10 @@ CONFIG_SCHEMA = vol.Schema({ vol.Optional(CONF_CONFIG_PATH): cv.string, vol.Optional(CONF_DEVICE_CONFIG, default={}): vol.Schema({cv.entity_id: DEVICE_CONFIG_SCHEMA_ENTRY}), + vol.Optional(CONF_DEVICE_CONFIG_GLOB, default={}): + vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), + vol.Optional(CONF_DEVICE_CONFIG_DOMAIN, default={}): + vol.Schema({cv.string: DEVICE_CONFIG_SCHEMA_ENTRY}), vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean, vol.Optional(CONF_POLLING_INTERVAL, default=DEFAULT_POLLING_INTERVAL): cv.positive_int, @@ -296,7 +304,10 @@ def setup(hass, config): # Load configuration use_debug = config[DOMAIN].get(CONF_DEBUG) autoheal = config[DOMAIN].get(CONF_AUTOHEAL) - hass.data[DATA_DEVICE_CONFIG] = config[DOMAIN][CONF_DEVICE_CONFIG] + hass.data[DATA_DEVICE_CONFIG] = EntityValues( + config[DOMAIN][CONF_DEVICE_CONFIG], + config[DOMAIN][CONF_DEVICE_CONFIG_DOMAIN], + config[DOMAIN][CONF_DEVICE_CONFIG_GLOB]) # Setup options options = ZWaveOption( @@ -385,7 +396,7 @@ def setup(hass, config): component = workaround_component name = "{}.{}".format(component, object_id(value)) - node_config = hass.data[DATA_DEVICE_CONFIG].get(name) or {} + node_config = hass.data[DATA_DEVICE_CONFIG].get(name) if node_config.get(CONF_IGNORED): _LOGGER.info("Ignoring device %s", name) diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index 8114a872c2a..71f5a258cdc 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -43,4 +43,5 @@ def test_device_config(hass): for key, value in device_config.items() } - assert hass.data[DATA_DEVICE_CONFIG] == test_data + assert hass.data[DATA_DEVICE_CONFIG].get('light.kitchen') == \ + test_data.get('light.kitchen')