diff --git a/homeassistant/components/mqtt/number.py b/homeassistant/components/mqtt/number.py index c0cb00211e3..5986eab1207 100644 --- a/homeassistant/components/mqtt/number.py +++ b/homeassistant/components/mqtt/number.py @@ -186,6 +186,9 @@ class MqttNumber(MqttEntity, RestoreNumber): """Handle new MQTT messages.""" num_value: int | float | None payload = str(self._value_template(msg.payload)) + if not payload.strip(): + _LOGGER.debug("Ignoring empty state update from '%s'", msg.topic) + return try: if payload == self._config[CONF_PAYLOAD_RESET]: num_value = None diff --git a/tests/components/mqtt/test_number.py b/tests/components/mqtt/test_number.py index f12f5eca8b6..f882209139c 100644 --- a/tests/components/mqtt/test_number.py +++ b/tests/components/mqtt/test_number.py @@ -189,6 +189,14 @@ async def test_value_template( state = hass.states.get("number.test_number") assert state.state == "10" + # Assert an empty value from a template is ignored + async_fire_mqtt_message(hass, topic, '{"other_val":12}') + + await hass.async_block_till_done() + + state = hass.states.get("number.test_number") + assert state.state == "10" + async_fire_mqtt_message(hass, topic, '{"val":20.5}') await hass.async_block_till_done()