diff --git a/homeassistant/components/light/mqtt.py b/homeassistant/components/light/mqtt.py index 97624ec72f9..30f968d758f 100644 --- a/homeassistant/components/light/mqtt.py +++ b/homeassistant/components/light/mqtt.py @@ -18,7 +18,6 @@ DEFAULT_NAME = "MQTT Light" DEFAULT_QOS = 0 DEFAULT_PAYLOAD_ON = "on" DEFAULT_PAYLOAD_OFF = "off" -DEFAULT_RGB_PATTERN = "%d,%d,%d" DEFAULT_OPTIMISTIC = False DEPENDENCIES = ['mqtt'] @@ -137,9 +136,8 @@ class MqttLight(Light): if ATTR_RGB_COLOR in kwargs and \ self._topic["rgb_command_topic"] is not None: - rgb = DEFAULT_RGB_PATTERN % tuple(self._rgb) mqtt.publish(self._hass, self._topic["rgb_command_topic"], - rgb, self._qos) + "{},{},{}".format(*kwargs[ATTR_RGB_COLOR]), self._qos) if self._optimistic_rgb: self._rgb = kwargs[ATTR_RGB_COLOR] @@ -147,8 +145,10 @@ class MqttLight(Light): if ATTR_BRIGHTNESS in kwargs and \ self._topic["brightness_command_topic"] is not None: + mqtt.publish(self._hass, self._topic["brightness_command_topic"], - self._brightness, self._qos) + kwargs[ATTR_BRIGHTNESS], self._qos) + if self._optimistic_brightness: self._brightness = kwargs[ATTR_BRIGHTNESS] should_update = True diff --git a/tests/components/light/test_mqtt.py b/tests/components/light/test_mqtt.py index bc0195feff1..8172a6c7c63 100644 --- a/tests/components/light/test_mqtt.py +++ b/tests/components/light/test_mqtt.py @@ -149,9 +149,7 @@ class TestLightMQTT(unittest.TestCase): 'platform': 'mqtt', 'name': 'test', 'command_topic': 'test_light_rgb/set', - 'brightness_state_topic': 'test_light_rgb/brightness/status', 'brightness_command_topic': 'test_light_rgb/brightness/set', - 'rgb_state_topic': 'test_light_rgb/rgb/status', 'rgb_command_topic': 'test_light_rgb/rgb/set', 'qos': 2, 'payload_on': 'on', @@ -177,3 +175,26 @@ class TestLightMQTT(unittest.TestCase): self.mock_publish.mock_calls[-1][1]) state = self.hass.states.get('light.test') self.assertEqual(STATE_OFF, state.state) + + light.turn_on(self.hass, 'light.test', rgb_color=[75, 75, 75], + brightness=50) + self.hass.pool.block_till_done() + + # Calls are threaded so we need to reorder them + bright_call, rgb_call, state_call = \ + sorted((call[1] for call in self.mock_publish.mock_calls[-3:]), + key=lambda call: call[0]) + + self.assertEqual(('test_light_rgb/set', 'on', 2, False), + state_call) + + self.assertEqual(('test_light_rgb/rgb/set', '75,75,75', 2, False), + rgb_call) + + self.assertEqual(('test_light_rgb/brightness/set', 50, 2, False), + bright_call) + + state = self.hass.states.get('light.test') + self.assertEqual(STATE_ON, state.state) + self.assertEqual([75, 75, 75], state.attributes['rgb_color']) + self.assertEqual(50, state.attributes['brightness'])