From 54e7ef08e34b03f08079f92d48e93e039380d9a0 Mon Sep 17 00:00:00 2001 From: Marvin Wichmann Date: Thu, 4 Nov 2021 22:52:39 +0100 Subject: [PATCH] Add test for KNX weather entity (#58898) --- tests/components/knx/test_weather.py | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 tests/components/knx/test_weather.py diff --git a/tests/components/knx/test_weather.py b/tests/components/knx/test_weather.py new file mode 100644 index 00000000000..0fc1255bf26 --- /dev/null +++ b/tests/components/knx/test_weather.py @@ -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