support for trigger Maker IFTTT

This commit is contained in:
sfam 2015-09-04 16:28:58 +01:00
parent 97e19908be
commit fd032cf6b7

View File

@ -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