mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Support case of unknown/unavailable temperature/humidity (#29959)
* Support case of unknown/unavailable temperature/humidity State is never None, just a string. * Lint suggestion
This commit is contained in:
parent
445fd15f76
commit
039cc98278
@ -44,6 +44,7 @@ from homeassistant.const import (
|
|||||||
STATE_LOCKED,
|
STATE_LOCKED,
|
||||||
STATE_OFF,
|
STATE_OFF,
|
||||||
STATE_ON,
|
STATE_ON,
|
||||||
|
STATE_UNAVAILABLE,
|
||||||
STATE_UNKNOWN,
|
STATE_UNKNOWN,
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
TEMP_FAHRENHEIT,
|
TEMP_FAHRENHEIT,
|
||||||
@ -666,7 +667,7 @@ class TemperatureSettingTrait(_Trait):
|
|||||||
device_class = attrs.get(ATTR_DEVICE_CLASS)
|
device_class = attrs.get(ATTR_DEVICE_CLASS)
|
||||||
if device_class == sensor.DEVICE_CLASS_TEMPERATURE:
|
if device_class == sensor.DEVICE_CLASS_TEMPERATURE:
|
||||||
current_temp = self.state.state
|
current_temp = self.state.state
|
||||||
if current_temp is not None:
|
if current_temp not in (STATE_UNKNOWN, STATE_UNAVAILABLE):
|
||||||
response["thermostatTemperatureAmbient"] = round(
|
response["thermostatTemperatureAmbient"] = round(
|
||||||
temp_util.convert(float(current_temp), unit, TEMP_CELSIUS), 1
|
temp_util.convert(float(current_temp), unit, TEMP_CELSIUS), 1
|
||||||
)
|
)
|
||||||
@ -887,7 +888,7 @@ class HumiditySettingTrait(_Trait):
|
|||||||
device_class = attrs.get(ATTR_DEVICE_CLASS)
|
device_class = attrs.get(ATTR_DEVICE_CLASS)
|
||||||
if device_class == sensor.DEVICE_CLASS_HUMIDITY:
|
if device_class == sensor.DEVICE_CLASS_HUMIDITY:
|
||||||
current_humidity = self.state.state
|
current_humidity = self.state.state
|
||||||
if current_humidity is not None:
|
if current_humidity not in (STATE_UNKNOWN, STATE_UNAVAILABLE):
|
||||||
response["humidityAmbientPercent"] = round(float(current_humidity))
|
response["humidityAmbientPercent"] = round(float(current_humidity))
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
@ -1615,22 +1615,37 @@ async def test_temperature_setting_sensor(hass):
|
|||||||
sensor.DOMAIN, 0, sensor.DEVICE_CLASS_TEMPERATURE
|
sensor.DOMAIN, 0, sensor.DEVICE_CLASS_TEMPERATURE
|
||||||
)
|
)
|
||||||
|
|
||||||
hass.config.units.temperature_unit = TEMP_FAHRENHEIT
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"unit_in,unit_out,state,ambient",
|
||||||
|
[
|
||||||
|
(TEMP_FAHRENHEIT, "F", "70", 21.1),
|
||||||
|
(TEMP_CELSIUS, "C", "21.1", 21.1),
|
||||||
|
(TEMP_FAHRENHEIT, "F", "unavailable", None),
|
||||||
|
(TEMP_FAHRENHEIT, "F", "unknown", None),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_temperature_setting_sensor_data(hass, unit_in, unit_out, state, ambient):
|
||||||
|
"""Test TemperatureSetting trait support for temperature sensor."""
|
||||||
|
hass.config.units.temperature_unit = unit_in
|
||||||
|
|
||||||
trt = trait.TemperatureSettingTrait(
|
trt = trait.TemperatureSettingTrait(
|
||||||
hass,
|
hass,
|
||||||
State(
|
State(
|
||||||
"sensor.test", "70", {ATTR_DEVICE_CLASS: sensor.DEVICE_CLASS_TEMPERATURE}
|
"sensor.test", state, {ATTR_DEVICE_CLASS: sensor.DEVICE_CLASS_TEMPERATURE}
|
||||||
),
|
),
|
||||||
BASIC_CONFIG,
|
BASIC_CONFIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert trt.sync_attributes() == {
|
assert trt.sync_attributes() == {
|
||||||
"queryOnlyTemperatureSetting": True,
|
"queryOnlyTemperatureSetting": True,
|
||||||
"thermostatTemperatureUnit": "F",
|
"thermostatTemperatureUnit": unit_out,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert trt.query_attributes() == {"thermostatTemperatureAmbient": 21.1}
|
if ambient:
|
||||||
|
assert trt.query_attributes() == {"thermostatTemperatureAmbient": ambient}
|
||||||
|
else:
|
||||||
|
assert trt.query_attributes() == {}
|
||||||
hass.config.units.temperature_unit = TEMP_CELSIUS
|
hass.config.units.temperature_unit = TEMP_CELSIUS
|
||||||
|
|
||||||
|
|
||||||
@ -1646,14 +1661,23 @@ async def test_humidity_setting_sensor(hass):
|
|||||||
sensor.DOMAIN, 0, sensor.DEVICE_CLASS_HUMIDITY
|
sensor.DOMAIN, 0, sensor.DEVICE_CLASS_HUMIDITY
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
"state,ambient", [("70", 70), ("unavailable", None), ("unknown", None)]
|
||||||
|
)
|
||||||
|
async def test_humidity_setting_sensor_data(hass, state, ambient):
|
||||||
|
"""Test HumiditySetting trait support for humidity sensor."""
|
||||||
trt = trait.HumiditySettingTrait(
|
trt = trait.HumiditySettingTrait(
|
||||||
hass,
|
hass,
|
||||||
State("sensor.test", "70", {ATTR_DEVICE_CLASS: sensor.DEVICE_CLASS_HUMIDITY}),
|
State("sensor.test", state, {ATTR_DEVICE_CLASS: sensor.DEVICE_CLASS_HUMIDITY}),
|
||||||
BASIC_CONFIG,
|
BASIC_CONFIG,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert trt.sync_attributes() == {"queryOnlyHumiditySetting": True}
|
assert trt.sync_attributes() == {"queryOnlyHumiditySetting": True}
|
||||||
assert trt.query_attributes() == {"humidityAmbientPercent": 70}
|
if ambient:
|
||||||
|
assert trt.query_attributes() == {"humidityAmbientPercent": ambient}
|
||||||
|
else:
|
||||||
|
assert trt.query_attributes() == {}
|
||||||
|
|
||||||
with pytest.raises(helpers.SmartHomeError) as err:
|
with pytest.raises(helpers.SmartHomeError) as err:
|
||||||
await trt.execute(trait.COMMAND_ONOFF, BASIC_DATA, {"on": False}, {})
|
await trt.execute(trait.COMMAND_ONOFF, BASIC_DATA, {"on": False}, {})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user