Config validation for mqtt_eventstream component.

This commit is contained in:
Jan Harkes 2016-04-06 23:25:28 -04:00
parent a7016e4b32
commit 94835235a4

View File

@ -6,9 +6,11 @@ https://home-assistant.io/components/mqtt_eventstream/
""" """
import json import json
import voluptuous as vol
import homeassistant.loader as loader import homeassistant.loader as loader
from homeassistant.components.mqtt import DOMAIN as MQTT_DOMAIN from homeassistant.components.mqtt import (
from homeassistant.components.mqtt import SERVICE_PUBLISH as MQTT_SVC_PUBLISH valid_publish_topic, valid_subscribe_topic)
from homeassistant.const import ( from homeassistant.const import (
ATTR_SERVICE_DATA, EVENT_CALL_SERVICE, EVENT_SERVICE_EXECUTED, ATTR_SERVICE_DATA, EVENT_CALL_SERVICE, EVENT_SERVICE_EXECUTED,
EVENT_STATE_CHANGED, EVENT_TIME_CHANGED, MATCH_ALL) EVENT_STATE_CHANGED, EVENT_TIME_CHANGED, MATCH_ALL)
@ -18,12 +20,23 @@ from homeassistant.remote import JSONEncoder
DOMAIN = "mqtt_eventstream" DOMAIN = "mqtt_eventstream"
DEPENDENCIES = ['mqtt'] DEPENDENCIES = ['mqtt']
CONF_PUBLISH_TOPIC = 'publish_topic'
CONF_SUBSCRIBE_TOPIC = 'subscribe_topic'
CONFIG_SCHEMA = vol.Schema({
DOMAIN: vol.Schema({
vol.Optional(CONF_PUBLISH_TOPIC): valid_publish_topic,
vol.Optional(CONF_SUBSCRIBE_TOPIC): valid_subscribe_topic,
}),
})
def setup(hass, config): def setup(hass, config):
"""Setup th MQTT eventstream component.""" """Setup the MQTT eventstream component."""
mqtt = loader.get_component('mqtt') mqtt = loader.get_component('mqtt')
pub_topic = config[DOMAIN].get('publish_topic', None) conf = config.get(DOMAIN, {})
sub_topic = config[DOMAIN].get('subscribe_topic', None) pub_topic = conf.get(CONF_PUBLISH_TOPIC)
sub_topic = conf.get(CONF_SUBSCRIBE_TOPIC)
def _event_publisher(event): def _event_publisher(event):
"""Handle events by publishing them on the MQTT queue.""" """Handle events by publishing them on the MQTT queue."""
@ -36,8 +49,8 @@ def setup(hass, config):
# to the MQTT topic, or you will end up in an infinite loop. # to the MQTT topic, or you will end up in an infinite loop.
if event.event_type == EVENT_CALL_SERVICE: if event.event_type == EVENT_CALL_SERVICE:
if ( if (
event.data.get('domain') == MQTT_DOMAIN and event.data.get('domain') == mqtt.DOMAIN and
event.data.get('service') == MQTT_SVC_PUBLISH and event.data.get('service') == mqtt.SERVICE_PUBLISH and
event.data[ATTR_SERVICE_DATA].get('topic') == pub_topic event.data[ATTR_SERVICE_DATA].get('topic') == pub_topic
): ):
return return