mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 21:06:19 +00:00
Add opening and closing states to MQTT covers (#31259)
* Added support for the opening and closing states to MQTT covers * Processed PR feedback on MQTT cover changes * Add missing MQTT abbreviation to fix failing tests * Fixed typo in MQTT abbreviations * Added mqtt set cover position optimistic test
This commit is contained in:
@@ -19,7 +19,9 @@ from homeassistant.const import (
|
||||
SERVICE_TOGGLE,
|
||||
SERVICE_TOGGLE_COVER_TILT,
|
||||
STATE_CLOSED,
|
||||
STATE_CLOSING,
|
||||
STATE_OPEN,
|
||||
STATE_OPENING,
|
||||
STATE_UNAVAILABLE,
|
||||
STATE_UNKNOWN,
|
||||
)
|
||||
@@ -67,6 +69,93 @@ async def test_state_via_state_topic(hass, mqtt_mock):
|
||||
assert state.state == STATE_OPEN
|
||||
|
||||
|
||||
async def test_opening_and_closing_state_via_custom_state_payload(hass, mqtt_mock):
|
||||
"""Test the controlling opening and closing state via a custom payload."""
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
cover.DOMAIN,
|
||||
{
|
||||
cover.DOMAIN: {
|
||||
"platform": "mqtt",
|
||||
"name": "test",
|
||||
"state_topic": "state-topic",
|
||||
"command_topic": "command-topic",
|
||||
"qos": 0,
|
||||
"payload_open": "OPEN",
|
||||
"payload_close": "CLOSE",
|
||||
"payload_stop": "STOP",
|
||||
"state_opening": "34",
|
||||
"state_closing": "--43",
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_UNKNOWN
|
||||
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
||||
|
||||
async_fire_mqtt_message(hass, "state-topic", "34")
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_OPENING
|
||||
|
||||
async_fire_mqtt_message(hass, "state-topic", "--43")
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_CLOSING
|
||||
|
||||
async_fire_mqtt_message(hass, "state-topic", STATE_CLOSED)
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_CLOSED
|
||||
|
||||
|
||||
async def test_open_closed_state_from_position_optimistic(hass, mqtt_mock):
|
||||
"""Test the state after setting the position using optimistic mode."""
|
||||
assert await async_setup_component(
|
||||
hass,
|
||||
cover.DOMAIN,
|
||||
{
|
||||
cover.DOMAIN: {
|
||||
"platform": "mqtt",
|
||||
"name": "test",
|
||||
"position_topic": "position-topic",
|
||||
"set_position_topic": "set-position-topic",
|
||||
"qos": 0,
|
||||
"payload_open": "OPEN",
|
||||
"payload_close": "CLOSE",
|
||||
"payload_stop": "STOP",
|
||||
"optimistic": True,
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_UNKNOWN
|
||||
|
||||
await hass.services.async_call(
|
||||
cover.DOMAIN,
|
||||
SERVICE_SET_COVER_POSITION,
|
||||
{ATTR_ENTITY_ID: "cover.test", ATTR_POSITION: 0},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_CLOSED
|
||||
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
||||
|
||||
await hass.services.async_call(
|
||||
cover.DOMAIN,
|
||||
SERVICE_SET_COVER_POSITION,
|
||||
{ATTR_ENTITY_ID: "cover.test", ATTR_POSITION: 100},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
state = hass.states.get("cover.test")
|
||||
assert state.state == STATE_OPEN
|
||||
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
||||
|
||||
|
||||
async def test_position_via_position_topic(hass, mqtt_mock):
|
||||
"""Test the controlling state via topic."""
|
||||
assert await async_setup_component(
|
||||
|
||||
Reference in New Issue
Block a user