diff --git a/homeassistant/components/logbook.py b/homeassistant/components/logbook.py index d26b3373cb8..98740388cd5 100644 --- a/homeassistant/components/logbook.py +++ b/homeassistant/components/logbook.py @@ -9,6 +9,8 @@ import re from datetime import timedelta from itertools import groupby +import voluptuous as vol + import homeassistant.util.dt as dt_util from homeassistant.components import recorder, sun from homeassistant.const import ( @@ -18,6 +20,7 @@ from homeassistant.core import DOMAIN as HA_DOMAIN from homeassistant.core import State from homeassistant.helpers.entity import split_entity_id from homeassistant.helpers import template +import homeassistant.helpers.config_validation as cv DOMAIN = "logbook" DEPENDENCIES = ['recorder', 'http'] @@ -39,6 +42,13 @@ ATTR_MESSAGE = 'message' ATTR_DOMAIN = 'domain' ATTR_ENTITY_ID = 'entity_id' +LOG_MESSAGE_SCHEMA = vol.Schema({ + vol.Required(ATTR_NAME): cv.string, + vol.Required(ATTR_MESSAGE): cv.string, + vol.Optional(ATTR_DOMAIN): cv.slug, + vol.Optional(ATTR_ENTITY_ID): cv.entity_id, +}) + def log_entry(hass, name, message, domain=None, entity_id=None): """Add an entry to the logbook.""" @@ -58,19 +68,17 @@ def setup(hass, config): """Listen for download events to download files.""" def log_message(service): """Handle sending notification message service calls.""" - message = service.data.get(ATTR_MESSAGE) - name = service.data.get(ATTR_NAME) - domain = service.data.get(ATTR_DOMAIN, None) - entity_id = service.data.get(ATTR_ENTITY_ID, None) - - if not message or not name: - return + message = service.data[ATTR_MESSAGE] + name = service.data[ATTR_NAME] + domain = service.data.get(ATTR_DOMAIN) + entity_id = service.data.get(ATTR_ENTITY_ID) message = template.render(hass, message) log_entry(hass, name, message, domain, entity_id) hass.http.register_path('GET', URL_LOGBOOK, _handle_get_logbook) - hass.services.register(DOMAIN, 'log', log_message) + hass.services.register(DOMAIN, 'log', log_message, + schema=LOG_MESSAGE_SCHEMA) return True diff --git a/tests/components/test_logbook.py b/tests/components/test_logbook.py index d27865f4402..b7e95ad7eed 100644 --- a/tests/components/test_logbook.py +++ b/tests/components/test_logbook.py @@ -37,7 +37,7 @@ class TestComponentHistory(unittest.TestCase): logbook.ATTR_NAME: 'Alarm', logbook.ATTR_MESSAGE: 'is triggered', logbook.ATTR_DOMAIN: 'switch', - logbook.ATTR_ENTITY_ID: 'test_switch' + logbook.ATTR_ENTITY_ID: 'switch.test_switch' }, True) self.hass.pool.block_till_done() @@ -48,7 +48,7 @@ class TestComponentHistory(unittest.TestCase): self.assertEqual('is triggered', last_call.data.get( logbook.ATTR_MESSAGE)) self.assertEqual('switch', last_call.data.get(logbook.ATTR_DOMAIN)) - self.assertEqual('test_switch', last_call.data.get( + self.assertEqual('switch.test_switch', last_call.data.get( logbook.ATTR_ENTITY_ID)) def test_service_call_create_log_book_entry_no_message(self):