From 3b89fcfe831ddf2b58da8329ce7d61ef39af8fd6 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Tue, 29 Jun 2021 11:16:07 +0200 Subject: [PATCH] Filter MQTT lock JSON attributes (#52285) --- homeassistant/components/mqtt/lock.py | 9 +++++++++ tests/components/mqtt/test_lock.py | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/homeassistant/components/mqtt/lock.py b/homeassistant/components/mqtt/lock.py index a48d271c196..45703fc0cc3 100644 --- a/homeassistant/components/mqtt/lock.py +++ b/homeassistant/components/mqtt/lock.py @@ -37,6 +37,13 @@ DEFAULT_PAYLOAD_UNLOCK = "UNLOCK" DEFAULT_STATE_LOCKED = "LOCKED" DEFAULT_STATE_UNLOCKED = "UNLOCKED" +MQTT_LOCK_ATTRIBUTES_BLOCKED = frozenset( + { + lock.ATTR_CHANGED_BY, + lock.ATTR_CODE_FORMAT, + } +) + PLATFORM_SCHEMA = mqtt.MQTT_RW_PLATFORM_SCHEMA.extend( { vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, @@ -76,6 +83,8 @@ async def _async_setup_entity( class MqttLock(MqttEntity, LockEntity): """Representation of a lock that can be toggled using MQTT.""" + _attributes_extra_blocked = MQTT_LOCK_ATTRIBUTES_BLOCKED + def __init__(self, hass, config, config_entry, discovery_data): """Initialize the lock.""" self._state = False diff --git a/tests/components/mqtt/test_lock.py b/tests/components/mqtt/test_lock.py index 754f60f49b2..39250b0a2fa 100644 --- a/tests/components/mqtt/test_lock.py +++ b/tests/components/mqtt/test_lock.py @@ -10,6 +10,7 @@ from homeassistant.components.lock import ( STATE_LOCKED, STATE_UNLOCKED, ) +from homeassistant.components.mqtt.lock import MQTT_LOCK_ATTRIBUTES_BLOCKED from homeassistant.const import ATTR_ASSUMED_STATE, ATTR_ENTITY_ID from homeassistant.setup import async_setup_component @@ -32,6 +33,7 @@ from .test_common import ( help_test_entity_id_update_subscriptions, help_test_setting_attribute_via_mqtt_json_message, help_test_setting_attribute_with_template, + help_test_setting_blocked_attribute_via_mqtt_json_message, help_test_unique_id, help_test_update_with_json_attrs_bad_JSON, help_test_update_with_json_attrs_not_dict, @@ -311,6 +313,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, LOCK_DOMAIN, DEFAULT_CONFIG, MQTT_LOCK_ATTRIBUTES_BLOCKED + ) + + async def test_setting_attribute_with_template(hass, mqtt_mock): """Test the setting of attribute via MQTT with JSON payload.""" await help_test_setting_attribute_with_template(