From 91764cacd95cad222654888756ad0ac7de7df509 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Jun 2015 09:44:10 +0200 Subject: [PATCH 1/4] add syslog.py --- .coveragerc | 1 + 1 file changed, 1 insertion(+) diff --git a/.coveragerc b/.coveragerc index 0147c9cc5b6..ee40c987ea2 100644 --- a/.coveragerc +++ b/.coveragerc @@ -37,6 +37,7 @@ omit = homeassistant/components/notify/pushbullet.py homeassistant/components/notify/pushover.py homeassistant/components/notify/smtp.py + homeassistant/components/notify/syslog.py homeassistant/components/notify/xmpp.py homeassistant/components/sensor/bitcoin.py homeassistant/components/sensor/mysensors.py From c78e1519affbff0b671a188fa38cfaca4e9a4e7e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Jun 2015 09:44:28 +0200 Subject: [PATCH 2/4] add syslog notification platform --- homeassistant/components/notify/syslog.py | 114 ++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 homeassistant/components/notify/syslog.py diff --git a/homeassistant/components/notify/syslog.py b/homeassistant/components/notify/syslog.py new file mode 100644 index 00000000000..28c1b2fda60 --- /dev/null +++ b/homeassistant/components/notify/syslog.py @@ -0,0 +1,114 @@ +""" +homeassistant.components.notify.syslog +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Syslog notification service. + +Configuration: + +To use the Syslog notifier you will need to add something like the following +to your config/configuration.yaml + +notify: + platform: syslog + facility: MAIL_SERVER + option: YOUR_SMTP_PORT + priority: SENDER_EMAIL_ADDRESS + +Variables: + +facility +*Optional +Facility according to RFC 3164 (http://tools.ietf.org/html/rfc3164). Default +is 'syslog' if no value is given. + +option +*Option +Log option. Default is 'pid' if no value is given. + +priority +*Optional +Priority of the messages. Default is 'info' if no value is given. +""" +import logging +import syslog + +from homeassistant.helpers import validate_config +from homeassistant.components.notify import ( + DOMAIN, ATTR_TITLE, BaseNotificationService) + +_LOGGER = logging.getLogger(__name__) +FACILITIES = { + 'kernel': syslog.LOG_KERN, + 'user': syslog.LOG_USER, + 'mail': syslog.LOG_MAIL, + 'daemon': syslog.LOG_DAEMON, + 'auth': syslog.LOG_KERN, + 'LPR': syslog.LOG_LPR, + 'news': syslog.LOG_NEWS, + 'uucp': syslog.LOG_UUCP, + 'cron': syslog.LOG_CRON, + 'syslog': syslog.LOG_SYSLOG, + 'local0': syslog.LOG_LOCAL0, + 'local1': syslog.LOG_LOCAL1, + 'local2': syslog.LOG_LOCAL2, + 'local3': syslog.LOG_LOCAL3, + 'local4': syslog.LOG_LOCAL4, + 'local5': syslog.LOG_LOCAL5, + 'local6': syslog.LOG_LOCAL6, + 'local7': syslog.LOG_LOCAL7 + } +OPTIONS = { + 'pid': syslog.LOG_PID, + 'cons': syslog.LOG_CONS, + 'ndelay': syslog.LOG_NDELAY, + 'nowait': syslog.LOG_NOWAIT, + 'perror': syslog.LOG_PERROR + } + +PRIORITIES = { + 5: syslog.LOG_EMERG, + 4: syslog.LOG_ALERT, + 3: syslog.LOG_CRIT, + 2: syslog.LOG_ERR, + 1: syslog.LOG_WARNING, + 0: syslog.LOG_NOTICE, + -1: syslog.LOG_INFO, + -2: syslog.LOG_DEBUG + } + + +def get_service(hass, config): + """ Get the mail notification service. """ + + if not validate_config(config, + {DOMAIN: ['facility', + 'option', + 'priority']}, + _LOGGER): + return None + + _facility = FACILITIES.get(config[DOMAIN]['facility'], 40) + _option = OPTIONS.get(config[DOMAIN]['option'], 10) + _priority = PRIORITIES.get(config[DOMAIN]['priority'], -1) + + return SyslogNotificationService(_facility, _option, _priority) + + +class SyslogNotificationService(BaseNotificationService): + """ Implements syslog notification service. """ + + # pylint: disable=too-many-arguments + def __init__(self, facility, option, priority): + self._facility = facility + self._option = option + self._priority = priority + + def send_message(self, message="", **kwargs): + """ Send a message to a user. """ + + title = kwargs.get(ATTR_TITLE) + + syslog.openlog(title, self._option, self._facility) + syslog.syslog(self._priority, message) + syslog.closelog() From fa7fc3ca5d610f653af4ae40e37647c6a3196b6a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Jun 2015 09:50:37 +0200 Subject: [PATCH 3/4] fix pylint issues --- homeassistant/components/notify/syslog.py | 70 +++++++++++------------ 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/homeassistant/components/notify/syslog.py b/homeassistant/components/notify/syslog.py index 28c1b2fda60..2ca6a5d2a59 100644 --- a/homeassistant/components/notify/syslog.py +++ b/homeassistant/components/notify/syslog.py @@ -38,44 +38,39 @@ from homeassistant.components.notify import ( DOMAIN, ATTR_TITLE, BaseNotificationService) _LOGGER = logging.getLogger(__name__) -FACILITIES = { - 'kernel': syslog.LOG_KERN, - 'user': syslog.LOG_USER, - 'mail': syslog.LOG_MAIL, - 'daemon': syslog.LOG_DAEMON, - 'auth': syslog.LOG_KERN, - 'LPR': syslog.LOG_LPR, - 'news': syslog.LOG_NEWS, - 'uucp': syslog.LOG_UUCP, - 'cron': syslog.LOG_CRON, - 'syslog': syslog.LOG_SYSLOG, - 'local0': syslog.LOG_LOCAL0, - 'local1': syslog.LOG_LOCAL1, - 'local2': syslog.LOG_LOCAL2, - 'local3': syslog.LOG_LOCAL3, - 'local4': syslog.LOG_LOCAL4, - 'local5': syslog.LOG_LOCAL5, - 'local6': syslog.LOG_LOCAL6, - 'local7': syslog.LOG_LOCAL7 - } -OPTIONS = { - 'pid': syslog.LOG_PID, - 'cons': syslog.LOG_CONS, - 'ndelay': syslog.LOG_NDELAY, - 'nowait': syslog.LOG_NOWAIT, - 'perror': syslog.LOG_PERROR - } +FACILITIES = {'kernel': syslog.LOG_KERN, + 'user': syslog.LOG_USER, + 'mail': syslog.LOG_MAIL, + 'daemon': syslog.LOG_DAEMON, + 'auth': syslog.LOG_KERN, + 'LPR': syslog.LOG_LPR, + 'news': syslog.LOG_NEWS, + 'uucp': syslog.LOG_UUCP, + 'cron': syslog.LOG_CRON, + 'syslog': syslog.LOG_SYSLOG, + 'local0': syslog.LOG_LOCAL0, + 'local1': syslog.LOG_LOCAL1, + 'local2': syslog.LOG_LOCAL2, + 'local3': syslog.LOG_LOCAL3, + 'local4': syslog.LOG_LOCAL4, + 'local5': syslog.LOG_LOCAL5, + 'local6': syslog.LOG_LOCAL6, + 'local7': syslog.LOG_LOCAL7} -PRIORITIES = { - 5: syslog.LOG_EMERG, - 4: syslog.LOG_ALERT, - 3: syslog.LOG_CRIT, - 2: syslog.LOG_ERR, - 1: syslog.LOG_WARNING, - 0: syslog.LOG_NOTICE, - -1: syslog.LOG_INFO, - -2: syslog.LOG_DEBUG - } +OPTIONS = {'pid': syslog.LOG_PID, + 'cons': syslog.LOG_CONS, + 'ndelay': syslog.LOG_NDELAY, + 'nowait': syslog.LOG_NOWAIT, + 'perror': syslog.LOG_PERROR} + +PRIORITIES = {5: syslog.LOG_EMERG, + 4: syslog.LOG_ALERT, + 3: syslog.LOG_CRIT, + 2: syslog.LOG_ERR, + 1: syslog.LOG_WARNING, + 0: syslog.LOG_NOTICE, + -1: syslog.LOG_INFO, + -2: syslog.LOG_DEBUG} def get_service(hass, config): @@ -95,6 +90,7 @@ def get_service(hass, config): return SyslogNotificationService(_facility, _option, _priority) +# pylint: disable=too-few-public-methods class SyslogNotificationService(BaseNotificationService): """ Implements syslog notification service. """ From 26c56d277e57199241857493c9621af2fa73f4b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Jun 2015 09:53:43 +0200 Subject: [PATCH 4/4] update doc --- homeassistant/components/notify/syslog.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/notify/syslog.py b/homeassistant/components/notify/syslog.py index 2ca6a5d2a59..6673ba23a08 100644 --- a/homeassistant/components/notify/syslog.py +++ b/homeassistant/components/notify/syslog.py @@ -11,9 +11,9 @@ to your config/configuration.yaml notify: platform: syslog - facility: MAIL_SERVER - option: YOUR_SMTP_PORT - priority: SENDER_EMAIL_ADDRESS + facility: SYSLOG_FACILITY + option: SYSLOG_LOG_OPTION + priority: SYSLOG_PRIORITY Variables: