1
0
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:
Jan Bouwhuis
2023-06-21 19:19:26 +02:00
committed by GitHub
parent 492ed1b544
commit 31f845bfe0
4 changed files with 96 additions and 2 deletions

View File

@@ -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(