From aed1348411e2505cf83d5acb9c313bbb42b8c4cf Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 11 Sep 2016 09:25:19 +0200 Subject: [PATCH] Use constants and update ordering (#3274) --- homeassistant/components/light/mqtt.py | 94 +++++++++++---------- homeassistant/components/light/mqtt_json.py | 84 +++++++++--------- 2 files changed, 90 insertions(+), 88 deletions(-) diff --git a/homeassistant/components/light/mqtt.py b/homeassistant/components/light/mqtt.py index ed8603a0ae8..d96f11ec47e 100644 --- a/homeassistant/components/light/mqtt.py +++ b/homeassistant/components/light/mqtt.py @@ -13,7 +13,9 @@ import homeassistant.components.mqtt as mqtt from homeassistant.components.light import ( ATTR_BRIGHTNESS, ATTR_RGB_COLOR, SUPPORT_BRIGHTNESS, SUPPORT_RGB_COLOR, Light) -from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE +from homeassistant.const import ( + CONF_NAME, CONF_OPTIMISTIC, CONF_VALUE_TEMPLATE, CONF_PAYLOAD_OFF, + CONF_PAYLOAD_ON, CONF_STATE, CONF_BRIGHTNESS, CONF_RGB) from homeassistant.components.mqtt import ( CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN) import homeassistant.helpers.config_validation as cv @@ -30,8 +32,6 @@ CONF_BRIGHTNESS_VALUE_TEMPLATE = 'brightness_value_template' CONF_RGB_STATE_TOPIC = 'rgb_state_topic' CONF_RGB_COMMAND_TOPIC = 'rgb_command_topic' CONF_RGB_VALUE_TEMPLATE = 'rgb_value_template' -CONF_PAYLOAD_ON = 'payload_on' -CONF_PAYLOAD_OFF = 'payload_off' CONF_BRIGHTNESS_SCALE = 'brightness_scale' DEFAULT_NAME = 'MQTT Light' @@ -57,13 +57,13 @@ PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend({ }) -def setup_platform(hass, config, add_devices_callback, discovery_info=None): +def setup_platform(hass, config, add_devices, discovery_info=None): """Add MQTT Light.""" config.setdefault(CONF_STATE_VALUE_TEMPLATE, config.get(CONF_VALUE_TEMPLATE)) - add_devices_callback([MqttLight( + add_devices([MqttLight( hass, - config[CONF_NAME], + config.get(CONF_NAME), { key: config.get(key) for key in ( CONF_STATE_TOPIC, @@ -75,18 +75,18 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): ) }, { - 'state': config.get(CONF_STATE_VALUE_TEMPLATE), - 'brightness': config.get(CONF_BRIGHTNESS_VALUE_TEMPLATE), - 'rgb': config.get(CONF_RGB_VALUE_TEMPLATE) + CONF_STATE: config.get(CONF_STATE_VALUE_TEMPLATE), + CONF_BRIGHTNESS: config.get(CONF_BRIGHTNESS_VALUE_TEMPLATE), + CONF_RGB: config.get(CONF_RGB_VALUE_TEMPLATE) }, - config[CONF_QOS], - config[CONF_RETAIN], + config.get(CONF_QOS), + config.get(CONF_RETAIN), { - 'on': config[CONF_PAYLOAD_ON], - 'off': config[CONF_PAYLOAD_OFF], + 'on': config.get(CONF_PAYLOAD_ON), + 'off': config.get(CONF_PAYLOAD_OFF), }, - config[CONF_OPTIMISTIC], - config[CONF_BRIGHTNESS_SCALE], + config.get(CONF_OPTIMISTIC), + config.get(CONF_BRIGHTNESS_SCALE), )]) @@ -103,17 +103,19 @@ class MqttLight(Light): self._qos = qos self._retain = retain self._payload = payload - self._optimistic = optimistic or topic["state_topic"] is None - self._optimistic_rgb = optimistic or topic["rgb_state_topic"] is None - self._optimistic_brightness = (optimistic or - topic["brightness_state_topic"] is None) + self._optimistic = optimistic or topic[CONF_STATE_TOPIC] is None + self._optimistic_rgb = \ + optimistic or topic[CONF_RGB_STATE_TOPIC] is None + self._optimistic_brightness = ( + optimistic or topic[CONF_BRIGHTNESS_STATE_TOPIC] is None) self._brightness_scale = brightness_scale self._state = False self._supported_features = 0 self._supported_features |= ( - topic['rgb_state_topic'] is not None and SUPPORT_RGB_COLOR) + topic[CONF_RGB_STATE_TOPIC] is not None and SUPPORT_RGB_COLOR) self._supported_features |= ( - topic['brightness_state_topic'] is not None and SUPPORT_BRIGHTNESS) + topic[CONF_BRIGHTNESS_STATE_TOPIC] is not None + and SUPPORT_BRIGHTNESS) templates = {key: ((lambda value: value) if tpl is None else partial(render_with_possible_json_value, hass, tpl)) @@ -121,30 +123,31 @@ class MqttLight(Light): def state_received(topic, payload, qos): """A new MQTT message has been received.""" - payload = templates['state'](payload) - if payload == self._payload["on"]: + payload = templates[CONF_STATE](payload) + if payload == self._payload['on']: self._state = True - elif payload == self._payload["off"]: + elif payload == self._payload['off']: self._state = False self.update_ha_state() - if self._topic["state_topic"] is not None: - mqtt.subscribe(self._hass, self._topic["state_topic"], + if self._topic[CONF_STATE_TOPIC] is not None: + mqtt.subscribe(self._hass, self._topic[CONF_STATE_TOPIC], state_received, self._qos) def brightness_received(topic, payload, qos): """A new MQTT message for the brightness has been received.""" - device_value = float(templates['brightness'](payload)) + device_value = float(templates[CONF_BRIGHTNESS](payload)) percent_bright = device_value / self._brightness_scale self._brightness = int(percent_bright * 255) self.update_ha_state() - if self._topic["brightness_state_topic"] is not None: - mqtt.subscribe(self._hass, self._topic["brightness_state_topic"], - brightness_received, self._qos) + if self._topic[CONF_BRIGHTNESS_STATE_TOPIC] is not None: + mqtt.subscribe( + self._hass, self._topic[CONF_BRIGHTNESS_STATE_TOPIC], + brightness_received, self._qos) self._brightness = 255 - elif self._topic["brightness_command_topic"] is not None: + elif self._topic[CONF_BRIGHTNESS_COMMAND_TOPIC] is not None: self._brightness = 255 else: self._brightness = None @@ -152,14 +155,14 @@ class MqttLight(Light): def rgb_received(topic, payload, qos): """A new MQTT message has been received.""" self._rgb = [int(val) for val in - templates['rgb'](payload).split(',')] + templates[CONF_RGB](payload).split(',')] self.update_ha_state() - if self._topic["rgb_state_topic"] is not None: - mqtt.subscribe(self._hass, self._topic["rgb_state_topic"], + if self._topic[CONF_RGB_STATE_TOPIC] is not None: + mqtt.subscribe(self._hass, self._topic[CONF_RGB_STATE_TOPIC], rgb_received, self._qos) self._rgb = [255, 255, 255] - if self._topic["rgb_command_topic"] is not None: + if self._topic[CONF_RGB_COMMAND_TOPIC] is not None: self._rgb = [255, 255, 255] else: self._rgb = None @@ -204,10 +207,10 @@ class MqttLight(Light): should_update = False if ATTR_RGB_COLOR in kwargs and \ - self._topic["rgb_command_topic"] is not None: + self._topic[CONF_RGB_COMMAND_TOPIC] is not None: - mqtt.publish(self._hass, self._topic["rgb_command_topic"], - "{},{},{}".format(*kwargs[ATTR_RGB_COLOR]), + mqtt.publish(self._hass, self._topic[CONF_RGB_COMMAND_TOPIC], + '{},{},{}'.format(*kwargs[ATTR_RGB_COLOR]), self._qos, self._retain) if self._optimistic_rgb: @@ -215,18 +218,19 @@ class MqttLight(Light): should_update = True if ATTR_BRIGHTNESS in kwargs and \ - self._topic["brightness_command_topic"] is not None: + self._topic[CONF_BRIGHTNESS_COMMAND_TOPIC] is not None: percent_bright = float(kwargs[ATTR_BRIGHTNESS]) / 255 device_brightness = int(percent_bright * self._brightness_scale) - mqtt.publish(self._hass, self._topic["brightness_command_topic"], - device_brightness, self._qos, self._retain) + mqtt.publish( + self._hass, self._topic[CONF_BRIGHTNESS_COMMAND_TOPIC], + device_brightness, self._qos, self._retain) if self._optimistic_brightness: self._brightness = kwargs[ATTR_BRIGHTNESS] should_update = True - mqtt.publish(self._hass, self._topic["command_topic"], - self._payload["on"], self._qos, self._retain) + mqtt.publish(self._hass, self._topic[CONF_COMMAND_TOPIC], + self._payload['on'], self._qos, self._retain) if self._optimistic: # Optimistically assume that switch has changed state. @@ -238,8 +242,8 @@ class MqttLight(Light): def turn_off(self, **kwargs): """Turn the device off.""" - mqtt.publish(self._hass, self._topic["command_topic"], - self._payload["off"], self._qos, self._retain) + mqtt.publish(self._hass, self._topic[CONF_COMMAND_TOPIC], + self._payload['off'], self._qos, self._retain) if self._optimistic: # Optimistically assume that switch has changed state. diff --git a/homeassistant/components/light/mqtt_json.py b/homeassistant/components/light/mqtt_json.py index abc3c53f37f..01fd03955fd 100755 --- a/homeassistant/components/light/mqtt_json.py +++ b/homeassistant/components/light/mqtt_json.py @@ -11,38 +11,36 @@ import voluptuous as vol import homeassistant.components.mqtt as mqtt from homeassistant.components.light import ( - ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_TRANSITION, + ATTR_BRIGHTNESS, ATTR_RGB_COLOR, ATTR_TRANSITION, PLATFORM_SCHEMA, ATTR_FLASH, FLASH_LONG, FLASH_SHORT, SUPPORT_BRIGHTNESS, SUPPORT_FLASH, SUPPORT_RGB_COLOR, SUPPORT_TRANSITION, Light) -from homeassistant.const import CONF_NAME, CONF_OPTIMISTIC, CONF_PLATFORM +from homeassistant.const import ( + CONF_NAME, CONF_OPTIMISTIC, CONF_BRIGHTNESS, CONF_RGB) from homeassistant.components.mqtt import ( CONF_STATE_TOPIC, CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN) import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -DOMAIN = "mqtt_json" +DOMAIN = 'mqtt_json' -DEPENDENCIES = ["mqtt"] +DEPENDENCIES = ['mqtt'] -DEFAULT_NAME = "MQTT JSON Light" +DEFAULT_NAME = 'MQTT JSON Light' DEFAULT_OPTIMISTIC = False DEFAULT_BRIGHTNESS = False DEFAULT_RGB = False DEFAULT_FLASH_TIME_SHORT = 2 DEFAULT_FLASH_TIME_LONG = 10 -CONF_BRIGHTNESS = "brightness" -CONF_RGB = "rgb" -CONF_FLASH_TIME_SHORT = "flash_time_short" -CONF_FLASH_TIME_LONG = "flash_time_long" +CONF_FLASH_TIME_SHORT = 'flash_time_short' +CONF_FLASH_TIME_LONG = 'flash_time_long' SUPPORT_MQTT_JSON = (SUPPORT_BRIGHTNESS | SUPPORT_FLASH | SUPPORT_RGB_COLOR | SUPPORT_TRANSITION) # Stealing some of these from the base MQTT configs. -PLATFORM_SCHEMA = vol.Schema({ - vol.Required(CONF_PLATFORM): DOMAIN, +PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Optional(CONF_QOS, default=mqtt.DEFAULT_QOS): vol.All(vol.Coerce(int), vol.In([0, 1, 2])), vol.Required(CONF_COMMAND_TOPIC): mqtt.valid_publish_topic, @@ -59,22 +57,22 @@ PLATFORM_SCHEMA = vol.Schema({ }) -def setup_platform(hass, config, add_devices_callback, discovery_info=None): +def setup_platform(hass, config, add_devices, discovery_info=None): """Setup a MQTT JSON Light.""" - add_devices_callback([MqttJson( + add_devices([MqttJson( hass, - config[CONF_NAME], + config.get(CONF_NAME), { key: config.get(key) for key in ( CONF_STATE_TOPIC, CONF_COMMAND_TOPIC ) }, - config[CONF_QOS], - config[CONF_RETAIN], - config[CONF_OPTIMISTIC], - config[CONF_BRIGHTNESS], - config[CONF_RGB], + config.get(CONF_QOS), + config.get(CONF_RETAIN), + config.get(CONF_OPTIMISTIC), + config.get(CONF_BRIGHTNESS), + config.get(CONF_RGB), { key: config.get(key) for key in ( CONF_FLASH_TIME_SHORT, @@ -96,7 +94,7 @@ class MqttJson(Light): self._topic = topic self._qos = qos self._retain = retain - self._optimistic = optimistic or topic["state_topic"] is None + self._optimistic = optimistic or topic[CONF_STATE_TOPIC] is None self._state = False if brightness: self._brightness = 255 @@ -114,35 +112,35 @@ class MqttJson(Light): """A new MQTT message has been received.""" values = json.loads(payload) - if values["state"] == "ON": + if values['state'] == 'ON': self._state = True - elif values["state"] == "OFF": + elif values['state'] == 'OFF': self._state = False if self._rgb is not None: try: - red = int(values["color"]["r"]) - green = int(values["color"]["g"]) - blue = int(values["color"]["b"]) + red = int(values['color']['r']) + green = int(values['color']['g']) + blue = int(values['color']['b']) self._rgb = [red, green, blue] except KeyError: pass except ValueError: - _LOGGER.warning("Invalid color value received.") + _LOGGER.warning("Invalid color value received") if self._brightness is not None: try: - self._brightness = int(values["brightness"]) + self._brightness = int(values['brightness']) except KeyError: pass except ValueError: - _LOGGER.warning("Invalid brightness value received.") + _LOGGER.warning('Invalid brightness value received') self.update_ha_state() - if self._topic["state_topic"] is not None: - mqtt.subscribe(self._hass, self._topic["state_topic"], + if self._topic[CONF_STATE_TOPIC] is not None: + mqtt.subscribe(self._hass, self._topic[CONF_STATE_TOPIC], state_received, self._qos) @property @@ -179,13 +177,13 @@ class MqttJson(Light): """Turn the device on.""" should_update = False - message = {"state": "ON"} + message = {'state': 'ON'} if ATTR_RGB_COLOR in kwargs: - message["color"] = { - "r": kwargs[ATTR_RGB_COLOR][0], - "g": kwargs[ATTR_RGB_COLOR][1], - "b": kwargs[ATTR_RGB_COLOR][2] + message['color'] = { + 'r': kwargs[ATTR_RGB_COLOR][0], + 'g': kwargs[ATTR_RGB_COLOR][1], + 'b': kwargs[ATTR_RGB_COLOR][2] } if self._optimistic: @@ -196,21 +194,21 @@ class MqttJson(Light): flash = kwargs.get(ATTR_FLASH) if flash == FLASH_LONG: - message["flash"] = self._flash_times[CONF_FLASH_TIME_LONG] + message['flash'] = self._flash_times[CONF_FLASH_TIME_LONG] elif flash == FLASH_SHORT: - message["flash"] = self._flash_times[CONF_FLASH_TIME_SHORT] + message['flash'] = self._flash_times[CONF_FLASH_TIME_SHORT] if ATTR_TRANSITION in kwargs: - message["transition"] = kwargs[ATTR_TRANSITION] + message['transition'] = kwargs[ATTR_TRANSITION] if ATTR_BRIGHTNESS in kwargs: - message["brightness"] = int(kwargs[ATTR_BRIGHTNESS]) + message['brightness'] = int(kwargs[ATTR_BRIGHTNESS]) if self._optimistic: self._brightness = kwargs[ATTR_BRIGHTNESS] should_update = True - mqtt.publish(self._hass, self._topic["command_topic"], + mqtt.publish(self._hass, self._topic[CONF_COMMAND_TOPIC], json.dumps(message), self._qos, self._retain) if self._optimistic: @@ -223,12 +221,12 @@ class MqttJson(Light): def turn_off(self, **kwargs): """Turn the device off.""" - message = {"state": "OFF"} + message = {'state': 'OFF'} if ATTR_TRANSITION in kwargs: - message["transition"] = kwargs[ATTR_TRANSITION] + message['transition'] = kwargs[ATTR_TRANSITION] - mqtt.publish(self._hass, self._topic["command_topic"], + mqtt.publish(self._hass, self._topic[CONF_COMMAND_TOPIC], json.dumps(message), self._qos, self._retain) if self._optimistic: