mirror of
https://github.com/home-assistant/core.git
synced 2025-12-25 05:26:47 +00:00
Add current_humidity attribute to mqtt humidifier (#94955)
This commit is contained in:
@@ -8,12 +8,14 @@ from voluptuous.error import MultipleInvalid
|
||||
|
||||
from homeassistant.components import humidifier, mqtt
|
||||
from homeassistant.components.humidifier import (
|
||||
ATTR_CURRENT_HUMIDITY,
|
||||
ATTR_HUMIDITY,
|
||||
ATTR_MODE,
|
||||
DOMAIN,
|
||||
SERVICE_SET_HUMIDITY,
|
||||
SERVICE_SET_MODE,
|
||||
)
|
||||
from homeassistant.components.mqtt.const import CONF_CURRENT_HUMIDITY_TOPIC
|
||||
from homeassistant.components.mqtt.humidifier import (
|
||||
CONF_MODE_COMMAND_TOPIC,
|
||||
CONF_MODE_STATE_TOPIC,
|
||||
@@ -151,6 +153,7 @@ async def test_fail_setup_if_no_command_topic(
|
||||
"name": "test",
|
||||
"state_topic": "state-topic",
|
||||
"command_topic": "command-topic",
|
||||
"current_humidity_topic": "current-humidity-topic",
|
||||
"payload_off": "StAtE_OfF",
|
||||
"payload_on": "StAtE_On",
|
||||
"target_humidity_state_topic": "humidity-state-topic",
|
||||
@@ -220,6 +223,26 @@ async def test_controlling_state_via_topic(
|
||||
assert "not a valid mode" in caplog.text
|
||||
caplog.clear()
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", "48")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 48
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", "101")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 48
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", "-1.6")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 48
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", "43.6")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 44
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", "invalid")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 44
|
||||
|
||||
async_fire_mqtt_message(hass, "mode-state-topic", "auto")
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_MODE) == "auto"
|
||||
@@ -258,6 +281,7 @@ async def test_controlling_state_via_topic(
|
||||
"name": "test",
|
||||
"state_topic": "state-topic",
|
||||
"command_topic": "command-topic",
|
||||
"current_humidity_topic": "current-humidity-topic",
|
||||
"target_humidity_state_topic": "humidity-state-topic",
|
||||
"target_humidity_command_topic": "humidity-command-topic",
|
||||
"mode_state_topic": "mode-state-topic",
|
||||
@@ -267,6 +291,7 @@ async def test_controlling_state_via_topic(
|
||||
"eco",
|
||||
"baby",
|
||||
],
|
||||
"current_humidity_template": "{{ value_json.val }}",
|
||||
"state_value_template": "{{ value_json.val }}",
|
||||
"target_humidity_state_template": "{{ value_json.val }}",
|
||||
"mode_state_template": "{{ value_json.val }}",
|
||||
@@ -312,6 +337,22 @@ async def test_controlling_state_via_topic_and_json_message(
|
||||
assert state.attributes.get(humidifier.ATTR_HUMIDITY) is None
|
||||
caplog.clear()
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", '{"val": 1}')
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 1
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", '{"val": 100}')
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) == 100
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", '{"val": "None"}')
|
||||
state = hass.states.get("humidifier.test")
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) is None
|
||||
|
||||
async_fire_mqtt_message(hass, "current-humidity-topic", '{"otherval": 100}')
|
||||
assert state.attributes.get(humidifier.ATTR_CURRENT_HUMIDITY) is None
|
||||
caplog.clear()
|
||||
|
||||
async_fire_mqtt_message(hass, "mode-state-topic", '{"val": "low"}')
|
||||
assert "not a valid mode" in caplog.text
|
||||
caplog.clear()
|
||||
@@ -746,6 +787,7 @@ async def test_sending_mqtt_commands_and_explicit_optimistic(
|
||||
("state_topic", "ON", None, "on"),
|
||||
(CONF_MODE_STATE_TOPIC, "auto", ATTR_MODE, "auto"),
|
||||
(CONF_TARGET_HUMIDITY_STATE_TOPIC, "45", ATTR_HUMIDITY, 45),
|
||||
(CONF_CURRENT_HUMIDITY_TOPIC, "39", ATTR_CURRENT_HUMIDITY, 39),
|
||||
],
|
||||
)
|
||||
async def test_encoding_subscribable_topics(
|
||||
|
||||
Reference in New Issue
Block a user