add tests for mqtt color temp support

This commit is contained in:
Ryan Spicer
2016-09-18 21:41:07 -07:00
parent 702defb932
commit 559d1752d2

View File

@@ -55,6 +55,23 @@ light:
qos: 0 qos: 0
payload_on: "on" payload_on: "on"
payload_off: "off" payload_off: "off"
config with brightness and color temp
light:
platform: mqtt
name: "Office Light Color Temp"
state_topic: "office/rgb1/light/status"
command_topic: "office/rgb1/light/switch"
brightness_state_topic: "office/rgb1/brightness/status"
brightness_command_topic: "office/rgb1/brightness/set"
brightness_scale: 99
color_temp_state_topic: "office/rgb1/color_temp/status"
color_temp_command_topic: "office/rgb1/color_temp/set"
qos: 0
payload_on: "on"
payload_off: "off"
""" """
import unittest import unittest
@@ -88,7 +105,7 @@ class TestLightMQTT(unittest.TestCase):
}) })
self.assertIsNone(self.hass.states.get('light.test')) self.assertIsNone(self.hass.states.get('light.test'))
def test_no_color_or_brightness_if_no_topics(self): def test_no_color_or_brightness_or_color_temp_if_no_topics(self):
"""Test if there is no color and brightness if no topic.""" """Test if there is no color and brightness if no topic."""
self.hass.config.components = ['mqtt'] self.hass.config.components = ['mqtt']
assert _setup_component(self.hass, light.DOMAIN, { assert _setup_component(self.hass, light.DOMAIN, {
@@ -104,6 +121,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
self.assertIsNone(state.attributes.get('rgb_color')) self.assertIsNone(state.attributes.get('rgb_color'))
self.assertIsNone(state.attributes.get('brightness')) self.assertIsNone(state.attributes.get('brightness'))
self.assertIsNone(state.attributes.get('color_temp'))
fire_mqtt_message(self.hass, 'test_light_rgb/status', 'ON') fire_mqtt_message(self.hass, 'test_light_rgb/status', 'ON')
self.hass.block_till_done() self.hass.block_till_done()
@@ -112,6 +130,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(STATE_ON, state.state) self.assertEqual(STATE_ON, state.state)
self.assertIsNone(state.attributes.get('rgb_color')) self.assertIsNone(state.attributes.get('rgb_color'))
self.assertIsNone(state.attributes.get('brightness')) self.assertIsNone(state.attributes.get('brightness'))
self.assertIsNone(state.attributes.get('color_temp'))
def test_controlling_state_via_topic(self): def test_controlling_state_via_topic(self):
"""Test the controlling of the state via topic.""" """Test the controlling of the state via topic."""
@@ -126,6 +145,8 @@ class TestLightMQTT(unittest.TestCase):
'brightness_command_topic': 'test_light_rgb/brightness/set', 'brightness_command_topic': 'test_light_rgb/brightness/set',
'rgb_state_topic': 'test_light_rgb/rgb/status', 'rgb_state_topic': 'test_light_rgb/rgb/status',
'rgb_command_topic': 'test_light_rgb/rgb/set', 'rgb_command_topic': 'test_light_rgb/rgb/set',
'color_temp_state_topic': 'test_light_rgb/color_temp/status',
'color_temp_command_topic': 'test_light_rgb/color_temp/set',
'qos': '0', 'qos': '0',
'payload_on': 1, 'payload_on': 1,
'payload_off': 0 'payload_off': 0
@@ -136,6 +157,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(STATE_OFF, state.state) self.assertEqual(STATE_OFF, state.state)
self.assertIsNone(state.attributes.get('rgb_color')) self.assertIsNone(state.attributes.get('rgb_color'))
self.assertIsNone(state.attributes.get('brightness')) self.assertIsNone(state.attributes.get('brightness'))
self.assertIsNone(state.attributes.get('color_temp'))
self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE)) self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE))
fire_mqtt_message(self.hass, 'test_light_rgb/status', '1') fire_mqtt_message(self.hass, 'test_light_rgb/status', '1')
@@ -145,6 +167,7 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(STATE_ON, state.state) self.assertEqual(STATE_ON, state.state)
self.assertEqual([255, 255, 255], state.attributes.get('rgb_color')) self.assertEqual([255, 255, 255], state.attributes.get('rgb_color'))
self.assertEqual(255, state.attributes.get('brightness')) self.assertEqual(255, state.attributes.get('brightness'))
self.assertEqual(150, state.attributes.get('color_temp'))
fire_mqtt_message(self.hass, 'test_light_rgb/status', '0') fire_mqtt_message(self.hass, 'test_light_rgb/status', '0')
self.hass.block_till_done() self.hass.block_till_done()
@@ -163,6 +186,12 @@ class TestLightMQTT(unittest.TestCase):
self.assertEqual(100, self.assertEqual(100,
light_state.attributes['brightness']) light_state.attributes['brightness'])
fire_mqtt_message(self.hass, 'test_lgith_rgb/color_temp/status', '300')
self.hass.block_till_done()
light_state = self.hass.states.get('light-test')
self.hass.block_till_done()
self.assertEqual(300, light_state.attributes['color_temp'])
fire_mqtt_message(self.hass, 'test_light_rgb/status', '1') fire_mqtt_message(self.hass, 'test_light_rgb/status', '1')
self.hass.block_till_done() self.hass.block_till_done()
@@ -234,6 +263,7 @@ class TestLightMQTT(unittest.TestCase):
'rgb_state_topic': 'test_light_rgb/rgb/status', 'rgb_state_topic': 'test_light_rgb/rgb/status',
'state_value_template': '{{ value_json.hello }}', 'state_value_template': '{{ value_json.hello }}',
'brightness_value_template': '{{ value_json.hello }}', 'brightness_value_template': '{{ value_json.hello }}',
'color_temp_value_template': '{{ value_json.hello }}',
'rgb_value_template': '{{ value_json.hello | join(",") }}', 'rgb_value_template': '{{ value_json.hello | join(",") }}',
} }
}) })
@@ -249,12 +279,15 @@ class TestLightMQTT(unittest.TestCase):
'{"hello": "ON"}') '{"hello": "ON"}')
fire_mqtt_message(self.hass, 'test_light_rgb/brightness/status', fire_mqtt_message(self.hass, 'test_light_rgb/brightness/status',
'{"hello": "50"}') '{"hello": "50"}')
fire_mqtt_message(self.hass, 'test_light_rgb/color_temp/status',
'{"hello": "300}')
self.hass.block_till_done() self.hass.block_till_done()
state = self.hass.states.get('light.test') state = self.hass.states.get('light.test')
self.assertEqual(STATE_ON, state.state) self.assertEqual(STATE_ON, state.state)
self.assertEqual(50, state.attributes.get('brightness')) self.assertEqual(50, state.attributes.get('brightness'))
self.assertEqual([1, 2, 3], state.attributes.get('rgb_color')) self.assertEqual([1, 2, 3], state.attributes.get('rgb_color'))
self.assertEqual(300, state.attributes.get('color_temp'))
def test_sending_mqtt_commands_and_optimistic(self): def test_sending_mqtt_commands_and_optimistic(self):
"""Test the sending of command in optimistic mode.""" """Test the sending of command in optimistic mode."""
@@ -266,6 +299,7 @@ class TestLightMQTT(unittest.TestCase):
'command_topic': 'test_light_rgb/set', 'command_topic': 'test_light_rgb/set',
'brightness_command_topic': 'test_light_rgb/brightness/set', 'brightness_command_topic': 'test_light_rgb/brightness/set',
'rgb_command_topic': 'test_light_rgb/rgb/set', 'rgb_command_topic': 'test_light_rgb/rgb/set',
'color_temp_command_topic': 'test_light_rgb/color_temp/set',
'qos': 2, 'qos': 2,
'payload_on': 'on', 'payload_on': 'on',
'payload_off': 'off' 'payload_off': 'off'
@@ -338,3 +372,27 @@ class TestLightMQTT(unittest.TestCase):
state = self.hass.states.get('light.test') state = self.hass.states.get('light.test')
self.assertEqual(STATE_ON, state.state) self.assertEqual(STATE_ON, state.state)
self.assertEqual(255, state.attributes.get('brightness')) self.assertEqual(255, state.attributes.get('brightness'))
def test_show_color_temp_only_if_command_topic(self):
"""Test the color temp only if a command topic is present."""
self.hass.config.components = ['mqtt']
assert _setup_component(self.hass, light.DOMAIN, {
light.DOMAIN:{
'platform': 'mqtt',
'name': 'test',
'color_temp_command_topic': 'test_light_rgb/brightness/set',
'command_topic': 'test_light_rgb/set',
'state_topic': 'test_light_rgb/status'
}
})
state = self.hass.states.get('light.test')
self.assertEqual(STATE_OFF, state.state)
self.assertIsNone(state.attributes.get('color_temp'))
fire_mqtt_message(self.hass, 'test_light_rgb/status', 'ON')
self.hass.block_till_done()
state = self.hass.states.get('light.test')
self.assertEqual(STATE_ON, state.state)
self.assertEqual(150, state.attributes.get('color_temp'))