diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 21bea96201b..c7fa1c12d4b 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -6,7 +6,7 @@ Allows to setup simple automation rules via the config file. """ import logging -from homeassistant.loader import get_component +from homeassistant.bootstrap import prepare_setup_platform from homeassistant.helpers import config_per_platform from homeassistant.util import split_entity_id from homeassistant.const import ATTR_ENTITY_ID @@ -27,7 +27,7 @@ def setup(hass, config): """ Sets up automation. """ for p_type, p_config in config_per_platform(config, DOMAIN, _LOGGER): - platform = get_component('automation.{}'.format(p_type)) + platform = prepare_setup_platform(hass, config, DOMAIN, p_type) if platform is None: _LOGGER.error("Unknown automation platform specified: %s", p_type) diff --git a/homeassistant/components/automation/mqtt.py b/homeassistant/components/automation/mqtt.py new file mode 100644 index 00000000000..6b4e6b1e039 --- /dev/null +++ b/homeassistant/components/automation/mqtt.py @@ -0,0 +1,34 @@ +""" +homeassistant.components.automation.mqtt +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Offers MQTT listening automation rules. +""" +import logging + +import homeassistant.components.mqtt as mqtt + +DEPENDENCIES = ['mqtt'] + +CONF_TOPIC = 'mqtt_topic' +CONF_PAYLOAD = 'mqtt_payload' + + +def register(hass, config, action): + """ Listen for state changes based on `config`. """ + topic = config.get(CONF_TOPIC) + payload = config.get(CONF_PAYLOAD) + + if topic is None: + logging.getLogger(__name__).error( + "Missing configuration key %s", CONF_TOPIC) + return False + + def mqtt_automation_listener(msg_topic, msg_payload, qos): + """ Listens for MQTT messages. """ + if payload is None or payload == msg_payload: + action() + + mqtt.subscribe(hass, topic, mqtt_automation_listener) + + return True