From 2f0d0998a2200e2b20947fdf4bd79a95a861fa23 Mon Sep 17 00:00:00 2001 From: Jan Bouwhuis Date: Thu, 3 Feb 2022 16:50:39 +0100 Subject: [PATCH] Add Mqtt vacuum `unknown` state (#65311) * Add Mqtt vacuum `unknown` status * Update tests/components/mqtt/test_state_vacuum.py Co-authored-by: Erik Montnemery Co-authored-by: Erik Montnemery --- homeassistant/components/mqtt/vacuum/schema_state.py | 8 ++++++-- tests/components/mqtt/test_state_vacuum.py | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/mqtt/vacuum/schema_state.py b/homeassistant/components/mqtt/vacuum/schema_state.py index 1eb763c76cd..494fc60fabd 100644 --- a/homeassistant/components/mqtt/vacuum/schema_state.py +++ b/homeassistant/components/mqtt/vacuum/schema_state.py @@ -206,8 +206,12 @@ class MqttStateVacuum(MqttEntity, StateVacuumEntity): def state_message_received(msg): """Handle state MQTT message.""" payload = json.loads(msg.payload) - if STATE in payload and payload[STATE] in POSSIBLE_STATES: - self._state = POSSIBLE_STATES[payload[STATE]] + if STATE in payload and ( + payload[STATE] in POSSIBLE_STATES or payload[STATE] is None + ): + self._state = ( + POSSIBLE_STATES[payload[STATE]] if payload[STATE] else None + ) del payload[STATE] self._state_attrs.update(payload) self.async_write_ha_state() diff --git a/tests/components/mqtt/test_state_vacuum.py b/tests/components/mqtt/test_state_vacuum.py index 5011f279470..a1b90f52c37 100644 --- a/tests/components/mqtt/test_state_vacuum.py +++ b/tests/components/mqtt/test_state_vacuum.py @@ -235,6 +235,8 @@ async def test_status(hass, mqtt_mock): assert await async_setup_component(hass, vacuum.DOMAIN, {vacuum.DOMAIN: config}) await hass.async_block_till_done() + state = hass.states.get("vacuum.mqtttest") + assert state.state == STATE_UNKNOWN message = """{ "battery_level": 54, @@ -262,6 +264,11 @@ async def test_status(hass, mqtt_mock): assert state.attributes.get(ATTR_FAN_SPEED) == "min" assert state.attributes.get(ATTR_FAN_SPEED_LIST) == ["min", "medium", "high", "max"] + message = '{"state":null}' + async_fire_mqtt_message(hass, "vacuum/state", message) + state = hass.states.get("vacuum.mqtttest") + assert state.state == STATE_UNKNOWN + async def test_no_fan_vacuum(hass, mqtt_mock): """Test status updates from the vacuum when fan is not supported."""