Add missing availability schema to MQTT alarm panel (#11829)
* Add missing availability schema to MQTT alarm panel * Add tests for default MQTT availability payloads
This commit is contained in:
parent
a470cc212e
commit
2cfbd0dc1d
10 changed files with 274 additions and 11 deletions
|
@ -42,7 +42,7 @@ PLATFORM_SCHEMA = mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend({
|
||||||
vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string,
|
vol.Optional(CONF_PAYLOAD_ARM_AWAY, default=DEFAULT_ARM_AWAY): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string,
|
vol.Optional(CONF_PAYLOAD_ARM_HOME, default=DEFAULT_ARM_HOME): cv.string,
|
||||||
vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string,
|
vol.Optional(CONF_PAYLOAD_DISARM, default=DEFAULT_DISARM): cv.string,
|
||||||
})
|
}).extend(mqtt.MQTT_AVAILABILITY_SCHEMA.schema)
|
||||||
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
|
|
|
@ -192,6 +192,34 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(call_count, self.mock_publish.call_count)
|
self.assertEqual(call_count, self.mock_publish.call_count)
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
assert setup_component(self.hass, alarm_control_panel.DOMAIN, {
|
||||||
|
alarm_control_panel.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'alarm/state',
|
||||||
|
'command_topic': 'alarm/command',
|
||||||
|
'code': '1234',
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
state = self.hass.states.get('alarm_control_panel.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('alarm_control_panel.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('alarm_control_panel.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
assert setup_component(self.hass, alarm_control_panel.DOMAIN, {
|
assert setup_component(self.hass, alarm_control_panel.DOMAIN, {
|
||||||
|
@ -211,13 +239,3 @@ class TestAlarmControlPanelMQTT(unittest.TestCase):
|
||||||
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
fire_mqtt_message(self.hass, 'availability-topic', 'good')
|
fire_mqtt_message(self.hass, 'availability-topic', 'good')
|
||||||
self.hass.block_till_done()
|
|
||||||
|
|
||||||
state = self.hass.states.get('alarm_control_panel.test')
|
|
||||||
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
|
||||||
|
|
||||||
fire_mqtt_message(self.hass, 'availability-topic', 'nogood')
|
|
||||||
self.hass.block_till_done()
|
|
||||||
|
|
||||||
state = self.hass.states.get('alarm_control_panel.test')
|
|
||||||
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
|
||||||
|
|
|
@ -21,6 +21,46 @@ class TestMqttFan(unittest.TestCase):
|
||||||
""""Stop everything that was started."""
|
""""Stop everything that was started."""
|
||||||
self.hass.stop()
|
self.hass.stop()
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test the availability payload."""
|
||||||
|
assert setup_component(self.hass, fan.DOMAIN, {
|
||||||
|
fan.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'state-topic',
|
||||||
|
'command_topic': 'command-topic',
|
||||||
|
'availability_topic': 'availability_topic'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
state = self.hass.states.get('fan.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('fan.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
self.assertFalse(state.attributes.get(ATTR_ASSUMED_STATE))
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('fan.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'state-topic', '1')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('fan.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('fan.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test the availability payload."""
|
"""Test the availability payload."""
|
||||||
assert setup_component(self.hass, fan.DOMAIN, {
|
assert setup_component(self.hass, fan.DOMAIN, {
|
||||||
|
|
|
@ -796,6 +796,34 @@ class TestLightMQTT(unittest.TestCase):
|
||||||
self.assertEqual(('test_light/bright', 50, 0, False),
|
self.assertEqual(('test_light/bright', 50, 0, False),
|
||||||
self.mock_publish.mock_calls[-2][1])
|
self.mock_publish.mock_calls[-2][1])
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
light.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'command_topic': 'test_light/set',
|
||||||
|
'brightness_command_topic': 'test_light/bright',
|
||||||
|
'rgb_command_topic': "test_light/rgb",
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
|
|
@ -522,6 +522,33 @@ class TestLightMQTTJSON(unittest.TestCase):
|
||||||
self.assertEqual(STATE_ON, state.state)
|
self.assertEqual(STATE_ON, state.state)
|
||||||
self.assertEqual(255, state.attributes.get('white_value'))
|
self.assertEqual(255, state.attributes.get('white_value'))
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
light.DOMAIN: {
|
||||||
|
'platform': 'mqtt_json',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'test_light_rgb',
|
||||||
|
'command_topic': 'test_light_rgb/set',
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
|
|
@ -465,6 +465,34 @@ class TestLightMQTTTemplate(unittest.TestCase):
|
||||||
state = self.hass.states.get('light.test')
|
state = self.hass.states.get('light.test')
|
||||||
self.assertEqual('rainbow', state.attributes.get('effect'))
|
self.assertEqual('rainbow', state.attributes.get('effect'))
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
light.DOMAIN: {
|
||||||
|
'platform': 'mqtt_template',
|
||||||
|
'name': 'test',
|
||||||
|
'command_topic': 'test_light_rgb/set',
|
||||||
|
'command_on_template': 'on,{{ transition }}',
|
||||||
|
'command_off_template': 'off,{{ transition|d }}',
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('light.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
self.assertTrue(setup_component(self.hass, light.DOMAIN, {
|
||||||
|
|
|
@ -112,6 +112,35 @@ class TestLockMQTT(unittest.TestCase):
|
||||||
state = self.hass.states.get('lock.test')
|
state = self.hass.states.get('lock.test')
|
||||||
self.assertEqual(STATE_UNLOCKED, state.state)
|
self.assertEqual(STATE_UNLOCKED, state.state)
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.assertTrue(setup_component(self.hass, lock.DOMAIN, {
|
||||||
|
lock.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'state-topic',
|
||||||
|
'command_topic': 'command-topic',
|
||||||
|
'payload_lock': 'LOCK',
|
||||||
|
'payload_unlock': 'UNLOCK',
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('lock.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('lock.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('lock.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.assertTrue(setup_component(self.hass, lock.DOMAIN, {
|
self.assertTrue(setup_component(self.hass, lock.DOMAIN, {
|
||||||
|
|
|
@ -185,6 +185,32 @@ class TestSensorMQTT(unittest.TestCase):
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(2, len(events))
|
self.assertEqual(2, len(events))
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.assertTrue(setup_component(self.hass, sensor.DOMAIN, {
|
||||||
|
sensor.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'test-topic',
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('sensor.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('sensor.test')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('sensor.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.assertTrue(setup_component(self.hass, sensor.DOMAIN, {
|
self.assertTrue(setup_component(self.hass, sensor.DOMAIN, {
|
||||||
|
|
|
@ -156,6 +156,48 @@ class TestSwitchMQTT(unittest.TestCase):
|
||||||
state = self.hass.states.get('switch.test')
|
state = self.hass.states.get('switch.test')
|
||||||
self.assertEqual(STATE_ON, state.state)
|
self.assertEqual(STATE_ON, state.state)
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test the availability payload."""
|
||||||
|
assert setup_component(self.hass, switch.DOMAIN, {
|
||||||
|
switch.DOMAIN: {
|
||||||
|
'platform': 'mqtt',
|
||||||
|
'name': 'test',
|
||||||
|
'state_topic': 'state-topic',
|
||||||
|
'command_topic': 'command-topic',
|
||||||
|
'availability_topic': 'availability_topic',
|
||||||
|
'payload_on': 1,
|
||||||
|
'payload_off': 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
state = self.hass.states.get('switch.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('switch.test')
|
||||||
|
self.assertEqual(STATE_OFF, state.state)
|
||||||
|
self.assertFalse(state.attributes.get(ATTR_ASSUMED_STATE))
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('switch.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'state-topic', '1')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('switch.test')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability_topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('switch.test')
|
||||||
|
self.assertEqual(STATE_ON, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test the availability payload."""
|
"""Test the availability payload."""
|
||||||
assert setup_component(self.hass, switch.DOMAIN, {
|
assert setup_component(self.hass, switch.DOMAIN, {
|
||||||
|
|
|
@ -199,6 +199,31 @@ class TestVacuumMQTT(unittest.TestCase):
|
||||||
self.assertEqual(STATE_OFF, state.state)
|
self.assertEqual(STATE_OFF, state.state)
|
||||||
self.assertEqual("Stopped", state.attributes.get(ATTR_STATUS))
|
self.assertEqual("Stopped", state.attributes.get(ATTR_STATUS))
|
||||||
|
|
||||||
|
def test_default_availability_payload(self):
|
||||||
|
"""Test availability by default payload with defined topic."""
|
||||||
|
self.default_config.update({
|
||||||
|
'availability_topic': 'availability-topic'
|
||||||
|
})
|
||||||
|
|
||||||
|
self.assertTrue(setup_component(self.hass, vacuum.DOMAIN, {
|
||||||
|
vacuum.DOMAIN: self.default_config,
|
||||||
|
}))
|
||||||
|
|
||||||
|
state = self.hass.states.get('vacuum.mqtttest')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'online')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('vacuum.mqtttest')
|
||||||
|
self.assertNotEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
|
fire_mqtt_message(self.hass, 'availability-topic', 'offline')
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
state = self.hass.states.get('vacuum.mqtttest')
|
||||||
|
self.assertEqual(STATE_UNAVAILABLE, state.state)
|
||||||
|
|
||||||
def test_custom_availability_payload(self):
|
def test_custom_availability_payload(self):
|
||||||
"""Test availability by custom payload with defined topic."""
|
"""Test availability by custom payload with defined topic."""
|
||||||
self.default_config.update({
|
self.default_config.update({
|
||||||
|
|
Loading…
Add table
Reference in a new issue