From 4546e1467430588c50dc18d05a40425c2c7dee53 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 21 Jul 2021 10:02:07 +0200 Subject: [PATCH] Fix MQTT to allow setting an unknown Select state (#53227) --- homeassistant/components/mqtt/select.py | 5 ++++- tests/components/mqtt/test_select.py | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/mqtt/select.py b/homeassistant/components/mqtt/select.py index 98643917788..4f4d3fbb663 100644 --- a/homeassistant/components/mqtt/select.py +++ b/homeassistant/components/mqtt/select.py @@ -126,7 +126,10 @@ class MqttSelect(MqttEntity, SelectEntity, RestoreEntity): if value_template is not None: payload = value_template.async_render_with_possible_json_value(payload) - if payload not in self.options: + if payload.lower() == "none": + payload = None + + if payload is not None and payload not in self.options: _LOGGER.error( "Invalid option for %s: '%s' (valid options: %s)", self.entity_id, diff --git a/tests/components/mqtt/test_select.py b/tests/components/mqtt/test_select.py index 5dad989a5cf..f2e48e10dc5 100644 --- a/tests/components/mqtt/test_select.py +++ b/tests/components/mqtt/test_select.py @@ -15,7 +15,7 @@ from homeassistant.components.select import ( DOMAIN as SELECT_DOMAIN, SERVICE_SELECT_OPTION, ) -from homeassistant.const import ATTR_ASSUMED_STATE, ATTR_ENTITY_ID +from homeassistant.const import ATTR_ASSUMED_STATE, ATTR_ENTITY_ID, STATE_UNKNOWN import homeassistant.core as ha from homeassistant.setup import async_setup_component @@ -122,6 +122,13 @@ async def test_value_template(hass, mqtt_mock): state = hass.states.get("select.test_select") assert state.state == "beer" + async_fire_mqtt_message(hass, topic, '{"val": null}') + + await hass.async_block_till_done() + + state = hass.states.get("select.test_select") + assert state.state == STATE_UNKNOWN + async def test_run_select_service_optimistic(hass, mqtt_mock): """Test that set_value service works in optimistic mode."""