From 25585012358c828f6fd692896369d9d375eeec01 Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sun, 21 Aug 2016 00:11:37 +0200 Subject: [PATCH] Added LlamaLab Automate notify platform (#2863) * Addod LlamaLab Automate notify platform * Added platform to .coveragerc * Added device-option and switched to voluptuous * Fixed voluptuous usage --- .coveragerc | 1 + .../components/notify/llamalab_automate.py | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 homeassistant/components/notify/llamalab_automate.py diff --git a/.coveragerc b/.coveragerc index f68872401c2..06e35d9b0bc 100644 --- a/.coveragerc +++ b/.coveragerc @@ -183,6 +183,7 @@ omit = homeassistant/components/notify/group.py homeassistant/components/notify/instapush.py homeassistant/components/notify/joaoapps_join.py + homeassistant/components/notify/llamalab_automate.py homeassistant/components/notify/message_bird.py homeassistant/components/notify/nma.py homeassistant/components/notify/pushbullet.py diff --git a/homeassistant/components/notify/llamalab_automate.py b/homeassistant/components/notify/llamalab_automate.py new file mode 100644 index 00000000000..7a00b5ba237 --- /dev/null +++ b/homeassistant/components/notify/llamalab_automate.py @@ -0,0 +1,60 @@ +""" +LlamaLab Automate notification service. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/notify.llamalab_automate/ +""" +import logging +import requests +import voluptuous as vol + +from homeassistant.components.notify import (BaseNotificationService, + PLATFORM_SCHEMA) +from homeassistant.const import CONF_API_KEY +from homeassistant.helpers import config_validation as cv + +_LOGGER = logging.getLogger(__name__) + +CONF_TO = 'to' +CONF_DEVICE = 'device' +_RESOURCE = 'https://llamalab.com/automate/cloud/message' + +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ + vol.Required(CONF_API_KEY): cv.string, + vol.Required(CONF_TO): cv.string, + vol.Optional(CONF_DEVICE): cv.string, +}) + + +def get_service(hass, config): + """Get the LlamaLab Automate notification service.""" + secret = config.get(CONF_API_KEY) + recipient = config.get(CONF_TO) + device = config.get(CONF_DEVICE) + + return AutomateNotificationService(secret, recipient, device) + + +# pylint: disable=too-few-public-methods +class AutomateNotificationService(BaseNotificationService): + """Implement the notification service for LlamaLab Automate.""" + + def __init__(self, secret, recipient, device=None): + """Initialize the service.""" + self._secret = secret + self._recipient = recipient + self._device = device + + def send_message(self, message="", **kwargs): + """Send a message to a user.""" + _LOGGER.debug("Sending to: %s, %s", self._recipient, str(self._device)) + data = { + "secret": self._secret, + "to": self._recipient, + "device": self._device, + "payload": message, + } + + response = requests.post(_RESOURCE, json=data) + if response.status_code != 200: + _LOGGER.error("Error sending message: " + str(response))