Consequently ignore empty MQTT state payloads and set state to unknown on "None" payload (#117813)

* Consequently ignore empty MQTT state payloads and set state to `unknown` on "None" payload

* Do not change preset mode behavior

* Add device tracker ignoring empty state

* Ignore empty state for lock

* Resolve merge errors
This commit is contained in:
Jan Bouwhuis 2024-05-25 01:29:43 +02:00 committed by GitHub
parent c616fc036e
commit 01f3a5a97c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 183 additions and 26 deletions

View file

@ -25,7 +25,12 @@ from homeassistant.components.water_heater import (
STATE_PERFORMANCE,
WaterHeaterEntityFeature,
)
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, UnitOfTemperature
from homeassistant.const import (
ATTR_TEMPERATURE,
STATE_OFF,
STATE_UNKNOWN,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from homeassistant.util.unit_conversion import TemperatureConverter
@ -200,7 +205,7 @@ async def test_set_operation_pessimistic(
await mqtt_mock_entry()
state = hass.states.get(ENTITY_WATER_HEATER)
assert state.state == "unknown"
assert state.state == STATE_UNKNOWN
await common.async_set_operation_mode(hass, "eco", ENTITY_WATER_HEATER)
state = hass.states.get(ENTITY_WATER_HEATER)
@ -214,6 +219,16 @@ async def test_set_operation_pessimistic(
state = hass.states.get(ENTITY_WATER_HEATER)
assert state.state == "eco"
# Empty state ignored
async_fire_mqtt_message(hass, "mode-state", "")
state = hass.states.get(ENTITY_WATER_HEATER)
assert state.state == "eco"
# Test None payload
async_fire_mqtt_message(hass, "mode-state", "None")
state = hass.states.get(ENTITY_WATER_HEATER)
assert state.state == STATE_UNKNOWN
@pytest.mark.parametrize(
"hass_config",