diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 9b3ae7894b1..b734728e59b 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -40,25 +40,45 @@ def setup(hass, config): found = 1 while config_key in config: - p_config = _migrate_old_config(config[config_key]) + # check for one block syntax + if isinstance(config[config_key], dict): + config_block = _migrate_old_config(config[config_key]) + name = config_block.get(CONF_ALIAS, config_key) + _setup_automation(hass, config_block, name, config) + + # check for multiple block syntax + elif isinstance(config[config_key], list): + for list_no, config_block in enumerate(config[config_key]): + name = config_block.get(CONF_ALIAS, + "{}, {}".format(config_key, list_no)) + _setup_automation(hass, config_block, name, config) + + # any scalar value is incorrect + else: + _LOGGER.error('Error in config in section %s.', config_key) + found += 1 config_key = "{} {}".format(DOMAIN, found) - name = p_config.get(CONF_ALIAS, config_key) - action = _get_action(hass, p_config.get(CONF_ACTION, {}), name) + return True + + +def _setup_automation(hass, config_block, name, config): + """ Setup one instance of automation """ + + action = _get_action(hass, config_block.get(CONF_ACTION, {}), name) + + if action is None: + return False + + if CONF_CONDITION in config_block or CONF_CONDITION_TYPE in config_block: + action = _process_if(hass, config, config_block, action) if action is None: - continue - - if CONF_CONDITION in p_config or CONF_CONDITION_TYPE in p_config: - action = _process_if(hass, config, p_config, action) - - if action is None: - continue - - _process_trigger(hass, config, p_config.get(CONF_TRIGGER, []), name, - action) + return False + _process_trigger(hass, config, config_block.get(CONF_TRIGGER, []), name, + action) return True diff --git a/tests/components/automation/test_init.py b/tests/components/automation/test_init.py index 2d5329b4624..272a9cb00f5 100644 --- a/tests/components/automation/test_init.py +++ b/tests/components/automation/test_init.py @@ -340,3 +340,41 @@ class TestAutomation(unittest.TestCase): self.hass.bus.fire('test_event') self.hass.pool.block_till_done() self.assertEqual(1, len(self.calls)) + + def test_automation_list_setting(self): + """ Event is not a valid condition. Will it still work? """ + automation.setup(self.hass, { + automation.DOMAIN: [ + { + 'trigger': [ + { + 'platform': 'event', + 'event_type': 'test_event', + }, + + ], + 'action': { + 'execute_service': 'test.automation', + } + }, + { + 'trigger': [ + { + 'platform': 'event', + 'event_type': 'test_event_2', + }, + ], + 'action': { + 'execute_service': 'test.automation', + } + } + ] + }) + + self.hass.bus.fire('test_event') + self.hass.pool.block_till_done() + self.assertEqual(1, len(self.calls)) + + self.hass.bus.fire('test_event_2') + self.hass.pool.block_till_done() + self.assertEqual(2, len(self.calls))