From dfbef45e492adeac48741d46d783d8252a8c28fe Mon Sep 17 00:00:00 2001 From: Kevin Siml <appzer@users.noreply.github.com> Date: Sun, 19 Feb 2017 02:36:28 +0100 Subject: [PATCH] Add pushsafer.com notification service (#6050) * Add pushsafer.com notification service * Add pushsafer.com notification service * Add pushsafer.com notification service * Add pushsafer.com notification service * Update pushsafer.py * Update pushsafer.py * Update pushsafer.py * Update README.rst --- .coveragerc | 1 + README.rst | 3 +- homeassistant/components/notify/pushsafer.py | 70 ++++++++++++++++++++ requirements_all.txt | 3 + 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/notify/pushsafer.py diff --git a/.coveragerc b/.coveragerc index 0dcf1ffa439..72d6460d858 100644 --- a/.coveragerc +++ b/.coveragerc @@ -274,6 +274,7 @@ omit = homeassistant/components/notify/pushbullet.py homeassistant/components/notify/pushetta.py homeassistant/components/notify/pushover.py + homeassistant/components/notify/pushsafer.py homeassistant/components/notify/rest.py homeassistant/components/notify/sendgrid.py homeassistant/components/notify/simplepush.py diff --git a/README.rst b/README.rst index bddbb9fd611..2b166cd9a13 100644 --- a/README.rst +++ b/README.rst @@ -75,7 +75,8 @@ Build home automation on top of your devices: `Instapush <https://instapush.im>`__, `Notify My Android (NMA) <http://www.notifymyandroid.com/>`__, `PushBullet <https://www.pushbullet.com/>`__, - `PushOver <https://pushover.net/>`__, `Slack <https://slack.com/>`__, + `PushOver <https://pushover.net/>`__, + `Slack <https://slack.com/>`__, `Telegram <https://telegram.org/>`__, `Join <http://joaoapps.com/join/>`__, and `Jabber (XMPP) <http://xmpp.org>`__ diff --git a/homeassistant/components/notify/pushsafer.py b/homeassistant/components/notify/pushsafer.py new file mode 100644 index 00000000000..e39b94a18d6 --- /dev/null +++ b/homeassistant/components/notify/pushsafer.py @@ -0,0 +1,70 @@ +""" +Pushsafer platform for notify component. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/notify.pushsafer/ +""" +import logging + +import voluptuous as vol + +from homeassistant.components.notify import ( + ATTR_TITLE, ATTR_TITLE_DEFAULT, ATTR_TARGET, ATTR_DATA, + BaseNotificationService) +from homeassistant.const import CONF_API_KEY +import homeassistant.helpers.config_validation as cv + +REQUIREMENTS = ['python-pushsafer==0.2'] +_LOGGER = logging.getLogger(__name__) + + +PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ + vol.Required(CONF_API_KEY): cv.string, +}) + + +# pylint: disable=unused-variable +def get_service(hass, config, discovery_info=None): + """Get the Pushsafer notification service.""" + from pushsafer import InitError + + try: + return PushsaferNotificationService(config[CONF_API_KEY]) + except InitError: + _LOGGER.error( + 'Wrong private key supplied. Get it at https://www.pushsafer.com') + return None + + +class PushsaferNotificationService(BaseNotificationService): + """Implement the notification service for Pushsafer.""" + + def __init__(self, privatekey): + """Initialize the service.""" + from pushsafer import Client + self._privatekey = privatekey + self.pushsafer = Client( + "", privatekey=self._privatekey) + + def send_message(self, message='', **kwargs): + """Send a message to a user.""" + # Make a copy and use empty dict if necessary + data = dict(kwargs.get(ATTR_DATA) or {}) + + data['title'] = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT) + + targets = kwargs.get(ATTR_TARGET) + + if not isinstance(targets, list): + targets = [targets] + + for target in targets: + if target is not None: + data['device'] = target + + try: + self.pushsafer.send_message(message, data['title'], "", "", + "", "", "", "", + "0", "", "", "") + except ValueError as val_err: + _LOGGER.error(str(val_err)) diff --git a/requirements_all.txt b/requirements_all.txt index 77ab63d5010..dba4baf8de2 100755 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -576,6 +576,9 @@ python-nmap==0.6.1 # homeassistant.components.notify.pushover python-pushover==0.2 +# homeassistant.components.notify.pushsafer +python-pushsafer==0.2 + # homeassistant.components.sensor.synologydsm python-synology==0.1.0 -- GitLab