mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Filter MQTT vacuum JSON attributes (#52291)
This commit is contained in:
parent
61f7f5c96a
commit
de4cfb0ce2
10
homeassistant/components/mqtt/vacuum/const.py
Normal file
10
homeassistant/components/mqtt/vacuum/const.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
"""Shared constants."""
|
||||||
|
from homeassistant.components import vacuum
|
||||||
|
|
||||||
|
MQTT_VACUUM_ATTRIBUTES_BLOCKED = frozenset(
|
||||||
|
{
|
||||||
|
vacuum.ATTR_BATTERY_ICON,
|
||||||
|
vacuum.ATTR_BATTERY_LEVEL,
|
||||||
|
vacuum.ATTR_FAN_SPEED,
|
||||||
|
}
|
||||||
|
)
|
@ -4,6 +4,7 @@ import json
|
|||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.vacuum import (
|
from homeassistant.components.vacuum import (
|
||||||
|
ATTR_STATUS,
|
||||||
SUPPORT_BATTERY,
|
SUPPORT_BATTERY,
|
||||||
SUPPORT_CLEAN_SPOT,
|
SUPPORT_CLEAN_SPOT,
|
||||||
SUPPORT_FAN_SPEED,
|
SUPPORT_FAN_SPEED,
|
||||||
@ -26,6 +27,7 @@ from .. import subscription
|
|||||||
from ... import mqtt
|
from ... import mqtt
|
||||||
from ..debug_info import log_messages
|
from ..debug_info import log_messages
|
||||||
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity
|
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity
|
||||||
|
from .const import MQTT_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services
|
from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services
|
||||||
|
|
||||||
SERVICE_TO_STRING = {
|
SERVICE_TO_STRING = {
|
||||||
@ -96,6 +98,10 @@ DEFAULT_PAYLOAD_TURN_ON = "turn_on"
|
|||||||
DEFAULT_RETAIN = False
|
DEFAULT_RETAIN = False
|
||||||
DEFAULT_SERVICE_STRINGS = services_to_strings(DEFAULT_SERVICES, SERVICE_TO_STRING)
|
DEFAULT_SERVICE_STRINGS = services_to_strings(DEFAULT_SERVICES, SERVICE_TO_STRING)
|
||||||
|
|
||||||
|
MQTT_LEGACY_VACUUM_ATTRIBUTES_BLOCKED = MQTT_VACUUM_ATTRIBUTES_BLOCKED | frozenset(
|
||||||
|
{ATTR_STATUS}
|
||||||
|
)
|
||||||
|
|
||||||
PLATFORM_SCHEMA_LEGACY = (
|
PLATFORM_SCHEMA_LEGACY = (
|
||||||
mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend(
|
mqtt.MQTT_BASE_PLATFORM_SCHEMA.extend(
|
||||||
{
|
{
|
||||||
@ -160,6 +166,8 @@ async def async_setup_entity_legacy(
|
|||||||
class MqttVacuum(MqttEntity, VacuumEntity):
|
class MqttVacuum(MqttEntity, VacuumEntity):
|
||||||
"""Representation of a MQTT-controlled legacy vacuum."""
|
"""Representation of a MQTT-controlled legacy vacuum."""
|
||||||
|
|
||||||
|
_attributes_extra_blocked = MQTT_LEGACY_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
|
|
||||||
def __init__(self, hass, config, config_entry, discovery_data):
|
def __init__(self, hass, config, config_entry, discovery_data):
|
||||||
"""Initialize the vacuum."""
|
"""Initialize the vacuum."""
|
||||||
self._cleaning = False
|
self._cleaning = False
|
||||||
|
@ -30,6 +30,7 @@ from .. import CONF_COMMAND_TOPIC, CONF_QOS, CONF_RETAIN, CONF_STATE_TOPIC, subs
|
|||||||
from ... import mqtt
|
from ... import mqtt
|
||||||
from ..debug_info import log_messages
|
from ..debug_info import log_messages
|
||||||
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity
|
from ..mixins import MQTT_ENTITY_COMMON_SCHEMA, MqttEntity
|
||||||
|
from .const import MQTT_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services
|
from .schema import MQTT_VACUUM_SCHEMA, services_to_strings, strings_to_services
|
||||||
|
|
||||||
SERVICE_TO_STRING = {
|
SERVICE_TO_STRING = {
|
||||||
@ -144,6 +145,8 @@ async def async_setup_entity_state(
|
|||||||
class MqttStateVacuum(MqttEntity, StateVacuumEntity):
|
class MqttStateVacuum(MqttEntity, StateVacuumEntity):
|
||||||
"""Representation of a MQTT-controlled state vacuum."""
|
"""Representation of a MQTT-controlled state vacuum."""
|
||||||
|
|
||||||
|
_attributes_extra_blocked = MQTT_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
|
|
||||||
def __init__(self, hass, config, config_entry, discovery_data):
|
def __init__(self, hass, config, config_entry, discovery_data):
|
||||||
"""Initialize the vacuum."""
|
"""Initialize the vacuum."""
|
||||||
self._state = None
|
self._state = None
|
||||||
|
@ -11,6 +11,7 @@ from homeassistant.components.mqtt.vacuum import schema_legacy as mqttvacuum
|
|||||||
from homeassistant.components.mqtt.vacuum.schema import services_to_strings
|
from homeassistant.components.mqtt.vacuum.schema import services_to_strings
|
||||||
from homeassistant.components.mqtt.vacuum.schema_legacy import (
|
from homeassistant.components.mqtt.vacuum.schema_legacy import (
|
||||||
ALL_SERVICES,
|
ALL_SERVICES,
|
||||||
|
MQTT_LEGACY_VACUUM_ATTRIBUTES_BLOCKED,
|
||||||
SERVICE_TO_STRING,
|
SERVICE_TO_STRING,
|
||||||
)
|
)
|
||||||
from homeassistant.components.vacuum import (
|
from homeassistant.components.vacuum import (
|
||||||
@ -42,6 +43,7 @@ from .test_common import (
|
|||||||
help_test_entity_id_update_subscriptions,
|
help_test_entity_id_update_subscriptions,
|
||||||
help_test_setting_attribute_via_mqtt_json_message,
|
help_test_setting_attribute_via_mqtt_json_message,
|
||||||
help_test_setting_attribute_with_template,
|
help_test_setting_attribute_with_template,
|
||||||
|
help_test_setting_blocked_attribute_via_mqtt_json_message,
|
||||||
help_test_unique_id,
|
help_test_unique_id,
|
||||||
help_test_update_with_json_attrs_bad_JSON,
|
help_test_update_with_json_attrs_bad_JSON,
|
||||||
help_test_update_with_json_attrs_not_dict,
|
help_test_update_with_json_attrs_not_dict,
|
||||||
@ -581,6 +583,17 @@ async def test_setting_attribute_via_mqtt_json_message(hass, mqtt_mock):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setting_blocked_attribute_via_mqtt_json_message(hass, mqtt_mock):
|
||||||
|
"""Test the setting of attribute via MQTT with JSON payload."""
|
||||||
|
await help_test_setting_blocked_attribute_via_mqtt_json_message(
|
||||||
|
hass,
|
||||||
|
mqtt_mock,
|
||||||
|
vacuum.DOMAIN,
|
||||||
|
DEFAULT_CONFIG_2,
|
||||||
|
MQTT_LEGACY_VACUUM_ATTRIBUTES_BLOCKED,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_setting_attribute_with_template(hass, mqtt_mock):
|
async def test_setting_attribute_with_template(hass, mqtt_mock):
|
||||||
"""Test the setting of attribute via MQTT with JSON payload."""
|
"""Test the setting of attribute via MQTT with JSON payload."""
|
||||||
await help_test_setting_attribute_with_template(
|
await help_test_setting_attribute_with_template(
|
||||||
|
@ -8,6 +8,7 @@ import pytest
|
|||||||
from homeassistant.components import vacuum
|
from homeassistant.components import vacuum
|
||||||
from homeassistant.components.mqtt import CONF_COMMAND_TOPIC, CONF_STATE_TOPIC
|
from homeassistant.components.mqtt import CONF_COMMAND_TOPIC, CONF_STATE_TOPIC
|
||||||
from homeassistant.components.mqtt.vacuum import CONF_SCHEMA, schema_state as mqttvacuum
|
from homeassistant.components.mqtt.vacuum import CONF_SCHEMA, schema_state as mqttvacuum
|
||||||
|
from homeassistant.components.mqtt.vacuum.const import MQTT_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
from homeassistant.components.mqtt.vacuum.schema import services_to_strings
|
from homeassistant.components.mqtt.vacuum.schema import services_to_strings
|
||||||
from homeassistant.components.mqtt.vacuum.schema_state import SERVICE_TO_STRING
|
from homeassistant.components.mqtt.vacuum.schema_state import SERVICE_TO_STRING
|
||||||
from homeassistant.components.vacuum import (
|
from homeassistant.components.vacuum import (
|
||||||
@ -52,6 +53,7 @@ from .test_common import (
|
|||||||
help_test_entity_id_update_subscriptions,
|
help_test_entity_id_update_subscriptions,
|
||||||
help_test_setting_attribute_via_mqtt_json_message,
|
help_test_setting_attribute_via_mqtt_json_message,
|
||||||
help_test_setting_attribute_with_template,
|
help_test_setting_attribute_with_template,
|
||||||
|
help_test_setting_blocked_attribute_via_mqtt_json_message,
|
||||||
help_test_unique_id,
|
help_test_unique_id,
|
||||||
help_test_update_with_json_attrs_bad_JSON,
|
help_test_update_with_json_attrs_bad_JSON,
|
||||||
help_test_update_with_json_attrs_not_dict,
|
help_test_update_with_json_attrs_not_dict,
|
||||||
@ -359,6 +361,13 @@ async def test_setting_attribute_via_mqtt_json_message(hass, mqtt_mock):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setting_blocked_attribute_via_mqtt_json_message(hass, mqtt_mock):
|
||||||
|
"""Test the setting of attribute via MQTT with JSON payload."""
|
||||||
|
await help_test_setting_blocked_attribute_via_mqtt_json_message(
|
||||||
|
hass, mqtt_mock, vacuum.DOMAIN, DEFAULT_CONFIG_2, MQTT_VACUUM_ATTRIBUTES_BLOCKED
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_setting_attribute_with_template(hass, mqtt_mock):
|
async def test_setting_attribute_with_template(hass, mqtt_mock):
|
||||||
"""Test the setting of attribute via MQTT with JSON payload."""
|
"""Test the setting of attribute via MQTT with JSON payload."""
|
||||||
await help_test_setting_attribute_with_template(
|
await help_test_setting_attribute_with_template(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user