Add test for KNX weather entity (#58898)
This commit is contained in:
parent
56b7f94bbc
commit
54e7ef08e3
1 changed files with 101 additions and 0 deletions
101
tests/components/knx/test_weather.py
Normal file
101
tests/components/knx/test_weather.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
"""Test KNX weather."""
|
||||
from homeassistant.components.knx.schema import WeatherSchema
|
||||
from homeassistant.components.weather import (
|
||||
ATTR_CONDITION_EXCEPTIONAL,
|
||||
ATTR_CONDITION_RAINY,
|
||||
ATTR_CONDITION_SUNNY,
|
||||
ATTR_CONDITION_WINDY,
|
||||
)
|
||||
from homeassistant.const import CONF_NAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .conftest import KNXTestKit
|
||||
|
||||
|
||||
async def test_weather(hass: HomeAssistant, knx: KNXTestKit):
|
||||
"""Test KNX weather."""
|
||||
|
||||
await knx.setup_integration(
|
||||
{
|
||||
WeatherSchema.PLATFORM_NAME: {
|
||||
CONF_NAME: "test",
|
||||
WeatherSchema.CONF_KNX_WIND_ALARM_ADDRESS: "1/1/1",
|
||||
WeatherSchema.CONF_KNX_RAIN_ALARM_ADDRESS: "1/1/2",
|
||||
WeatherSchema.CONF_KNX_FROST_ALARM_ADDRESS: "1/1/3",
|
||||
WeatherSchema.CONF_KNX_HUMIDITY_ADDRESS: "1/1/4",
|
||||
WeatherSchema.CONF_KNX_BRIGHTNESS_EAST_ADDRESS: "1/1/5",
|
||||
WeatherSchema.CONF_KNX_BRIGHTNESS_SOUTH_ADDRESS: "1/1/6",
|
||||
WeatherSchema.CONF_KNX_BRIGHTNESS_WEST_ADDRESS: "1/1/7",
|
||||
WeatherSchema.CONF_KNX_BRIGHTNESS_NORTH_ADDRESS: "1/1/8",
|
||||
WeatherSchema.CONF_KNX_WIND_SPEED_ADDRESS: "1/1/9",
|
||||
WeatherSchema.CONF_KNX_WIND_BEARING_ADDRESS: "1/1/10",
|
||||
WeatherSchema.CONF_KNX_TEMPERATURE_ADDRESS: "1/1/11",
|
||||
WeatherSchema.CONF_KNX_DAY_NIGHT_ADDRESS: "1/1/12",
|
||||
WeatherSchema.CONF_KNX_AIR_PRESSURE_ADDRESS: "1/1/13",
|
||||
}
|
||||
}
|
||||
)
|
||||
assert len(hass.states.async_all()) == 1
|
||||
state = hass.states.get("weather.test")
|
||||
assert state.state is ATTR_CONDITION_EXCEPTIONAL
|
||||
|
||||
# StateUpdater initialize states
|
||||
await knx.assert_read("1/1/11")
|
||||
await knx.receive_response("1/1/11", (0, 40))
|
||||
|
||||
# brightness
|
||||
await knx.assert_read("1/1/6")
|
||||
await knx.receive_response("1/1/6", (0x7C, 0x5E))
|
||||
await knx.assert_read("1/1/8")
|
||||
await knx.receive_response("1/1/8", (0x7C, 0x5E))
|
||||
await knx.assert_read("1/1/7")
|
||||
await knx.receive_response("1/1/7", (0x7C, 0x5E))
|
||||
await knx.assert_read("1/1/5")
|
||||
await knx.receive_response("1/1/5", (0x7C, 0x5E))
|
||||
|
||||
# wind speed
|
||||
await knx.assert_read("1/1/9")
|
||||
await knx.receive_response("1/1/9", (0, 40))
|
||||
|
||||
# wind bearing
|
||||
await knx.assert_read("1/1/10")
|
||||
await knx.receive_response("1/1/10", (0xBF,))
|
||||
|
||||
# alarms
|
||||
await knx.assert_read("1/1/2")
|
||||
await knx.receive_response("1/1/2", False)
|
||||
await knx.assert_read("1/1/3")
|
||||
await knx.receive_response("1/1/3", False)
|
||||
await knx.assert_read("1/1/1")
|
||||
await knx.receive_response("1/1/1", False)
|
||||
|
||||
# day night
|
||||
await knx.assert_read("1/1/12")
|
||||
await knx.receive_response("1/1/12", False)
|
||||
|
||||
# air pressure
|
||||
await knx.assert_read("1/1/13")
|
||||
await knx.receive_response("1/1/13", (0x6C, 0xAD))
|
||||
|
||||
# humidity
|
||||
await knx.assert_read("1/1/4")
|
||||
await knx.receive_response("1/1/4", (0, 40))
|
||||
|
||||
# verify state
|
||||
state = hass.states.get("weather.test")
|
||||
assert state.attributes["temperature"] == 0.4
|
||||
assert state.attributes["wind_bearing"] == 270
|
||||
assert state.attributes["wind_speed"] == 1.4400000000000002
|
||||
assert state.attributes["pressure"] == 980.5824
|
||||
assert state.state is ATTR_CONDITION_SUNNY
|
||||
|
||||
# update from KNX - set rain alarm
|
||||
await knx.receive_write("1/1/2", True)
|
||||
state = hass.states.get("weather.test")
|
||||
assert state.state is ATTR_CONDITION_RAINY
|
||||
|
||||
# update from KNX - set wind alarm
|
||||
await knx.receive_write("1/1/2", False)
|
||||
await knx.receive_write("1/1/1", True)
|
||||
state = hass.states.get("weather.test")
|
||||
assert state.state is ATTR_CONDITION_WINDY
|
Loading…
Add table
Reference in a new issue