Z-Wave: Rename customize to device_config [Breaking change] (#5933)
* Z-Wave: Rename customize to device_config * Fix light * Make entity id not requiredpull/5939/head
parent
41849eab06
commit
8ca3ca8564
|
@ -17,7 +17,6 @@ from homeassistant.const import STATE_OFF, STATE_ON
|
||||||
from homeassistant.util.color import HASS_COLOR_MAX, HASS_COLOR_MIN, \
|
from homeassistant.util.color import HASS_COLOR_MAX, HASS_COLOR_MIN, \
|
||||||
color_temperature_mired_to_kelvin, color_temperature_to_rgb, \
|
color_temperature_mired_to_kelvin, color_temperature_to_rgb, \
|
||||||
color_rgb_to_rgbw, color_rgbw_to_rgb
|
color_rgb_to_rgbw, color_rgbw_to_rgb
|
||||||
from homeassistant.helpers import customize
|
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -56,7 +55,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
|
||||||
node = zwave.NETWORK.nodes[discovery_info[zwave.const.ATTR_NODE_ID]]
|
node = zwave.NETWORK.nodes[discovery_info[zwave.const.ATTR_NODE_ID]]
|
||||||
value = node.values[discovery_info[zwave.const.ATTR_VALUE_ID]]
|
value = node.values[discovery_info[zwave.const.ATTR_VALUE_ID]]
|
||||||
name = '{}.{}'.format(DOMAIN, zwave.object_id(value))
|
name = '{}.{}'.format(DOMAIN, zwave.object_id(value))
|
||||||
node_config = customize.get_overrides(hass, zwave.DOMAIN, name)
|
node_config = hass.data[zwave.DATA_DEVICE_CONFIG].get(name)
|
||||||
refresh = node_config.get(zwave.CONF_REFRESH_VALUE)
|
refresh = node_config.get(zwave.CONF_REFRESH_VALUE)
|
||||||
delay = node_config.get(zwave.CONF_REFRESH_DELAY)
|
delay = node_config.get(zwave.CONF_REFRESH_DELAY)
|
||||||
_LOGGER.debug('name=%s node_config=%s CONF_REFRESH_VALUE=%s'
|
_LOGGER.debug('name=%s node_config=%s CONF_REFRESH_VALUE=%s'
|
||||||
|
|
|
@ -11,11 +11,10 @@ from pprint import pprint
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.helpers import discovery, customize
|
from homeassistant.helpers import discovery
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_BATTERY_LEVEL, ATTR_LOCATION, ATTR_ENTITY_ID, ATTR_WAKEUP,
|
ATTR_BATTERY_LEVEL, ATTR_LOCATION, ATTR_ENTITY_ID, ATTR_WAKEUP,
|
||||||
CONF_CUSTOMIZE, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP)
|
||||||
CONF_ENTITY_ID)
|
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
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
|
||||||
|
@ -38,6 +37,7 @@ CONF_CONFIG_PATH = 'config_path'
|
||||||
CONF_IGNORED = 'ignored'
|
CONF_IGNORED = 'ignored'
|
||||||
CONF_REFRESH_VALUE = 'refresh_value'
|
CONF_REFRESH_VALUE = 'refresh_value'
|
||||||
CONF_REFRESH_DELAY = 'delay'
|
CONF_REFRESH_DELAY = 'delay'
|
||||||
|
CONF_DEVICE_CONFIG = 'device_config'
|
||||||
|
|
||||||
DEFAULT_CONF_AUTOHEAL = True
|
DEFAULT_CONF_AUTOHEAL = True
|
||||||
DEFAULT_CONF_USB_STICK_PATH = '/zwaveusbstick'
|
DEFAULT_CONF_USB_STICK_PATH = '/zwaveusbstick'
|
||||||
|
@ -49,6 +49,7 @@ DEFAULT_CONF_REFRESH_DELAY = 2
|
||||||
DOMAIN = 'zwave'
|
DOMAIN = 'zwave'
|
||||||
|
|
||||||
NETWORK = None
|
NETWORK = None
|
||||||
|
DATA_DEVICE_CONFIG = 'zwave_device_config'
|
||||||
|
|
||||||
# List of tuple (DOMAIN, discovered service, supported command classes,
|
# List of tuple (DOMAIN, discovered service, supported command classes,
|
||||||
# value type, genre type, specific device class).
|
# value type, genre type, specific device class).
|
||||||
|
@ -159,8 +160,7 @@ SET_WAKEUP_SCHEMA = vol.Schema({
|
||||||
vol.All(vol.Coerce(int), cv.positive_int),
|
vol.All(vol.Coerce(int), cv.positive_int),
|
||||||
})
|
})
|
||||||
|
|
||||||
_ZWAVE_CUSTOMIZE_SCHEMA_ENTRY = vol.Schema({
|
_DEVICE_CONFIG_SCHEMA_ENTRY = vol.Schema({
|
||||||
vol.Required(CONF_ENTITY_ID): cv.match_all,
|
|
||||||
vol.Optional(CONF_POLLING_INTENSITY): cv.positive_int,
|
vol.Optional(CONF_POLLING_INTENSITY): cv.positive_int,
|
||||||
vol.Optional(CONF_IGNORED, default=DEFAULT_CONF_IGNORED): cv.boolean,
|
vol.Optional(CONF_IGNORED, default=DEFAULT_CONF_IGNORED): cv.boolean,
|
||||||
vol.Optional(CONF_REFRESH_VALUE, default=DEFAULT_CONF_REFRESH_VALUE):
|
vol.Optional(CONF_REFRESH_VALUE, default=DEFAULT_CONF_REFRESH_VALUE):
|
||||||
|
@ -173,9 +173,8 @@ CONFIG_SCHEMA = vol.Schema({
|
||||||
DOMAIN: vol.Schema({
|
DOMAIN: vol.Schema({
|
||||||
vol.Optional(CONF_AUTOHEAL, default=DEFAULT_CONF_AUTOHEAL): cv.boolean,
|
vol.Optional(CONF_AUTOHEAL, default=DEFAULT_CONF_AUTOHEAL): cv.boolean,
|
||||||
vol.Optional(CONF_CONFIG_PATH): cv.string,
|
vol.Optional(CONF_CONFIG_PATH): cv.string,
|
||||||
vol.Optional(CONF_CUSTOMIZE, default=[]):
|
vol.Optional(CONF_DEVICE_CONFIG, default={}):
|
||||||
vol.All(customize.CUSTOMIZE_SCHEMA,
|
_DEVICE_CONFIG_SCHEMA_ENTRY,
|
||||||
[_ZWAVE_CUSTOMIZE_SCHEMA_ENTRY]),
|
|
||||||
vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean,
|
vol.Optional(CONF_DEBUG, default=DEFAULT_DEBUG): cv.boolean,
|
||||||
vol.Optional(CONF_POLLING_INTERVAL, default=DEFAULT_POLLING_INTERVAL):
|
vol.Optional(CONF_POLLING_INTERVAL, default=DEFAULT_POLLING_INTERVAL):
|
||||||
cv.positive_int,
|
cv.positive_int,
|
||||||
|
@ -296,8 +295,8 @@ def setup(hass, config):
|
||||||
|
|
||||||
# Load configuration
|
# Load configuration
|
||||||
use_debug = config[DOMAIN].get(CONF_DEBUG)
|
use_debug = config[DOMAIN].get(CONF_DEBUG)
|
||||||
customize.set_customize(hass, DOMAIN, config[DOMAIN].get(CONF_CUSTOMIZE))
|
|
||||||
autoheal = config[DOMAIN].get(CONF_AUTOHEAL)
|
autoheal = config[DOMAIN].get(CONF_AUTOHEAL)
|
||||||
|
hass.data[DATA_DEVICE_CONFIG] = config[DOMAIN][CONF_DEVICE_CONFIG]
|
||||||
|
|
||||||
# Setup options
|
# Setup options
|
||||||
options = ZWaveOption(
|
options = ZWaveOption(
|
||||||
|
@ -382,7 +381,7 @@ def setup(hass, config):
|
||||||
component = workaround_component
|
component = workaround_component
|
||||||
|
|
||||||
name = "{}.{}".format(component, object_id(value))
|
name = "{}.{}".format(component, object_id(value))
|
||||||
node_config = customize.get_overrides(hass, DOMAIN, name)
|
node_config = hass.data[DATA_DEVICE_CONFIG].get(name)
|
||||||
|
|
||||||
if node_config.get(CONF_IGNORED):
|
if node_config.get(CONF_IGNORED):
|
||||||
_LOGGER.info("Ignoring device %s", name)
|
_LOGGER.info("Ignoring device %s", name)
|
||||||
|
|
|
@ -1,68 +0,0 @@
|
||||||
"""The tests for the zwave component."""
|
|
||||||
import unittest
|
|
||||||
from unittest.mock import MagicMock, patch
|
|
||||||
|
|
||||||
from homeassistant.bootstrap import setup_component
|
|
||||||
from homeassistant.components import zwave
|
|
||||||
from tests.common import get_test_home_assistant
|
|
||||||
|
|
||||||
|
|
||||||
class TestComponentZwave(unittest.TestCase):
|
|
||||||
"""Test the Zwave component."""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
"""Setup things to be run when tests are started."""
|
|
||||||
self.hass = get_test_home_assistant()
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""Stop everything that was started."""
|
|
||||||
self.hass.stop()
|
|
||||||
|
|
||||||
def _validate_config(self, validator, config):
|
|
||||||
libopenzwave = MagicMock()
|
|
||||||
libopenzwave.__file__ = 'test'
|
|
||||||
with patch.dict('sys.modules', {
|
|
||||||
'libopenzwave': libopenzwave,
|
|
||||||
'openzwave.option': MagicMock(),
|
|
||||||
'openzwave.network': MagicMock(),
|
|
||||||
'openzwave.group': MagicMock(),
|
|
||||||
}):
|
|
||||||
validator(setup_component(self.hass, zwave.DOMAIN, {
|
|
||||||
zwave.DOMAIN: config,
|
|
||||||
}))
|
|
||||||
|
|
||||||
def test_empty_config(self):
|
|
||||||
"""Test empty config."""
|
|
||||||
self._validate_config(self.assertTrue, {})
|
|
||||||
|
|
||||||
def test_empty_customize(self):
|
|
||||||
"""Test empty customize."""
|
|
||||||
self._validate_config(self.assertTrue, {'customize': {}})
|
|
||||||
self._validate_config(self.assertTrue, {'customize': []})
|
|
||||||
|
|
||||||
def test_empty_customize_content(self):
|
|
||||||
"""Test empty customize."""
|
|
||||||
self._validate_config(
|
|
||||||
self.assertTrue, {'customize': {'test.test': {}}})
|
|
||||||
|
|
||||||
def test_full_customize_dict(self):
|
|
||||||
"""Test full customize as dict."""
|
|
||||||
self._validate_config(self.assertTrue, {'customize': {'test.test': {
|
|
||||||
zwave.CONF_POLLING_INTENSITY: 10,
|
|
||||||
zwave.CONF_IGNORED: 1,
|
|
||||||
zwave.CONF_REFRESH_VALUE: 1,
|
|
||||||
zwave.CONF_REFRESH_DELAY: 10}}})
|
|
||||||
|
|
||||||
def test_full_customize_list(self):
|
|
||||||
"""Test full customize as list."""
|
|
||||||
self._validate_config(self.assertTrue, {'customize': [{
|
|
||||||
'entity_id': 'test.test',
|
|
||||||
zwave.CONF_POLLING_INTENSITY: 10,
|
|
||||||
zwave.CONF_IGNORED: 1,
|
|
||||||
zwave.CONF_REFRESH_VALUE: 1,
|
|
||||||
zwave.CONF_REFRESH_DELAY: 10}]})
|
|
||||||
|
|
||||||
def test_bad_customize(self):
|
|
||||||
"""Test customize with extra keys."""
|
|
||||||
self._validate_config(
|
|
||||||
self.assertFalse, {'customize': {'test.test': {'extra_key': 10}}})
|
|
Loading…
Reference in New Issue