Add QoS parameter to MQTT websocket_subscribe (#83241)
This commit is contained in:
parent
3de7b439b8
commit
7ed1d4988b
2 changed files with 34 additions and 1 deletions
|
@ -573,6 +573,7 @@ def websocket_mqtt_info(
|
|||
{
|
||||
vol.Required("type"): "mqtt/subscribe",
|
||||
vol.Required("topic"): valid_subscribe_topic,
|
||||
vol.Optional("qos"): valid_qos_schema,
|
||||
}
|
||||
)
|
||||
@websocket_api.async_response
|
||||
|
@ -606,8 +607,9 @@ async def websocket_subscribe(
|
|||
)
|
||||
|
||||
# Perform UTF-8 decoding directly in callback routine
|
||||
qos: int = msg["qos"] if "qos" in msg else DEFAULT_QOS
|
||||
connection.subscriptions[msg["id"]] = await async_subscribe(
|
||||
hass, msg["topic"], forward_messages, encoding=None
|
||||
hass, msg["topic"], forward_messages, encoding=None, qos=qos
|
||||
)
|
||||
|
||||
connection.send_message(websocket_api.result_message(msg["id"]))
|
||||
|
|
|
@ -2021,6 +2021,37 @@ async def test_mqtt_ws_subscription(
|
|||
response = await client.receive_json()
|
||||
assert response["success"]
|
||||
|
||||
# Subscribe with QoS 2
|
||||
await client.send_json(
|
||||
{"id": 9, "type": "mqtt/subscribe", "topic": "test-topic", "qos": 2}
|
||||
)
|
||||
response = await client.receive_json()
|
||||
assert response["success"]
|
||||
|
||||
async_fire_mqtt_message(hass, "test-topic", "test1", 2)
|
||||
async_fire_mqtt_message(hass, "test-topic", "test2", 2)
|
||||
async_fire_mqtt_message(hass, "test-topic", b"\xDE\xAD\xBE\xEF", 2)
|
||||
|
||||
response = await client.receive_json()
|
||||
assert response["event"]["topic"] == "test-topic"
|
||||
assert response["event"]["payload"] == "test1"
|
||||
assert response["event"]["qos"] == 2
|
||||
|
||||
response = await client.receive_json()
|
||||
assert response["event"]["topic"] == "test-topic"
|
||||
assert response["event"]["payload"] == "test2"
|
||||
assert response["event"]["qos"] == 2
|
||||
|
||||
response = await client.receive_json()
|
||||
assert response["event"]["topic"] == "test-topic"
|
||||
assert response["event"]["payload"] == "b'\\xde\\xad\\xbe\\xef'"
|
||||
assert response["event"]["qos"] == 2
|
||||
|
||||
# Unsubscribe
|
||||
await client.send_json({"id": 15, "type": "unsubscribe_events", "subscription": 9})
|
||||
response = await client.receive_json()
|
||||
assert response["success"]
|
||||
|
||||
|
||||
async def test_mqtt_ws_subscription_not_admin(
|
||||
hass, hass_ws_client, mqtt_mock_entry_no_yaml_config, hass_read_only_access_token
|
||||
|
|
Loading…
Add table
Reference in a new issue