diff --git a/.coveragerc b/.coveragerc index 0dcf1ffa4399b730a26f9e87dce190744b57853c..72d6460d858cb844bb187d71c6ae401a88777c09 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 bddbb9fd6115dbfe36fb6c29f937fb4db19a07c7..2b166cd9a1350cab152d143c321c1b325dac1e8a 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 0000000000000000000000000000000000000000..e39b94a18d604e8340094d71ded2a22835a6fd75 --- /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 77ab63d5010f1ae81d84d5c66cde3f2d00f55c01..dba4baf8de290f627d408911133e4d5dc32dc39a 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