From eb3f812e38c27f586a48238eddb45aa5cdc68710 Mon Sep 17 00:00:00 2001 From: Jan Harkes Date: Wed, 6 Apr 2016 20:32:35 -0400 Subject: [PATCH] Config validation for MQTT sensor platform. --- homeassistant/components/sensor/mqtt.py | 35 ++++++++++++++++--------- tests/components/sensor/test_mqtt.py | 15 ++++++----- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/homeassistant/components/sensor/mqtt.py b/homeassistant/components/sensor/mqtt.py index b0f8e8e0887..4b23eeb3d82 100644 --- a/homeassistant/components/sensor/mqtt.py +++ b/homeassistant/components/sensor/mqtt.py @@ -6,33 +6,42 @@ https://home-assistant.io/components/sensor.mqtt/ """ import logging +import voluptuous as vol + import homeassistant.components.mqtt as mqtt -from homeassistant.const import CONF_VALUE_TEMPLATE, STATE_UNKNOWN +from homeassistant.const import CONF_NAME, CONF_VALUE_TEMPLATE, STATE_UNKNOWN +import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers import template _LOGGER = logging.getLogger(__name__) -DEFAULT_NAME = "MQTT Sensor" -DEFAULT_QOS = 0 - DEPENDENCIES = ['mqtt'] +CONF_STATE_TOPIC = 'state_topic' +CONF_UNIT_OF_MEASUREMENT = 'unit_of_measurement' + +DEFAULT_NAME = "MQTT Sensor" + +PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({ + vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, + vol.Required(CONF_STATE_TOPIC): mqtt.valid_subscribe_topic, + vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string, + vol.Optional(CONF_VALUE_TEMPLATE): cv.template, +}) + # pylint: disable=unused-argument def setup_platform(hass, config, add_devices_callback, discovery_info=None): """Setup MQTT Sensor.""" - if config.get('state_topic') is None: - _LOGGER.error("Missing required variable: state_topic") - return False - add_devices_callback([MqttSensor( hass, - config.get('name', DEFAULT_NAME), - config.get('state_topic'), - config.get('qos', DEFAULT_QOS), - config.get('unit_of_measurement'), - config.get(CONF_VALUE_TEMPLATE))]) + config[CONF_NAME], + config[CONF_STATE_TOPIC], + config[mqtt.CONF_QOS], + config.get(CONF_UNIT_OF_MEASUREMENT), + config.get(CONF_VALUE_TEMPLATE), + )]) # pylint: disable=too-many-arguments, too-many-instance-attributes diff --git a/tests/components/sensor/test_mqtt.py b/tests/components/sensor/test_mqtt.py index 280542bb305..1c8aa8996db 100644 --- a/tests/components/sensor/test_mqtt.py +++ b/tests/components/sensor/test_mqtt.py @@ -1,6 +1,7 @@ """The tests for the MQTT sensor platform.""" import unittest +from homeassistant.bootstrap import _setup_component import homeassistant.components.sensor as sensor from tests.common import mock_mqtt_component, fire_mqtt_message @@ -21,14 +22,15 @@ class TestSensorMQTT(unittest.TestCase): def test_setting_sensor_value_via_mqtt_message(self): """Test the setting of the value via MQTT.""" - self.assertTrue(sensor.setup(self.hass, { - 'sensor': { + self.hass.config.components = ['mqtt'] + assert _setup_component(self.hass, sensor.DOMAIN, { + sensor.DOMAIN: { 'platform': 'mqtt', 'name': 'test', 'state_topic': 'test-topic', 'unit_of_measurement': 'fav unit' } - })) + }) fire_mqtt_message(self.hass, 'test-topic', '100') self.hass.pool.block_till_done() @@ -40,15 +42,16 @@ class TestSensorMQTT(unittest.TestCase): def test_setting_sensor_value_via_mqtt_json_message(self): """Test the setting of the value via MQTT with JSON playload.""" - self.assertTrue(sensor.setup(self.hass, { - 'sensor': { + self.hass.config.components = ['mqtt'] + assert _setup_component(self.hass, sensor.DOMAIN, { + sensor.DOMAIN: { 'platform': 'mqtt', 'name': 'test', 'state_topic': 'test-topic', 'unit_of_measurement': 'fav unit', 'value_template': '{{ value_json.val }}' } - })) + }) fire_mqtt_message(self.hass, 'test-topic', '{ "val": "100" }') self.hass.pool.block_till_done()