diff --git a/homeassistant/components/ifttt.py b/homeassistant/components/ifttt.py new file mode 100644 index 00000000000..fa12000417f --- /dev/null +++ b/homeassistant/components/ifttt.py @@ -0,0 +1,96 @@ +""" +homeassistant.components.ifttt +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This component enable you to trigger Maker IFTTT recipes. +Check https://ifttt.com/maker for details. + +Configuration: + +To use Maker IFTTT you will need to add something like the following to your +config/configuration.yaml. + +ifttt: + key: xxxxx-x-xxxxxxxxxxxxx + +Variables: + +key +*Required +Your api key + +""" +import logging +import requests + +from homeassistant.helpers import validate_config + +_LOGGER = logging.getLogger(__name__) + +DOMAIN = "ifttt" + +SERVICE_TRIGGER = 'trigger' + +ATTR_EVENT = 'event' +ATTR_VALUE1 = 'value1' +ATTR_VALUE2 = 'value2' +ATTR_VALUE3 = 'value3' + +DEPENDENCIES = [] + +REQUIREMENTS = ['pyfttt==0.1'] + + +def trigger(hass, event, value1=None, value2=None, value3=None): + """ Trigger a Maker IFTTT recipe """ + data = { + ATTR_EVENT: event, + ATTR_VALUE1: value1, + ATTR_VALUE2: value2, + ATTR_VALUE3: value3, + } + hass.services.call(DOMAIN, SERVICE_TRIGGER, data) + + +def setup(hass, config): + """ Setup the ifttt service component """ + + if not validate_config(config, {DOMAIN: ['key']}, _LOGGER): + return False + + key = config[DOMAIN]['key'] + + def trigger_service(call): + """ Handle ifttt trigger service calls. """ + event = call.data.get(ATTR_EVENT) + value1 = call.data.get(ATTR_VALUE1) + value2 = call.data.get(ATTR_VALUE2) + value3 = call.data.get(ATTR_VALUE3) + if event is None: + return + + try: + import pyfttt as pyfttt + r = pyfttt.send_event(key, event, value1, value2, value3) + except requests.exceptions.ConnectionError: + _LOGGER.error("Could not connect to IFTTT") + except requests.exceptions.HTTPError: + _LOGGER.error("Received invalid response") + except requests.exceptions.Timeout: + _LOGGER.error("Request timed out") + except requests.exceptions.TooManyRedirects: + _LOGGER.error("Too many redirects") + except requests.exceptions.RequestException as e: + _LOGGER.error("{e}".format(e=e)) + + if r.status_code != requests.codes.ok: + try: + j = r.json() + except ValueError: + _LOGGER.error('Could not parse response. Event not sent!') + + for e in j['errors']: + _LOGGER.error('{}'.format(e['message'])) + + hass.services.register(DOMAIN, SERVICE_TRIGGER, trigger_service) + + return True